diff options
author | Paramat <paramat@users.noreply.github.com> | 2018-06-02 03:20:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-02 03:20:09 +0100 |
commit | 99143f494711034068685b6ee845ce19fa09d7d9 (patch) | |
tree | aee8a35185cc669dba00505d9a83bd2a03db648f | |
parent | 162ffd7fba9d4e79a29f65686f3efbebaee9cee8 (diff) | |
download | minetest-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.
-rw-r--r-- | src/mapgen/mapgen.cpp | 14 |
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; + } + } } } |