From 42afe679a7f7267806b0bf2749728e609e78ccb3 Mon Sep 17 00:00:00 2001
From: paramat <mat.gregory@virginmedia.com>
Date: Thu, 1 Dec 2016 03:15:15 +0000
Subject: [PATCH] Default / flowers: New biomes. Limit dirt blobs. Add corals,
 bushes

Biomes:
Add 'sandstone desert', 'cold desert', 'snowy grassland'.
Rename 'glacier' biome to 'icesheet' biome.
Rename non-swamp 'swamp' biomes to 'shore' biomes.
Remove 'sandstone grassland' biome.
Rename 'stone grassland' biome to 'grassland' biome.
Edit biome points for improved similarity to Whittaker classification.
Change 'tundra' to bare stone with snowblocks.
Make dirt 'swamp' / 'shore' less deep.

Ores:
Make dirt blob ore biome-specific, limit to dirt biomes.

Decorations:
Make mushroom noise spread match that of appletrees as originally intended,
to have mushrooms spawn in darker thicker forest areas.
Add coral reefs in warm oceans.
Add bushes and acacia bushes.
Jungletrees in deeper water for larger swamps.

Register flower mod decorations in singlenode mapgen for use by
minetest.generate_registered_decorations, as in default/mapgen.lua.
---
 mods/default/mapgen.lua                 | 470 +++++++++++++++---------
 mods/default/schematics/acacia_bush.mts | Bin 0 -> 113 bytes
 mods/default/schematics/bush.mts        | Bin 0 -> 99 bytes
 mods/default/schematics/corals.mts      | Bin 0 -> 171 bytes
 mods/flowers/mapgen.lua                 |  14 +-
 5 files changed, 311 insertions(+), 173 deletions(-)
 create mode 100644 mods/default/schematics/acacia_bush.mts
 create mode 100644 mods/default/schematics/bush.mts
 create mode 100644 mods/default/schematics/corals.mts

diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua
index 52aa294..d786a84 100644
--- a/mods/default/mapgen.lua
+++ b/mods/default/mapgen.lua
@@ -43,6 +43,7 @@ minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebr
 --
 
 function default.register_ores()
+	minetest.clear_registered_ores()
 	-- Blob ores
 	-- These first to avoid other ores in blobs
 
@@ -109,6 +110,8 @@ function default.register_ores()
 			octaves = 1,
 			persist = 0.0
 		},
+		biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest",
+			"deciduous_forest", "savanna", "rainforest"}
 	})
 
 	-- Gravel
@@ -379,10 +382,10 @@ end
 function default.register_biomes()
 	minetest.clear_registered_biomes()
 
-	-- Permanent ice
+	-- Icesheet
 
 	minetest.register_biome({
-		name = "glacier",
+		name = "icesheet",
 		node_dust = "default:snowblock",
 		node_top = "default:snowblock",
 		depth_top = 1,
@@ -398,36 +401,36 @@ function default.register_biomes()
 		y_min = -8,
 		y_max = 31000,
 		heat_point = 0,
-		humidity_point = 50,
+		humidity_point = 73,
 	})
 
 	minetest.register_biome({
-		name = "glacier_ocean",
+		name = "icesheet_ocean",
 		node_dust = "default:snowblock",
 		node_top = "default:sand",
 		depth_top = 1,
 		node_filler = "default:sand",
 		depth_filler = 3,
 		--node_stone = "",
-		--node_water_top = "",
-		--depth_water_top = ,
+		node_water_top = "default:ice",
+		depth_water_top = 10,
 		--node_water = "",
 		--node_river_water = "",
 		y_min = -112,
 		y_max = -9,
 		heat_point = 0,
-		humidity_point = 50,
+		humidity_point = 73,
 	})
 
-	-- Cold
+	-- Tundra
 
 	minetest.register_biome({
 		name = "tundra",
-		--node_dust = "",
-		node_top = "default:dirt_with_snow",
-		depth_top = 1,
-		node_filler = "default:dirt",
-		depth_filler = 1,
+		node_dust = "default:snowblock",
+		--node_top = ,
+		--depth_top = ,
+		--node_filler = ,
+		--depth_filler = ,
 		--node_stone = "",
 		--node_water_top = "",
 		--depth_water_top = ,
@@ -437,8 +440,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 2,
 		y_max = 31000,
-		heat_point = 15,
-		humidity_point = 35,
+		heat_point = 0,
+		humidity_point = 40,
 	})
 
 	minetest.register_biome({
@@ -457,8 +460,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -3,
 		y_max = 1,
-		heat_point = 15,
-		humidity_point = 35,
+		heat_point = 0,
+		humidity_point = 40,
 	})
 
 	minetest.register_biome({
@@ -477,10 +480,11 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -112,
 		y_max = -4,
-		heat_point = 15,
-		humidity_point = 35,
+		heat_point = 0,
+		humidity_point = 40,
 	})
 
+	-- Taiga
 
 	minetest.register_biome({
 		name = "taiga",
@@ -498,8 +502,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 2,
 		y_max = 31000,
-		heat_point = 15,
-		humidity_point = 65,
+		heat_point = 25,
+		humidity_point = 70,
 	})
 
 	minetest.register_biome({
@@ -518,16 +522,16 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -112,
 		y_max = 1,
-		heat_point = 15,
-		humidity_point = 65,
+		heat_point = 25,
+		humidity_point = 70,
 	})
 
-	-- Temperate
+	-- Snowy grassland
 
 	minetest.register_biome({
-		name = "stone_grassland",
-		--node_dust = "",
-		node_top = "default:dirt_with_grass",
+		name = "snowy_grassland",
+		node_dust = "default:snow",
+		node_top = "default:dirt_with_snow",
 		depth_top = 1,
 		node_filler = "default:dirt",
 		depth_filler = 1,
@@ -538,34 +542,14 @@ function default.register_biomes()
 		--node_river_water = "",
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
-		y_min = 6,
-		y_max = 31000,
-		heat_point = 40,
-		humidity_point = 35,
-	})
-
-	minetest.register_biome({
-		name = "stone_grassland_dunes",
-		--node_dust = "",
-		node_top = "default:sand",
-		depth_top = 1,
-		node_filler = "default:sand",
-		depth_filler = 2,
-		--node_stone = "",
-		--node_water_top = "",
-		--depth_water_top = ,
-		--node_water = "",
-		--node_river_water = "",
-		node_riverbed = "default:sand",
-		depth_riverbed = 2,
 		y_min = 5,
-		y_max = 5,
-		heat_point = 40,
+		y_max = 31000,
+		heat_point = 20,
 		humidity_point = 35,
 	})
 
 	minetest.register_biome({
-		name = "stone_grassland_ocean",
+		name = "snowy_grassland_ocean",
 		--node_dust = "",
 		node_top = "default:sand",
 		depth_top = 1,
@@ -580,10 +564,73 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -112,
 		y_max = 4,
-		heat_point = 40,
+		heat_point = 20,
 		humidity_point = 35,
 	})
 
+	-- Grassland
+
+	minetest.register_biome({
+		name = "grassland",
+		--node_dust = "",
+		node_top = "default:dirt_with_grass",
+		depth_top = 1,
+		node_filler = "default:dirt",
+		depth_filler = 1,
+		--node_stone = "",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = 6,
+		y_max = 31000,
+		heat_point = 50,
+		humidity_point = 35,
+	})
+
+	minetest.register_biome({
+		name = "grassland_dunes",
+		--node_dust = "",
+		node_top = "default:sand",
+		depth_top = 1,
+		node_filler = "default:sand",
+		depth_filler = 2,
+		--node_stone = "",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = 5,
+		y_max = 5,
+		heat_point = 50,
+		humidity_point = 35,
+	})
+
+	minetest.register_biome({
+		name = "grassland_ocean",
+		--node_dust = "",
+		node_top = "default:sand",
+		depth_top = 1,
+		node_filler = "default:sand",
+		depth_filler = 3,
+		--node_stone = "",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = -112,
+		y_max = 4,
+		heat_point = 50,
+		humidity_point = 35,
+	})
+
+	-- Coniferous forest
 
 	minetest.register_biome({
 		name = "coniferous_forest",
@@ -601,8 +648,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 6,
 		y_max = 31000,
-		heat_point = 40,
-		humidity_point = 65,
+		heat_point = 45,
+		humidity_point = 70,
 	})
 
 	minetest.register_biome({
@@ -621,8 +668,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 5,
 		y_max = 5,
-		heat_point = 40,
-		humidity_point = 65,
+		heat_point = 45,
+		humidity_point = 70,
 	})
 
 	minetest.register_biome({
@@ -641,71 +688,11 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -112,
 		y_max = 4,
-		heat_point = 40,
-		humidity_point = 65,
-	})
-
-
-	minetest.register_biome({
-		name = "sandstone_grassland",
-		--node_dust = "",
-		node_top = "default:dirt_with_grass",
-		depth_top = 1,
-		node_filler = "default:dirt",
-		depth_filler = 1,
-		node_stone = "default:sandstone",
-		--node_water_top = "",
-		--depth_water_top = ,
-		--node_water = "",
-		--node_river_water = "",
-		node_riverbed = "default:sand",
-		depth_riverbed = 2,
-		y_min = 6,
-		y_max = 31000,
-		heat_point = 60,
-		humidity_point = 35,
-	})
-
-	minetest.register_biome({
-		name = "sandstone_grassland_dunes",
-		--node_dust = "",
-		node_top = "default:sand",
-		depth_top = 1,
-		node_filler = "default:sand",
-		depth_filler = 2,
-		node_stone = "default:sandstone",
-		--node_water_top = "",
-		--depth_water_top = ,
-		--node_water = "",
-		--node_river_water = "",
-		node_riverbed = "default:sand",
-		depth_riverbed = 2,
-		y_min = 5,
-		y_max = 5,
-		heat_point = 60,
-		humidity_point = 35,
-	})
-
-	minetest.register_biome({
-		name = "sandstone_grassland_ocean",
-		--node_dust = "",
-		node_top = "default:sand",
-		depth_top = 1,
-		node_filler = "default:sand",
-		depth_filler = 3,
-		node_stone = "default:sandstone",
-		--node_water_top = "",
-		--depth_water_top = ,
-		--node_water = "",
-		--node_river_water = "",
-		node_riverbed = "default:sand",
-		depth_riverbed = 2,
-		y_min = -112,
-		y_max = 4,
-		heat_point = 60,
-		humidity_point = 35,
+		heat_point = 45,
+		humidity_point = 70,
 	})
 
+	-- Deciduous forest
 
 	minetest.register_biome({
 		name = "deciduous_forest",
@@ -724,11 +711,11 @@ function default.register_biomes()
 		y_min = 1,
 		y_max = 31000,
 		heat_point = 60,
-		humidity_point = 65,
+		humidity_point = 68,
 	})
 
 	minetest.register_biome({
-		name = "deciduous_forest_swamp",
+		name = "deciduous_forest_shore",
 		--node_dust = "",
 		node_top = "default:dirt",
 		depth_top = 1,
@@ -741,10 +728,10 @@ function default.register_biomes()
 		--node_river_water = "",
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
-		y_min = -3,
+		y_min = -1,
 		y_max = 0,
 		heat_point = 60,
-		humidity_point = 65,
+		humidity_point = 68,
 	})
 
 	minetest.register_biome({
@@ -762,12 +749,12 @@ function default.register_biomes()
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
 		y_min = -112,
-		y_max = -4,
+		y_max = -2,
 		heat_point = 60,
-		humidity_point = 65,
+		humidity_point = 68,
 	})
 
-	-- Hot
+	-- Desert
 
 	minetest.register_biome({
 		name = "desert",
@@ -785,8 +772,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 5,
 		y_max = 31000,
-		heat_point = 85,
-		humidity_point = 20,
+		heat_point = 92,
+		humidity_point = 16,
 	})
 
 	minetest.register_biome({
@@ -805,10 +792,95 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = -112,
 		y_max = 4,
-		heat_point = 85,
-		humidity_point = 20,
+		heat_point = 92,
+		humidity_point = 16,
 	})
 
+	-- Sandstone desert
+
+	minetest.register_biome({
+		name = "sandstone_desert",
+		--node_dust = "",
+		node_top = "default:sand",
+		depth_top = 1,
+		node_filler = "default:sand",
+		depth_filler = 0,
+		node_stone = "default:sandstone",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = 5,
+		y_max = 31000,
+		heat_point = 60,
+		humidity_point = 0,
+	})
+
+	minetest.register_biome({
+		name = "sandstone_desert_ocean",
+		--node_dust = "",
+		node_top = "default:sand",
+		depth_top = 1,
+		node_filler = "default:sand",
+		depth_filler = 3,
+		node_stone = "default:sandstone",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = -112,
+		y_max = 4,
+		heat_point = 60,
+		humidity_point = 0,
+	})
+
+	-- Cold desert
+
+	minetest.register_biome({
+		name = "cold_desert",
+		--node_dust = "",
+		node_top = "default:silver_sand",
+		depth_top = 1,
+		node_filler = "default:silver_sand",
+		depth_filler = 1,
+		--node_stone = "",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = 5,
+		y_max = 31000,
+		heat_point = 40,
+		humidity_point = 0,
+	})
+
+	minetest.register_biome({
+		name = "cold_desert_ocean",
+		--node_dust = "",
+		node_top = "default:sand",
+		depth_top = 1,
+		node_filler = "default:sand",
+		depth_filler = 3,
+		--node_stone = "",
+		--node_water_top = "",
+		--depth_water_top = ,
+		--node_water = "",
+		--node_river_water = "",
+		node_riverbed = "default:sand",
+		depth_riverbed = 2,
+		y_min = -112,
+		y_max = 4,
+		heat_point = 40,
+		humidity_point = 0,
+	})
+
+	-- Savanna
 
 	minetest.register_biome({
 		name = "savanna",
@@ -826,12 +898,12 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 1,
 		y_max = 31000,
-		heat_point = 85,
-		humidity_point = 50,
+		heat_point = 89,
+		humidity_point = 42,
 	})
 
 	minetest.register_biome({
-		name = "savanna_swamp",
+		name = "savanna_shore",
 		--node_dust = "",
 		node_top = "default:dirt",
 		depth_top = 1,
@@ -844,10 +916,10 @@ function default.register_biomes()
 		--node_river_water = "",
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
-		y_min = -3,
+		y_min = -1,
 		y_max = 0,
-		heat_point = 85,
-		humidity_point = 50,
+		heat_point = 89,
+		humidity_point = 42,
 	})
 
 	minetest.register_biome({
@@ -865,11 +937,12 @@ function default.register_biomes()
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
 		y_min = -112,
-		y_max = -4,
-		heat_point = 85,
-		humidity_point = 50,
+		y_max = -2,
+		heat_point = 89,
+		humidity_point = 42,
 	})
 
+	-- Rainforest
 
 	minetest.register_biome({
 		name = "rainforest",
@@ -887,8 +960,8 @@ function default.register_biomes()
 		depth_riverbed = 2,
 		y_min = 1,
 		y_max = 31000,
-		heat_point = 85,
-		humidity_point = 80,
+		heat_point = 86,
+		humidity_point = 65,
 	})
 
 	minetest.register_biome({
@@ -905,10 +978,10 @@ function default.register_biomes()
 		--node_river_water = "",
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
-		y_min = -3,
+		y_min = -1,
 		y_max = 0,
-		heat_point = 85,
-		humidity_point = 80,
+		heat_point = 86,
+		humidity_point = 65,
 	})
 
 	minetest.register_biome({
@@ -926,9 +999,9 @@ function default.register_biomes()
 		node_riverbed = "default:sand",
 		depth_riverbed = 2,
 		y_min = -112,
-		y_max = -4,
-		heat_point = 85,
-		humidity_point = 80,
+		y_max = -2,
+		heat_point = 86,
+		humidity_point = 65,
 	})
 
 	-- Underground
@@ -1047,7 +1120,8 @@ function default.register_mgv6_decorations()
 	})
 end
 
--- All mapgens except mgv6 and singlenode
+
+-- All mapgens except mgv6
 
 local function register_grass_decoration(offset, scale, length)
 	minetest.register_decoration({
@@ -1062,13 +1136,11 @@ local function register_grass_decoration(offset, scale, length)
 			octaves = 3,
 			persist = 0.6
 		},
-		biomes = {"stone_grassland", "sandstone_grassland",
-			"deciduous_forest", "coniferous_forest",
-			"stone_grassland_dunes", "sandstone_grassland_dunes",
-			"coniferous_forest_dunes"},
+		biomes = {"grassland", "grassland_dunes", "deciduous_forest",
+			"coniferous_forest", "coniferous_forest_dunes"},
 		y_min = 1,
 		y_max = 31000,
-		decoration = "default:grass_"..length,
+		decoration = "default:grass_" .. length,
 	})
 end
 
@@ -1088,10 +1160,11 @@ local function register_dry_grass_decoration(offset, scale, length)
 		biomes = {"savanna"},
 		y_min = 1,
 		y_max = 31000,
-		decoration = "default:dry_grass_"..length,
+		decoration = "default:dry_grass_" .. length,
 	})
 end
 
+
 function default.register_decorations()
 	minetest.clear_registered_decorations()
 
@@ -1112,7 +1185,7 @@ function default.register_decorations()
 		biomes = {"deciduous_forest"},
 		y_min = 1,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts",
 		flags = "place_center_x, place_center_z",
 	})
 
@@ -1157,9 +1230,9 @@ function default.register_decorations()
 		sidelen = 80,
 		fill_ratio = 0.1,
 		biomes = {"rainforest", "rainforest_swamp"},
-		y_min = 0,
+		y_min = -1,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts",
 		flags = "place_center_x, place_center_z",
 		rotation = "random",
 	})
@@ -1207,7 +1280,7 @@ function default.register_decorations()
 		biomes = {"taiga", "coniferous_forest"},
 		y_min = 2,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts",
 		flags = "place_center_x, place_center_z",
 	})
 
@@ -1261,7 +1334,7 @@ function default.register_decorations()
 		biomes = {"savanna"},
 		y_min = 1,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts",
 		flags = "place_center_x, place_center_z",
 		rotation = "random",
 	})
@@ -1313,7 +1386,7 @@ function default.register_decorations()
 		biomes = {"deciduous_forest"},
 		y_min = 1,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts",
 		flags = "place_center_x, place_center_z",
 	})
 
@@ -1349,6 +1422,7 @@ function default.register_decorations()
 		flags = "place_center_x",
 		rotation = "random",
 	})
+
 	-- Large cactus
 
 	minetest.register_decoration({
@@ -1366,7 +1440,7 @@ function default.register_decorations()
 		biomes = {"desert"},
 		y_min = 5,
 		y_max = 31000,
-		schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts",
 		flags = "place_center_x",
 		rotation = "random",
 	})
@@ -1407,10 +1481,52 @@ function default.register_decorations()
 			octaves = 3,
 			persist = 0.7
 		},
-		biomes = {"savanna_swamp"},
+		biomes = {"savanna_shore"},
 		y_min = 0,
 		y_max = 0,
-		schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
+		schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts",
+	})
+
+	-- Bush
+
+	minetest.register_decoration({
+		deco_type = "schematic",
+		place_on = {"default:dirt_with_grass", "default:dirt_with_snow"},
+		sidelen = 16,
+		noise_params = {
+			offset = -0.004,
+			scale = 0.01,
+			spread = {x = 100, y = 100, z = 100},
+			seed = 137,
+			octaves = 3,
+			persist = 0.7,
+		},
+		biomes = {"snowy_grassland", "grassland", "deciduous_forest"},
+		y_min = 1,
+		y_max = 31000,
+		schematic = minetest.get_modpath("default") .. "/schematics/bush.mts",
+		flags = "place_center_x, place_center_z",
+	})
+
+	-- Acacia bush
+
+	minetest.register_decoration({
+		deco_type = "schematic",
+		place_on = {"default:dirt_with_dry_grass"},
+		sidelen = 16,
+		noise_params = {
+			offset = -0.004,
+			scale = 0.01,
+			spread = {x = 100, y = 100, z = 100},
+			seed = 90155,
+			octaves = 3,
+			persist = 0.7,
+		},
+		biomes = {"savanna"},
+		y_min = 1,
+		y_max = 31000,
+		schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts",
+		flags = "place_center_x, place_center_z",
 	})
 
 	-- Grasses
@@ -1446,7 +1562,8 @@ function default.register_decorations()
 
 	minetest.register_decoration({
 		deco_type = "simple",
-		place_on = {"default:desert_sand", "default:dirt_with_snow"},
+		place_on = {"default:desert_sand",
+			"default:sand", "default:silver_sand"},
 		sidelen = 16,
 		noise_params = {
 			offset = 0,
@@ -1456,11 +1573,36 @@ function default.register_decorations()
 			octaves = 3,
 			persist = 0.6
 		},
-		biomes = {"desert", "tundra"},
+		biomes = {"desert", "sandstone_desert", "cold_desert"},
 		y_min = 2,
 		y_max = 31000,
 		decoration = "default:dry_shrub",
 	})
+
+	-- Coral reef
+
+	minetest.register_decoration({
+		deco_type = "schematic",
+		place_on = {"default:sand"},
+		noise_params = {
+			offset = -0.1,
+			scale = 0.1,
+			spread = {x = 200, y = 200, z = 200},
+			seed = 7013,
+			octaves = 3,
+			persist = 1,
+		},
+		biomes = {
+			"desert_ocean",
+			"savanna_ocean",
+			"rainforest_ocean",
+		},
+		y_min = -8,
+		y_max = -2,
+		schematic = minetest.get_modpath("default") .. "/schematics/corals.mts",
+		flags = "place_center_x, place_center_z",
+		rotation = "random",
+	})
 end
 
 
diff --git a/mods/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts
new file mode 100644
index 0000000000000000000000000000000000000000..df95586110928918f10e78311b6a0a974b7e150a
GIT binary patch
literal 113
zcmeYb3HD`RVPFQq`uchhm6%z?AeEAumROooVwISjn4FmypHy0$5ucNqSe9DMAc0M;
uxFj{VVoq`b1GAe7hj8K{0mm@mc=>$!eEyUx|JSo`n&?`<$e_o_-UI-1Y9pTj

literal 0
HcmV?d00001

diff --git a/mods/default/schematics/bush.mts b/mods/default/schematics/bush.mts
new file mode 100644
index 0000000000000000000000000000000000000000..d08cf5f5f9a204b3389405db80edae858d871dd7
GIT binary patch
literal 99
zcmeYb3HD`RVPFQq`uchhm6%z?Ae@q#mROooVwF@{oDrXsnpl=v%piy&SX`2tTQMg&
nfq~ggg+n;;kbq;DaJ+oJd_I55mH+G6H%)XcU}Vr^WN!ihdf6T?

literal 0
HcmV?d00001

diff --git a/mods/default/schematics/corals.mts b/mods/default/schematics/corals.mts
new file mode 100644
index 0000000000000000000000000000000000000000..e1bd7ded6c202e4ca9f308164806f53117606728
GIT binary patch
literal 171
zcmeYb3HD`RVPIuoW?-$aw+Awr6Elk#L{d`I5=(PRtdjGK5_95#L|%F-gD|RSQc-?+
z9)lRFU~zV8PHIVhUd5cXJr{Wy6gix^-`F!RE)@~k)9~+pchcpcMz;l}!mV5L=PU0m
z+!C7hHEZ`~<JjH*wgu@InW`nTG=8|U@qAm#h2XTRgr)P0o(HS_OJPhrr0EI(t$agN

literal 0
HcmV?d00001

diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua
index 162b11d..ec03c9b 100644
--- a/mods/flowers/mapgen.lua
+++ b/mods/flowers/mapgen.lua
@@ -94,8 +94,7 @@ local function register_flower(seed, name)
 			octaves = 3,
 			persist = 0.6
 		},
-		biomes = {"stone_grassland", "sandstone_grassland",
-			"deciduous_forest", "coniferous_forest"},
+		biomes = {"grassland", "deciduous_forest", "coniferous_forest"},
 		y_min = 1,
 		y_max = 31000,
 		decoration = "flowers:"..name,
@@ -110,7 +109,7 @@ local function register_mushroom(name)
 		noise_params = {
 			offset = 0,
 			scale = 0.006,
-			spread = {x = 200, y = 200, z = 200},
+			spread = {x = 250, y = 250, z = 250},
 			seed = 2,
 			octaves = 3,
 			persist = 0.66
@@ -135,10 +134,10 @@ local function register_waterlily()
 			octaves = 3,
 			persist = 0.7
 		},
-		biomes = {"rainforest_swamp", "savanna_swamp", "deciduous_forest_swamp"},
+		biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"},
 		y_min = 0,
 		y_max = 0,
-		schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts",
+		schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts",
 		rotation = "random",
 	})
 end
@@ -162,12 +161,9 @@ end
 -- Detect mapgen to select functions
 --
 
--- Mods using singlenode mapgen can call these functions to enable
--- the use of minetest.generate_ores or minetest.generate_decorations
-
 local mg_name = minetest.get_mapgen_setting("mg_name")
 if mg_name == "v6" then
 	flowers.register_mgv6_decorations()
-elseif mg_name ~= "singlenode" then
+else
 	flowers.register_decorations()
 end