Default: Optimise and simplify leafdecay ABM, remove cache
[oweals/minetest_game.git] / mods / default / mapgen.lua
index 733fd6d73dcf41fe66bb6455d735f81b1dbcdfad..52aa294c7e5dd5bd0cfe2861eb7fd779f70f1b4c 100644 (file)
@@ -42,97 +42,111 @@ minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebr
 -- Register ores
 --
 
--- All mapgens except singlenode
--- Blob ore first to avoid other ores inside blobs
-
 function default.register_ores()
+       -- Blob ores
+       -- These first to avoid other ores in blobs
 
        -- Clay
+       -- This first to avoid clay in sand blobs
 
-       minetest.register_ore({ 
-               ore_type         = "blob",
-               ore              = "default:clay",
-               wherein          = {"default:sand"},
-               clust_scarcity   = 24 * 24 * 24,
-               clust_size       = 7,
-               y_min            = -15,
-               y_max            = 0,
-               noise_threshhold = 0,
-               noise_params     = {
-                       offset = 0.35,
+       minetest.register_ore({
+               ore_type        = "blob",
+               ore             = "default:clay",
+               wherein         = {"default:sand"},
+               clust_scarcity  = 16 * 16 * 16,
+               clust_size      = 5,
+               y_min           = -15,
+               y_max           = 0,
+               noise_threshold = 0.0,
+               noise_params    = {
+                       offset = 0.5,
                        scale = 0.2,
                        spread = {x = 5, y = 5, z = 5},
                        seed = -316,
                        octaves = 1,
-                       persist = 0.5
+                       persist = 0.0
                },
        })
 
        -- Sand
 
-       minetest.register_ore({ 
-               ore_type         = "blob",
-               ore              = "default:sand",
-               wherein          = {"default:stone"},
-               clust_scarcity   = 24 * 24 * 24,
-               clust_size       = 7,
-               y_min            = -63,
-               y_max            = 4,
-               noise_threshhold = 0,
-               noise_params     = {
-                       offset = 0.35,
+       minetest.register_ore({
+               ore_type        = "blob",
+               ore             = "default:sand",
+               wherein         = {"default:stone", "default:sandstone",
+                       "default:desert_stone"},
+               clust_scarcity  = 16 * 16 * 16,
+               clust_size      = 5,
+               y_min           = -31,
+               y_max           = 0,
+               noise_threshold = 0.0,
+               noise_params    = {
+                       offset = 0.5,
                        scale = 0.2,
                        spread = {x = 5, y = 5, z = 5},
                        seed = 2316,
                        octaves = 1,
-                       persist = 0.5
+                       persist = 0.0
                },
        })
 
        -- Dirt
 
        minetest.register_ore({
-               ore_type         = "blob",
-               ore              = "default:dirt",
-               wherein          = {"default:stone"},
-               clust_scarcity   = 24 * 24 * 24,
-               clust_size       = 7,
-               y_min            = -63,
-               y_max            = 31000,
-               noise_threshhold = 0,
-               noise_params     = {
-                       offset = 0.35,
+               ore_type        = "blob",
+               ore             = "default:dirt",
+               wherein         = {"default:stone"},
+               clust_scarcity  = 16 * 16 * 16,
+               clust_size      = 5,
+               y_min           = -31,
+               y_max           = 31000,
+               noise_threshold = 0.0,
+               noise_params    = {
+                       offset = 0.5,
                        scale = 0.2,
                        spread = {x = 5, y = 5, z = 5},
                        seed = 17676,
                        octaves = 1,
-                       persist = 0.5
+                       persist = 0.0
                },
        })
 
        -- Gravel
 
        minetest.register_ore({
-               ore_type         = "blob",
-               ore              = "default:gravel",
-               wherein          = {"default:stone"},
-               clust_scarcity   = 24 * 24 * 24,
-               clust_size       = 7,
-               y_min            = -31000,
-               y_max            = 31000,
-               noise_threshhold = 0,
-               noise_params     = {
-                       offset = 0.35,
+               ore_type        = "blob",
+               ore             = "default:gravel",
+               wherein         = {"default:stone"},
+               clust_scarcity  = 16 * 16 * 16,
+               clust_size      = 5,
+               y_min           = -31000,
+               y_max           = 31000,
+               noise_threshold = 0.0,
+               noise_params    = {
+                       offset = 0.5,
                        scale = 0.2,
                        spread = {x = 5, y = 5, z = 5},
                        seed = 766,
                        octaves = 1,
-                       persist = 0.5
+                       persist = 0.0
                },
        })
 
+       -- Scatter ores
+
        -- Coal
 
+       minetest.register_ore({
+               ore_type       = "scatter",
+               ore            = "default:stone_with_coal",
+               wherein        = "default:stone",
+               clust_scarcity = 8 * 8 * 8,
+               clust_num_ores = 9,
+               clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
+       })
+
        minetest.register_ore({
                ore_type       = "scatter",
                ore            = "default:stone_with_coal",
@@ -161,53 +175,88 @@ function default.register_ores()
                ore_type       = "scatter",
                ore            = "default:stone_with_iron",
                wherein        = "default:stone",
-               clust_scarcity = 12 * 12 * 12,
-               clust_num_ores = 3,
-               clust_size     = 2,
-               y_min          = -15,
-               y_max          = 2,
+               clust_scarcity = 9 * 9 * 9,
+               clust_num_ores = 12,
+               clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
        })
 
        minetest.register_ore({
                ore_type       = "scatter",
                ore            = "default:stone_with_iron",
                wherein        = "default:stone",
+               clust_scarcity = 7 * 7 * 7,
+               clust_num_ores = 5,
+               clust_size     = 3,
+               y_min          = -31000,
+               y_max          = 0,
+       })
+
+       minetest.register_ore({
+               ore_type       = "scatter",
+               ore            = "default:stone_with_iron",
+               wherein        = "default:stone",
+               clust_scarcity = 24 * 24 * 24,
+               clust_num_ores = 27,
+               clust_size     = 6,
+               y_min          = -31000,
+               y_max          = -64,
+       })
+
+       -- Copper
+
+       minetest.register_ore({
+               ore_type       = "scatter",
+               ore            = "default:stone_with_copper",
+               wherein        = "default:stone",
                clust_scarcity = 9 * 9 * 9,
                clust_num_ores = 5,
                clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
+       })
+
+       minetest.register_ore({
+               ore_type       = "scatter",
+               ore            = "default:stone_with_copper",
+               wherein        = "default:stone",
+               clust_scarcity = 12 * 12 * 12,
+               clust_num_ores = 4,
+               clust_size     = 3,
                y_min          = -63,
                y_max          = -16,
        })
 
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_iron",
+               ore            = "default:stone_with_copper",
                wherein        = "default:stone",
-               clust_scarcity = 7 * 7 * 7,
+               clust_scarcity = 9 * 9 * 9,
                clust_num_ores = 5,
                clust_size     = 3,
                y_min          = -31000,
                y_max          = -64,
        })
 
+       -- Gold
+
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_iron",
+               ore            = "default:stone_with_gold",
                wherein        = "default:stone",
-               clust_scarcity = 24 * 24 * 24,
-               clust_num_ores = 27,
-               clust_size     = 6,
-               y_min          = -31000,
-               y_max          = -64,
+               clust_scarcity = 13 * 13 * 13,
+               clust_num_ores = 5,
+               clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
        })
 
-       --Mese
-
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_mese",
+               ore            = "default:stone_with_gold",
                wherein        = "default:stone",
-               clust_scarcity = 18 * 18 * 18,
+               clust_scarcity = 15 * 15 * 15,
                clust_num_ores = 3,
                clust_size     = 2,
                y_min          = -255,
@@ -216,33 +265,33 @@ function default.register_ores()
 
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_mese",
+               ore            = "default:stone_with_gold",
                wherein        = "default:stone",
-               clust_scarcity = 14 * 14 * 14,
+               clust_scarcity = 13 * 13 * 13,
                clust_num_ores = 5,
                clust_size     = 3,
                y_min          = -31000,
                y_max          = -256,
        })
 
+       -- Mese crystal
+
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:mese",
+               ore            = "default:stone_with_mese",
                wherein        = "default:stone",
-               clust_scarcity = 36 * 36 * 36,
-               clust_num_ores = 3,
-               clust_size     = 2,
-               y_min          = -31000,
-               y_max          = -1024,
+               clust_scarcity = 14 * 14 * 14,
+               clust_num_ores = 5,
+               clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
        })
 
-       -- Gold
-
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_gold",
+               ore            = "default:stone_with_mese",
                wherein        = "default:stone",
-               clust_scarcity = 15 * 15 * 15,
+               clust_scarcity = 18 * 18 * 18,
                clust_num_ores = 3,
                clust_size     = 2,
                y_min          = -255,
@@ -251,9 +300,9 @@ function default.register_ores()
 
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_gold",
+               ore            = "default:stone_with_mese",
                wherein        = "default:stone",
-               clust_scarcity = 13 * 13 * 13,
+               clust_scarcity = 14 * 14 * 14,
                clust_num_ores = 5,
                clust_size     = 3,
                y_min          = -31000,
@@ -262,6 +311,17 @@ function default.register_ores()
 
        -- Diamond
 
+       minetest.register_ore({
+               ore_type       = "scatter",
+               ore            = "default:stone_with_diamond",
+               wherein        = "default:stone",
+               clust_scarcity = 15 * 15 * 15,
+               clust_num_ores = 4,
+               clust_size     = 3,
+               y_min          = 1025,
+               y_max          = 31000,
+       })
+
        minetest.register_ore({
                ore_type       = "scatter",
                ore            = "default:stone_with_diamond",
@@ -284,28 +344,28 @@ function default.register_ores()
                y_max          = -256,
        })
 
-       -- Copper
+       -- Mese block
 
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_copper",
+               ore            = "default:mese",
                wherein        = "default:stone",
-               clust_scarcity = 12 * 12 * 12,
-               clust_num_ores = 4,
-               clust_size     = 3,
-               y_min          = -63,
-               y_max          = -16,
+               clust_scarcity = 36 * 36 * 36,
+               clust_num_ores = 3,
+               clust_size     = 2,
+               y_min          = 1025,
+               y_max          = 31000,
        })
 
        minetest.register_ore({
                ore_type       = "scatter",
-               ore            = "default:stone_with_copper",
+               ore            = "default:mese",
                wherein        = "default:stone",
-               clust_scarcity = 9 * 9 * 9,
-               clust_num_ores = 5,
-               clust_size     = 3,
+               clust_scarcity = 36 * 36 * 36,
+               clust_num_ores = 3,
+               clust_size     = 2,
                y_min          = -31000,
-               y_max          = -64,
+               y_max          = -1024,
        })
 end
 
@@ -332,26 +392,30 @@ function default.register_biomes()
                node_water_top = "default:ice",
                depth_water_top = 10,
                --node_water = "",
+               node_river_water = "default:ice",
+               node_riverbed = "default:gravel",
+               depth_riverbed = 2,
                y_min = -8,
                y_max = 31000,
-               heat_point = -5,
+               heat_point = 0,
                humidity_point = 50,
        })
 
        minetest.register_biome({
                name = "glacier_ocean",
                node_dust = "default:snowblock",
-               node_top = "default:gravel",
+               node_top = "default:sand",
                depth_top = 1,
-               node_filler = "default:gravel",
-               depth_filler = 2,
+               node_filler = "default:sand",
+               depth_filler = 3,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
+               --node_river_water = "",
                y_min = -112,
                y_max = -9,
-               heat_point = -5,
+               heat_point = 0,
                humidity_point = 50,
        })
 
@@ -359,19 +423,42 @@ function default.register_biomes()
 
        minetest.register_biome({
                name = "tundra",
-               node_dust = "default:snow",
+               --node_dust = "",
                node_top = "default:dirt_with_snow",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 0,
+               depth_filler = 1,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
+               --node_river_water = "",
+               node_riverbed = "default:gravel",
+               depth_riverbed = 2,
                y_min = 2,
                y_max = 31000,
-               heat_point = 20,
-               humidity_point = 30,
+               heat_point = 15,
+               humidity_point = 35,
+       })
+
+       minetest.register_biome({
+               name = "tundra_beach",
+               --node_dust = "",
+               node_top = "default:gravel",
+               depth_top = 1,
+               node_filler = "default:gravel",
+               depth_filler = 2,
+               --node_stone = "",
+               --node_water_top = "",
+               --depth_water_top = ,
+               --node_water = "",
+               --node_river_water = "",
+               node_riverbed = "default:gravel",
+               depth_riverbed = 2,
+               y_min = -3,
+               y_max = 1,
+               heat_point = 15,
+               humidity_point = 35,
        })
 
        minetest.register_biome({
@@ -380,32 +467,39 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               depth_filler = 3,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
+               --node_river_water = "",
+               node_riverbed = "default:gravel",
+               depth_riverbed = 2,
                y_min = -112,
-               y_max = 1,
-               heat_point = 20,
-               humidity_point = 30,
+               y_max = -4,
+               heat_point = 15,
+               humidity_point = 35,
        })
 
+
        minetest.register_biome({
                name = "taiga",
                node_dust = "default:snow",
-               node_top = "default:snowblock",
+               node_top = "default:dirt_with_snow",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 2,
+               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 = 2,
                y_max = 31000,
-               heat_point = 20,
-               humidity_point = 70,
+               heat_point = 15,
+               humidity_point = 65,
        })
 
        minetest.register_biome({
@@ -414,18 +508,21 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               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 = 1,
-               heat_point = 20,
-               humidity_point = 70,
+               heat_point = 15,
+               humidity_point = 65,
        })
 
-       -- Cool
+       -- Temperate
 
        minetest.register_biome({
                name = "stone_grassland",
@@ -433,19 +530,22 @@ function default.register_biomes()
                node_top = "default:dirt_with_grass",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 0,
+               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 = 45,
-               humidity_point = 30,
+               heat_point = 40,
+               humidity_point = 35,
        })
 
        minetest.register_biome({
-               name = "stone_grassland_ocean",
+               name = "stone_grassland_dunes",
                --node_dust = "",
                node_top = "default:sand",
                depth_top = 1,
@@ -455,27 +555,74 @@ function default.register_biomes()
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
-               y_min = -112,
+               --node_river_water = "",
+               node_riverbed = "default:sand",
+               depth_riverbed = 2,
+               y_min = 5,
                y_max = 5,
-               heat_point = 45,
-               humidity_point = 30,
+               heat_point = 40,
+               humidity_point = 35,
+       })
+
+       minetest.register_biome({
+               name = "stone_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 = 40,
+               humidity_point = 35,
        })
 
+
        minetest.register_biome({
                name = "coniferous_forest",
                --node_dust = "",
                node_top = "default:dirt_with_grass",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 2,
+               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 = 6,
                y_max = 31000,
-               heat_point = 45,
-               humidity_point = 70,
+               heat_point = 40,
+               humidity_point = 65,
+       })
+
+       minetest.register_biome({
+               name = "coniferous_forest_dunes",
+               --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 = 5,
+               y_max = 5,
+               heat_point = 40,
+               humidity_point = 65,
        })
 
        minetest.register_biome({
@@ -484,18 +631,20 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               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 = 5,
-               heat_point = 45,
-               humidity_point = 70,
+               y_max = 4,
+               heat_point = 40,
+               humidity_point = 65,
        })
 
-       -- Warm
 
        minetest.register_biome({
                name = "sandstone_grassland",
@@ -503,19 +652,22 @@ function default.register_biomes()
                node_top = "default:dirt_with_grass",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 0,
+               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 = 70,
-               humidity_point = 30,
+               heat_point = 60,
+               humidity_point = 35,
        })
 
        minetest.register_biome({
-               name = "sandstone_grassland_ocean",
+               name = "sandstone_grassland_dunes",
                --node_dust = "",
                node_top = "default:sand",
                depth_top = 1,
@@ -525,27 +677,74 @@ function default.register_biomes()
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
-               y_min = -112,
+               --node_river_water = "",
+               node_riverbed = "default:sand",
+               depth_riverbed = 2,
+               y_min = 5,
                y_max = 5,
-               heat_point = 70,
-               humidity_point = 30,
+               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,
+       })
+
+
        minetest.register_biome({
                name = "deciduous_forest",
                --node_dust = "",
                node_top = "default:dirt_with_grass",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 2,
+               depth_filler = 3,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
-               y_min = 6,
+               --node_river_water = "",
+               node_riverbed = "default:sand",
+               depth_riverbed = 2,
+               y_min = 1,
                y_max = 31000,
-               heat_point = 70,
-               humidity_point = 70,
+               heat_point = 60,
+               humidity_point = 65,
+       })
+
+       minetest.register_biome({
+               name = "deciduous_forest_swamp",
+               --node_dust = "",
+               node_top = "default:dirt",
+               depth_top = 1,
+               node_filler = "default:dirt",
+               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 = -3,
+               y_max = 0,
+               heat_point = 60,
+               humidity_point = 65,
        })
 
        minetest.register_biome({
@@ -554,15 +753,18 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               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 = 5,
-               heat_point = 70,
-               humidity_point = 70,
+               y_max = -4,
+               heat_point = 60,
+               humidity_point = 65,
        })
 
        -- Hot
@@ -578,10 +780,13 @@ function default.register_biomes()
                --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 = 95,
-               humidity_point = 10,
+               heat_point = 85,
+               humidity_point = 20,
        })
 
        minetest.register_biome({
@@ -590,17 +795,21 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               depth_filler = 3,
                node_stone = "default:desert_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 = 95,
-               humidity_point = 10,
+               heat_point = 85,
+               humidity_point = 20,
        })
 
+
        minetest.register_biome({
                name = "savanna",
                --node_dust = "",
@@ -612,9 +821,32 @@ function default.register_biomes()
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
-               y_min = 5,
+               --node_river_water = "",
+               node_riverbed = "default:sand",
+               depth_riverbed = 2,
+               y_min = 1,
                y_max = 31000,
-               heat_point = 95,
+               heat_point = 85,
+               humidity_point = 50,
+       })
+
+       minetest.register_biome({
+               name = "savanna_swamp",
+               --node_dust = "",
+               node_top = "default:dirt",
+               depth_top = 1,
+               node_filler = "default:dirt",
+               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 = -3,
+               y_max = 0,
+               heat_point = 85,
                humidity_point = 50,
        })
 
@@ -624,32 +856,39 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               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 = 95,
+               y_max = -4,
+               heat_point = 85,
                humidity_point = 50,
        })
 
+
        minetest.register_biome({
                name = "rainforest",
                --node_dust = "",
                node_top = "default:dirt_with_grass",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 2,
+               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 = 1,
                y_max = 31000,
-               heat_point = 95,
-               humidity_point = 90,
+               heat_point = 85,
+               humidity_point = 80,
        })
 
        minetest.register_biome({
@@ -658,15 +897,18 @@ function default.register_biomes()
                node_top = "default:dirt",
                depth_top = 1,
                node_filler = "default:dirt",
-               depth_filler = 2,
+               depth_filler = 3,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
-               y_min = 0,
+               --node_river_water = "",
+               node_riverbed = "default:sand",
+               depth_riverbed = 2,
+               y_min = -3,
                y_max = 0,
-               heat_point = 95,
-               humidity_point = 90,
+               heat_point = 85,
+               humidity_point = 80,
        })
 
        minetest.register_biome({
@@ -675,15 +917,18 @@ function default.register_biomes()
                node_top = "default:sand",
                depth_top = 1,
                node_filler = "default:sand",
-               depth_filler = 2,
+               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 = -1,
-               heat_point = 95,
-               humidity_point = 90,
+               y_max = -4,
+               heat_point = 85,
+               humidity_point = 80,
        })
 
        -- Underground
@@ -692,13 +937,14 @@ function default.register_biomes()
                name = "underground",
                --node_dust = "",
                --node_top = "",
-               depth_top = 0,
+               --depth_top = ,
                --node_filler = "",
-               depth_filler = -4,
+               --depth_filler = ,
                --node_stone = "",
                --node_water_top = "",
                --depth_water_top = ,
                --node_water = "",
+               --node_river_water = "",
                y_min = -31000,
                y_max = -113,
                heat_point = 50,
@@ -721,7 +967,7 @@ function default.register_mgv6_decorations()
        minetest.register_decoration({
                deco_type = "simple",
                place_on = {"default:dirt_with_grass"},
-               sidelen = 8,
+               sidelen = 16,
                noise_params = {
                        offset = -0.3,
                        scale = 0.7,
@@ -811,18 +1057,16 @@ local function register_grass_decoration(offset, scale, length)
                noise_params = {
                        offset = offset,
                        scale = scale,
-                       spread = {x=200, y=200, z=200},
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 329,
                        octaves = 3,
                        persist = 0.6
                },
-               biomes = {
-                       "stone_grassland", "stone_grassland_ocean",
-                       "sandstone_grassland", "sandstone_grassland_ocean",
-                       "deciduous_forest", "deciduous_forest_ocean",
-                       "coniferous_forest", "coniferous_forest_ocean",
-               },
-               y_min = 5,
+               biomes = {"stone_grassland", "sandstone_grassland",
+                       "deciduous_forest", "coniferous_forest",
+                       "stone_grassland_dunes", "sandstone_grassland_dunes",
+                       "coniferous_forest_dunes"},
+               y_min = 1,
                y_max = 31000,
                decoration = "default:grass_"..length,
        })
@@ -836,13 +1080,13 @@ local function register_dry_grass_decoration(offset, scale, length)
                noise_params = {
                        offset = offset,
                        scale = scale,
-                       spread = {x=200, y=200, z=200},
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 329,
                        octaves = 3,
                        persist = 0.6
                },
                biomes = {"savanna"},
-               y_min = 5,
+               y_min = 1,
                y_max = 31000,
                decoration = "default:dry_grass_"..length,
        })
@@ -851,51 +1095,111 @@ end
 function default.register_decorations()
        minetest.clear_registered_decorations()
 
-       -- Apple tree
+       -- Apple tree and log
 
        minetest.register_decoration({
                deco_type = "schematic",
                place_on = {"default:dirt_with_grass"},
                sidelen = 16,
                noise_params = {
-                       offset = 0.04,
-                       scale = 0.02,
-                       spread = {x=250, y=250, z=250},
+                       offset = 0.036,
+                       scale = 0.022,
+                       spread = {x = 250, y = 250, z = 250},
                        seed = 2,
                        octaves = 3,
                        persist = 0.66
                },
                biomes = {"deciduous_forest"},
-               y_min = 6,
+               y_min = 1,
                y_max = 31000,
                schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
                flags = "place_center_x, place_center_z",
        })
 
-       -- Jungle tree
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_grass"},
+               sidelen = 16,
+               noise_params = {
+                       offset = 0.0018,
+                       scale = 0.0011,
+                       spread = {x = 250, y = 250, z = 250},
+                       seed = 2,
+                       octaves = 3,
+                       persist = 0.66
+               },
+               biomes = {"deciduous_forest"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = {
+                       size = {x = 3, y = 3, z = 1},
+                       data = {
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "default:tree", param2 = 12, prob = 191},
+                               {name = "default:tree", param2 = 12},
+                               {name = "default:tree", param2 = 12, prob = 127},
+                               {name = "air", prob = 0},
+                               {name = "flowers:mushroom_brown", prob = 63},
+                               {name = "air", prob = 0},
+                       },
+               },
+               flags = "place_center_x",
+               rotation = "random",
+       })
+
+       -- Jungle tree and log
 
        minetest.register_decoration({
                deco_type = "schematic",
                place_on = {"default:dirt_with_grass", "default:dirt"},
                sidelen = 80,
-               fill_ratio = 0.09,
+               fill_ratio = 0.1,
                biomes = {"rainforest", "rainforest_swamp"},
                y_min = 0,
                y_max = 31000,
                schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
                flags = "place_center_x, place_center_z",
+               rotation = "random",
        })
 
-       -- Taiga and temperate forest pine tree
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_grass", "default:dirt"},
+               sidelen = 80,
+               fill_ratio = 0.005,
+               biomes = {"rainforest", "rainforest_swamp"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = {
+                       size = {x = 3, y = 3, z = 1},
+                       data = {
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "default:jungletree", param2 = 12, prob = 191},
+                               {name = "default:jungletree", param2 = 12},
+                               {name = "default:jungletree", param2 = 12, prob = 127},
+                               {name = "air", prob = 0},
+                               {name = "flowers:mushroom_brown", prob = 127},
+                               {name = "air", prob = 0},
+                       },
+               },
+               flags = "place_center_x",
+               rotation = "random",
+       })
+
+       -- Taiga and temperate coniferous forest pine tree and log
 
        minetest.register_decoration({
                deco_type = "schematic",
-               place_on = {"default:snowblock", "default:dirt_with_grass"},
+               place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
                sidelen = 16,
                noise_params = {
-                       offset = 0.04,
-                       scale = 0.02,
-                       spread = {x=250, y=250, z=250},
+                       offset = 0.036,
+                       scale = 0.022,
+                       spread = {x = 250, y = 250, z = 250},
                        seed = 2,
                        octaves = 3,
                        persist = 0.66
@@ -907,38 +1211,154 @@ function default.register_decorations()
                flags = "place_center_x, place_center_z",
        })
 
-       -- Acacia tree
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
+               sidelen = 80,
+               noise_params = {
+                       offset = 0.0018,
+                       scale = 0.0011,
+                       spread = {x = 250, y = 250, z = 250},
+                       seed = 2,
+                       octaves = 3,
+                       persist = 0.66
+               },
+               biomes = {"taiga", "coniferous_forest"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = {
+                       size = {x = 3, y = 3, z = 1},
+                       data = {
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "default:pine_tree", param2 = 12, prob = 191},
+                               {name = "default:pine_tree", param2 = 12},
+                               {name = "default:pine_tree", param2 = 12, prob = 127},
+                               {name = "air", prob = 0},
+                               {name = "flowers:mushroom_red", prob = 63},
+                               {name = "air", prob = 0},
+                       },
+               },
+               flags = "place_center_x",
+               rotation = "random",
+       })
+
+       -- Acacia tree and log
 
        minetest.register_decoration({
                deco_type = "schematic",
                place_on = {"default:dirt_with_dry_grass"},
-               sidelen = 80,
+               sidelen = 16,
                noise_params = {
                        offset = 0,
-                       scale = 0.003,
-                       spread = {x=250, y=250, z=250},
+                       scale = 0.002,
+                       spread = {x = 250, y = 250, z = 250},
                        seed = 2,
                        octaves = 3,
                        persist = 0.66
                },
                biomes = {"savanna"},
-               y_min = 6,
+               y_min = 1,
                y_max = 31000,
                schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
                flags = "place_center_x, place_center_z",
                rotation = "random",
        })
 
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_dry_grass"},
+               sidelen = 16,
+               noise_params = {
+                       offset = 0,
+                       scale = 0.001,
+                       spread = {x = 250, y = 250, z = 250},
+                       seed = 2,
+                       octaves = 3,
+                       persist = 0.66
+               },
+               biomes = {"savanna"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = {
+                       size = {x = 3, y = 2, z = 1},
+                       data = {
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "default:acacia_tree", param2 = 12, prob = 191},
+                               {name = "default:acacia_tree", param2 = 12},
+                               {name = "default:acacia_tree", param2 = 12, prob = 127},
+                       },
+               },
+               flags = "place_center_x",
+               rotation = "random",
+       })
+
+       -- Aspen tree and log
+
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_grass"},
+               sidelen = 16,
+               noise_params = {
+                       offset = 0.0,
+                       scale = -0.015,
+                       spread = {x = 250, y = 250, z = 250},
+                       seed = 2,
+                       octaves = 3,
+                       persist = 0.66
+               },
+               biomes = {"deciduous_forest"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
+               flags = "place_center_x, place_center_z",
+       })
+
+       minetest.register_decoration({
+               deco_type = "schematic",
+               place_on = {"default:dirt_with_grass"},
+               sidelen = 16,
+               noise_params = {
+                       offset = 0.0,
+                       scale = -0.0008,
+                       spread = {x = 250, y = 250, z = 250},
+                       seed = 2,
+                       octaves = 3,
+                       persist = 0.66
+               },
+               biomes = {"deciduous_forest"},
+               y_min = 1,
+               y_max = 31000,
+               schematic = {
+                       size = {x = 3, y = 3, z = 1},
+                       data = {
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "air", prob = 0},
+                               {name = "default:aspen_tree", param2 = 12},
+                               {name = "default:aspen_tree", param2 = 12},
+                               {name = "default:aspen_tree", param2 = 12, prob = 127},
+                               {name = "flowers:mushroom_red", prob = 63},
+                               {name = "flowers:mushroom_brown", prob = 63},
+                               {name = "air", prob = 0},
+                       },
+               },
+               flags = "place_center_x",
+               rotation = "random",
+       })
        -- Large cactus
 
        minetest.register_decoration({
                deco_type = "schematic",
                place_on = {"default:desert_sand"},
-               sidelen = 80,
+               sidelen = 16,
                noise_params = {
-                       offset = -0.0005,
-                       scale = 0.0015,
-                       spread = {x=200, y=200, z=200},
+                       offset = -0.0003,
+                       scale = 0.0009,
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 230,
                        octaves = 3,
                        persist = 0.6
@@ -956,11 +1376,11 @@ function default.register_decorations()
        minetest.register_decoration({
                deco_type = "simple",
                place_on = {"default:desert_sand"},
-               sidelen = 80,
+               sidelen = 16,
                noise_params = {
-                       offset = -0.0005,
-                       scale = 0.0015,
-                       spread = {x=200, y=200, z=200},
+                       offset = -0.0003,
+                       scale = 0.0009,
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 230,
                        octaves = 3,
                        persist = 0.6
@@ -977,17 +1397,17 @@ function default.register_decorations()
 
        minetest.register_decoration({
                deco_type = "schematic",
-               place_on = {"default:sand"},
+               place_on = {"default:dirt"},
                sidelen = 16,
                noise_params = {
                        offset = -0.3,
                        scale = 0.7,
-                       spread = {x=200, y=200, z=200},
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 354,
                        octaves = 3,
                        persist = 0.7
                },
-               biomes = {"savanna_ocean", "desert_ocean"},
+               biomes = {"savanna_swamp"},
                y_min = 0,
                y_max = 0,
                schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
@@ -1031,7 +1451,7 @@ function default.register_decorations()
                noise_params = {
                        offset = 0,
                        scale = 0.02,
-                       spread = {x=200, y=200, z=200},
+                       spread = {x = 200, y = 200, z = 200},
                        seed = 329,
                        octaves = 3,
                        persist = 0.6
@@ -1044,73 +1464,16 @@ function default.register_decorations()
 end
 
 
---
--- Generate nyan cats
---
-
--- All mapgens except singlenode
-
-function default.make_nyancat(pos, facedir, length)
-       local tailvec = {x = 0, y = 0, z = 0}
-       if facedir == 0 then
-               tailvec.z = 1
-       elseif facedir == 1 then
-               tailvec.x = 1
-       elseif facedir == 2 then
-               tailvec.z = -1
-       elseif facedir == 3 then
-               tailvec.x = -1
-       else
-               facedir = 0
-               tailvec.z = 1
-       end
-       local p = {x = pos.x, y = pos.y, z = pos.z}
-       minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
-       for i = 1, length do
-               p.x = p.x + tailvec.x
-               p.z = p.z + tailvec.z
-               minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
-       end
-end
-
-function default.generate_nyancats(minp, maxp, seed)
-       local height_min = -31000
-       local height_max = -32
-       if maxp.y < height_min or minp.y > height_max then
-               return
-       end
-       local y_min = math.max(minp.y, height_min)
-       local y_max = math.min(maxp.y, height_max)
-       local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
-       local pr = PseudoRandom(seed + 9324342)
-       local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
-       for i = 1, max_num_nyancats do
-               if pr:next(0, 1000) == 0 then
-                       local x0 = pr:next(minp.x, maxp.x)
-                       local y0 = pr:next(minp.y, maxp.y)
-                       local z0 = pr:next(minp.z, maxp.z)
-                       local p0 = {x = x0, y = y0, z = z0}
-                       default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
-               end
-       end
-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_params = minetest.get_mapgen_params()
-if mg_params.mgname == "v6" then
+local mg_name = minetest.get_mapgen_setting("mg_name")
+if mg_name == "v6" then
        default.register_ores()
        default.register_mgv6_decorations()
-       minetest.register_on_generated(default.generate_nyancats)
-elseif mg_params.mgname ~= "singlenode" then
-       default.register_ores()
+else
        default.register_biomes()
+       default.register_ores()
        default.register_decorations()
-       minetest.register_on_generated(default.generate_nyancats)
 end