Biomemap: Avoid empty biomemap entry to fix failing biome dust (#7393)
authorParamat <paramat@users.noreply.github.com>
Sat, 2 Jun 2018 02:20:09 +0000 (03:20 +0100)
committerGitHub <noreply@github.com>
Sat, 2 Jun 2018 02:20:09 +0000 (03:20 +0100)
'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.

src/mapgen/mapgen.cpp

index 6ffe0ec1e1a7ebc40f6a5fffa31cfa67e9bec7dd..eb7803144bb7653a92dc87df0b88136e4f218a1f 100644 (file)
@@ -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;
+                       }
+               }
        }
 }