diff --git a/src/map.cpp b/src/map.cpp index 272bc9322..f128aff6c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1653,6 +1653,8 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) u16 loop_max = g_settings->getU16("liquid_loop_max"); + //if (m_transforming_liquid.size() > 0) errorstream << "Liquid queue size="< 0) { // This should be done here so that it is done when continue is used @@ -1771,7 +1773,7 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) } // prevent lakes in air above unloaded blocks - if (liquid_levels[D_TOP] == 0 && (p0.Y > water_level || !fast_flood) && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) { + if (liquid_levels[D_TOP] == 0 && (p0.Y > water_level) && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE && !(loopcount % 3)) { --total_level; } @@ -1794,11 +1796,16 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) if (!neighbors[ii].l) continue; liquid_levels_want[ii] = want_level; - if (liquid_levels_want[ii] < LIQUID_LEVEL_SOURCE && total_level > 0 - && liquid_levels[ii] > liquid_levels_want[ii] - ) { - ++liquid_levels_want[ii]; - --total_level; + if (liquid_levels_want[ii] < LIQUID_LEVEL_SOURCE && total_level > 0) { + if (loopcount % 3 || liquid_levels[ii] <= 0){ + if (liquid_levels[ii] > liquid_levels_want[ii]) { + ++liquid_levels_want[ii]; + --total_level; + } + } else if (neighbors[ii].l > 0){ + ++liquid_levels_want[ii]; + --total_level; + } } }