diff options
author | Paramat <paramat@users.noreply.github.com> | 2018-06-21 19:28:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-21 19:28:54 +0100 |
commit | 8d3190e77a9d13bf0bca3ecdf40a788ce1d39d58 (patch) | |
tree | f6ed139f4fcb18c736f4c8baee84747599848996 /src/mapgen | |
parent | 525fa9145e0183c01ae05aeace967fbfe78f65a5 (diff) | |
download | minetest-8d3190e77a9d13bf0bca3ecdf40a788ce1d39d58.tar.gz minetest-8d3190e77a9d13bf0bca3ecdf40a788ce1d39d58.tar.bz2 minetest-8d3190e77a9d13bf0bca3ecdf40a788ce1d39d58.zip |
Biome API: Fix absent water decorations and dust, in deep water (#7470)
Previously, the biomemap was 'BIOME_NONE' for a mapchunk column if a
stone surface was not found in it, causing water surface decorations
and water surface dust to fail.
Store the biome ID of the biome calculated at a water surface and add
it to the biomemap if the biomemap is 'BIOME_NONE' for the mapchunk
column. The biome calculated at a stone surface still has priority
for the biomemap entry, as it should.
Edit an incorrect comment.
Diffstat (limited to 'src/mapgen')
-rw-r--r-- | src/mapgen/mapgen.cpp | 11 | ||||
-rw-r--r-- | src/mapgen/mg_biome.cpp | 6 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 85aab363b..7de367a27 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -655,6 +655,7 @@ void MapgenBasic::generateBiomes() for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { Biome *biome = NULL; + biome_t water_biome_index = 0; u16 depth_top = 0; u16 base_filler = 0; u16 depth_water_top = 0; @@ -697,6 +698,11 @@ void MapgenBasic::generateBiomes() if (biomemap[index] == BIOME_NONE && is_stone_surface) biomemap[index] = biome->index; + // Store biome of first water surface detected, as a fallback + // entry for the biomemap. + if (water_biome_index == 0 && is_water_surface) + water_biome_index = biome->index; + depth_top = biome->depth_top; base_filler = MYMAX(depth_top + biome->depth_filler + @@ -763,6 +769,11 @@ void MapgenBasic::generateBiomes() VoxelArea::add_y(em, vi, -1); } + // If no stone surface detected in mapchunk column and a water surface + // biome fallback exists, add it to the biomemap. This avoids water + // surface decorations failing in deep water. + if (biomemap[index] == BIOME_NONE && water_biome_index != 0) + biomemap[index] = water_biome_index; } } diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index e02eee703..7f717011c 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -194,9 +194,9 @@ BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr, humidmap = noise_humidity->result; biomemap = new biome_t[m_csize.X * m_csize.Z]; - // Initialise with the ID of the default biome so that cavegen can get - // biomes when biome generation (which calculates the biomemap IDs) is - // disabled. + // Initialise with the ID of 'BIOME_NONE' so that cavegen can get the + // fallback biome when biome generation (which calculates the biomemap IDs) + // is disabled. memset(biomemap, 0, sizeof(biome_t) * m_csize.X * m_csize.Z); } |