summaryrefslogtreecommitdiff
path: root/src/mapgen_v7.cpp
diff options
context:
space:
mode:
authorparamat <paramat@users.noreply.github.com>2017-07-13 21:03:16 +0100
committerparamat <mat.gregory@virginmedia.com>2017-07-22 00:56:55 +0100
commitdc9e4517a89c3e67585908c88c01442c4d6e3efa (patch)
treed58aac4b2be752765193e7c286abc970befc6949 /src/mapgen_v7.cpp
parent49920cfe8dc7869bb8235c6fe2b8ef26e2a523ca (diff)
downloadminetest-dc9e4517a89c3e67585908c88c01442c4d6e3efa.tar.gz
minetest-dc9e4517a89c3e67585908c88c01442c4d6e3efa.tar.bz2
minetest-dc9e4517a89c3e67585908c88c01442c4d6e3efa.zip
Mgv7: Add option to repeat surface biomes in floatlands
Diffstat (limited to 'src/mapgen_v7.cpp')
-rw-r--r--src/mapgen_v7.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp
index 4b263bdb3..cdf76993d 100644
--- a/src/mapgen_v7.cpp
+++ b/src/mapgen_v7.cpp
@@ -40,11 +40,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
FlagDesc flagdesc_mapgen_v7[] = {
- {"mountains", MGV7_MOUNTAINS},
- {"ridges", MGV7_RIDGES},
- {"floatlands", MGV7_FLOATLANDS},
- {"caverns", MGV7_CAVERNS},
- {NULL, 0}
+ {"mountains", MGV7_MOUNTAINS},
+ {"ridges", MGV7_RIDGES},
+ {"floatlands", MGV7_FLOATLANDS},
+ {"caverns", MGV7_CAVERNS},
+ {"biomerepeat", MGV7_BIOMEREPEAT},
+ {NULL, 0}
};
@@ -285,6 +286,12 @@ void MapgenV7::makeChunk(BlockMakeData *data)
blockseed = getBlockSeed2(full_node_min, seed);
+ // Get zero level for biomes and decorations
+ // Optionally repeat surface biomes in floatlands
+ s16 biome_zero_level = ((spflags & MGV7_FLOATLANDS) &&
+ (spflags & MGV7_BIOMEREPEAT) && node_max.Y >= shadow_limit) ?
+ floatland_level - 1 : water_level - 1;
+
// Generate base and mountain terrain
// An initial heightmap is no longer created here for use in generateRidgeTerrain()
s16 stone_surface_max_y = generateTerrain();
@@ -298,7 +305,7 @@ void MapgenV7::makeChunk(BlockMakeData *data)
// Init biome generator, place biome-specific nodes, and build biomemap
biomegen->calcBiomeNoise(node_min);
- MgStoneType stone_type = generateBiomes(water_level - 1);
+ MgStoneType stone_type = generateBiomes(biome_zero_level);
// Generate caverns, tunnels and classic caves
if (flags & MG_CAVES) {
@@ -323,7 +330,7 @@ void MapgenV7::makeChunk(BlockMakeData *data)
// Generate the registered decorations
if (flags & MG_DECORATIONS)
m_emerge->decomgr->placeAllDecos(this, blockseed,
- node_min, node_max, water_level - 1);
+ node_min, node_max, biome_zero_level);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed,