diff options
author | Paramat <paramat@users.noreply.github.com> | 2018-04-21 20:35:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-21 20:35:29 +0100 |
commit | 5abd0efb903877efc2d6f4af571db400bc6551aa (patch) | |
tree | 9617a5029ed3dbed5366e120408994e554abedee | |
parent | cb92cdf3a4656379cda5569754e748904417687d (diff) | |
download | minetest-5abd0efb903877efc2d6f4af571db400bc6551aa.tar.gz minetest-5abd0efb903877efc2d6f4af571db400bc6551aa.tar.bz2 minetest-5abd0efb903877efc2d6f4af571db400bc6551aa.zip |
Cave liquids: Use a more precise point for calculating biome
Use the centre point of the route being carved for a more precise match
between cave liquids and biome.
-rw-r--r-- | src/mapgen/cavegen.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/mapgen/cavegen.cpp b/src/mapgen/cavegen.cpp index 0b49f653f..e7b98e84f 100644 --- a/src/mapgen/cavegen.cpp +++ b/src/mapgen/cavegen.cpp @@ -497,28 +497,29 @@ void CavesRandomWalk::carveRoute(v3f vec, float f, bool randomize_xz) v3s16 startp(orp.X, orp.Y, orp.Z); startp += of; - // Get biome at 'startp', use 'node_cave_liquid' if stated, otherwise - // fallback to classic behaviour. + v3f fp = orp + vec * f; + fp.X += 0.1f * ps->range(-10, 10); + fp.Z += 0.1f * ps->range(-10, 10); + v3s16 cp(fp.X, fp.Y, fp.Z); + + // Get biome at 'cp + of', the absolute centre point of this route + v3s16 cpabs = cp + of; MapNode liquidnode = CONTENT_IGNORE; if (bmgn) { - Biome *biome = (Biome *)bmgn->calcBiomeAtPoint(startp); + Biome *biome = (Biome *)bmgn->calcBiomeAtPoint(cpabs); if (biome->c_cave_liquid != CONTENT_IGNORE) liquidnode = biome->c_cave_liquid; } if (liquidnode == CONTENT_IGNORE) { + // Fallback to classic behaviour using point 'startp' float nval = NoisePerlin3D(np_caveliquids, startp.X, startp.Y, startp.Z, seed); liquidnode = (nval < 0.40f && node_max.Y < lava_depth) ? lavanode : waternode; } - v3f fp = orp + vec * f; - fp.X += 0.1f * ps->range(-10, 10); - fp.Z += 0.1f * ps->range(-10, 10); - v3s16 cp(fp.X, fp.Y, fp.Z); - s16 d0 = -rs / 2; s16 d1 = d0 + rs; if (randomize_xz) { |