Cavegen: Fix errors when getting biome outside mapchunk (#7480)

Some cave segments are outside the mapchunk.

Previously, biome was being calculated by a function that uses the noise
maps. Points outside the mapchunk resulted in incorrect noise map indexes
that were sometimes outside the noise map size, causing a crash.

Use either noise maps or point noise calculations depending on point
location.
master
Paramat 2018-06-26 19:35:23 +01:00 committed by GitHub
parent b589352e79
commit 93661ca212
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 1 deletions

View File

@ -507,7 +507,16 @@ void CavesRandomWalk::carveRoute(v3f vec, float f, bool randomize_xz)
MapNode liquidnode = CONTENT_IGNORE;
if (bmgn) {
Biome *biome = (Biome *)bmgn->getBiomeAtPoint(cpabs);
Biome *biome = nullptr;
if (cpabs.X < node_min.X || cpabs.X > node_max.X ||
cpabs.Z < node_min.Z || cpabs.Z > node_max.Z)
// Point is outside heat and humidity noise maps so use point noise
// calculations.
biome = (Biome *)bmgn->calcBiomeAtPoint(cpabs);
else
// Point is inside heat and humidity noise maps so use them
biome = (Biome *)bmgn->getBiomeAtPoint(cpabs);
if (biome->c_cave_liquid != CONTENT_IGNORE)
liquidnode = biome->c_cave_liquid;
}