Permalink
Browse files

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.
  • Loading branch information...
paramat committed Jun 26, 2018
1 parent b589352 commit 93661ca2122639b000dc3860700e5c61ebbc6497
Showing with 10 additions and 1 deletion.
  1. +10 −1 src/mapgen/cavegen.cpp
@@ -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;
}

0 comments on commit 93661ca

Please sign in to comment.