[***Mapgen v7]
# Map generation attributes specific to Mapgen v7.
-# The 'ridges' flag enables the rivers.
-# Floatlands are currently experimental and subject to change.
+# 'ridges' enables the rivers.
+# 'biomerepeat' causes surface biomes to repeat in the floatlands.
# Flags that are not specified in the flag string are not modified from the default.
# Flags starting with 'no' are used to explicitly disable them.
-mgv7_spflags (Mapgen v7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns,nomountains,noridges,nofloatlands,nocaverns
+mgv7_spflags (Mapgen v7 specific flags) flags mountains,ridges,nofloatlands,caverns,biomerepeat mountains,ridges,floatlands,caverns,biomerepeat,nomountains,noridges,nofloatlands,nocaverns,nobiomerepeat
# Controls width of tunnels, a smaller value creates wider tunnels.
mgv7_cave_width (Cave width) float 0.09
#### Mapgen v7
# Map generation attributes specific to Mapgen v7.
-# The 'ridges' flag enables the rivers.
-# Floatlands are currently experimental and subject to change.
+# 'ridges' enables the rivers.
+# 'biomerepeat' causes surface biomes to repeat in the floatlands.
# Flags that are not specified in the flag string are not modified from the default.
# Flags starting with 'no' are used to explicitly disable them.
-# type: flags possible values: mountains, ridges, floatlands, caverns, nomountains, noridges, nofloatlands, nocaverns
-# mgv7_spflags = mountains,ridges,nofloatlands,caverns
+# type: flags possible values: mountains, ridges, floatlands, caverns, biomerepeat, nomountains, noridges, nofloatlands, nocaverns, nobiomerepeat
+# mgv7_spflags = mountains,ridges,nofloatlands,caverns,biomerepeat
# Controls width of tunnels, a smaller value creates wider tunnels.
# type: float
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}
};
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();
// 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) {
// 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,
#include "mapgen.h"
-//////////// Mapgen V7 flags
-#define MGV7_MOUNTAINS 0x01
-#define MGV7_RIDGES 0x02
-#define MGV7_FLOATLANDS 0x04
-#define MGV7_CAVERNS 0x08
+/////////////// Mapgen V7 flags
+#define MGV7_MOUNTAINS 0x01
+#define MGV7_RIDGES 0x02
+#define MGV7_FLOATLANDS 0x04
+#define MGV7_CAVERNS 0x08
+#define MGV7_BIOMEREPEAT 0x10
class BiomeManager;
struct MapgenV7Params : public MapgenParams {
- u32 spflags = MGV7_MOUNTAINS | MGV7_RIDGES | MGV7_CAVERNS;
+ u32 spflags = MGV7_MOUNTAINS | MGV7_RIDGES |
+ MGV7_CAVERNS | MGV7_BIOMEREPEAT;
float cave_width = 0.09f;
s16 large_cave_depth = -33;
s16 lava_depth = -256;