aboutsummaryrefslogtreecommitdiff
path: root/src/mapgen/mapgen.cpp
diff options
context:
space:
mode:
authorParamat <paramat@users.noreply.github.com>2018-06-02 03:20:09 +0100
committerGitHub <noreply@github.com>2018-06-02 03:20:09 +0100
commit99143f494711034068685b6ee845ce19fa09d7d9 (patch)
treeaee8a35185cc669dba00505d9a83bd2a03db648f /src/mapgen/mapgen.cpp
parent162ffd7fba9d4e79a29f65686f3efbebaee9cee8 (diff)
downloadminetest-99143f494711034068685b6ee845ce19fa09d7d9.tar.gz
minetest-99143f494711034068685b6ee845ce19fa09d7d9.tar.bz2
minetest-99143f494711034068685b6ee845ce19fa09d7d9.zip
Biomemap: Avoid empty biomemap entry to fix failing biome dust (#7393)
'generateBiomes()' constructs the biomemap as it generates biomes. The biome calculated at first stone surface encountered is added to the biomemap. Previously, if no stone surface was encountered in a mapchunk column the biomemap was left empty for that (x, z) position, causing biome dust and water surface decoration placement to fail. If at the base of a mapchunk column the biomemap is empty, add the currently active biome to the biomemap, or if biome is NULL calculate it for this position and add it to the biomemap.
Diffstat (limited to 'src/mapgen/mapgen.cpp')
-rw-r--r--src/mapgen/mapgen.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index 6ffe0ec1e..eb7803144 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -692,6 +692,7 @@ void MapgenBasic::generateBiomes()
// (Re)calculate biome
biome = biomegen->getBiomeAtIndex(index, v3s16(x, y, z));
+ // Add biome to biomemap at first stone surface detected
if (biomemap[index] == BIOME_NONE && is_stone_surface)
biomemap[index] = biome->index;
@@ -761,6 +762,19 @@ void MapgenBasic::generateBiomes()
VoxelArea::add_y(em, vi, -1);
}
+ // If no stone surface was detected in this mapchunk column the biomemap
+ // will be empty for this (x, z) position. Add the currently active
+ // biome to the biomemap, or if biome is NULL calculate it for this
+ // position.
+ if (biomemap[index] == BIOME_NONE) {
+ if (biome) {
+ biomemap[index] = biome->index;
+ } else {
+ biome =
+ biomegen->getBiomeAtIndex(index, v3s16(x, node_min.Y, z));
+ biomemap[index] = biome->index;
+ }
+ }
}
}