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.
This commit is contained in:
Paramat 2018-06-02 03:20:09 +01:00 committed by GitHub
parent 162ffd7fba
commit 99143f4947
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -692,6 +692,7 @@ void MapgenBasic::generateBiomes()
// (Re)calculate biome // (Re)calculate biome
biome = biomegen->getBiomeAtIndex(index, v3s16(x, y, z)); 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) if (biomemap[index] == BIOME_NONE && is_stone_surface)
biomemap[index] = biome->index; biomemap[index] = biome->index;
@ -761,6 +762,19 @@ void MapgenBasic::generateBiomes()
VoxelArea::add_y(em, vi, -1); 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;
}
}
} }
} }