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.
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;
}