Split biomes into separate files.

This commit is contained in:
kno10 2024-10-24 01:24:22 +02:00
parent e477247485
commit ca5f2b51c6
62 changed files with 5873 additions and 5971 deletions

View File

@ -1 +0,0 @@
Biomes mod. By Wuzzy and maikerumine.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
Biomes mod. By Wuzzy, maikerumine, and kno10.

View File

@ -0,0 +1,243 @@
local mg_name = minetest.get_mapgen_setting("mg_name")
local mg_seed = minetest.get_mapgen_setting("seed")
-- SHARED patterns across different variants of badlands/mesa for consistency
-- Bonus gold spawn in Mesa
if mg_name ~= "v6" then
local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"}
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_core:stone_with_gold",
wherein = stonelike,
clust_scarcity = 3333,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_worlds.layer_to_y(32),
y_max = mcl_worlds.layer_to_y(79),
biomes = {"Mesa", "Mesa_sandlevel", "Mesa_ocean",
"MesaBryce", "MesaBryce_sandlevel", "MesaBryce_ocean",
"MesaPlateauF", "MesaPlateauF_sandlevel", "MesaPlateauF_ocean",
"MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean", },
})
end
-- For a transition from stone to hardened clay in mesa biomes that is not perfectly flat
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_core:stone",
wherein = {"group:hardened_clay"},
noise_params = {offset = -6, scale = 2, spread = vector.new(25, 25, 25), octaves = 1, persist = 0.60},
stratum_thickness = 8,
biomes = {
"Mesa_sandlevel", "Mesa_ocean",
"MesaBryce_sandlevel", "MesaBryce_ocean",
"MesaPlateauF_sandlevel", "MesaPlateauF_ocean",
"MesaPlateauFM_sandlevel", "MesaPlateauFM_ocean",
},
y_min = -4,
y_max = 0,
})
-- Mesa strata (registered as sheet ores)
-- Helper function to create strata.
local function stratum(y_min, height, color, seed, is_perfect)
height = height or 1
seed = seed or 39
local y_max = y_min + height - 1
-- "perfect" means no erosion
local perfect_biomes = is_perfect and {"MesaBryce", "Mesa", "MesaPlateauF", "MesaPlateauFM"} or {"MesaBryce"}
-- Full, perfect stratum
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_colorblocks:hardened_clay_" .. color,
-- Only paint uncolored so the biome can choose
-- a color in advance.
wherein = {"mcl_colorblocks:hardened_clay"},
y_min = y_min,
y_max = y_max,
biomes = perfect_biomes,
})
if not is_perfect then
-- Slightly eroded stratum, only minor imperfections
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_colorblocks:hardened_clay_" .. color,
wherein = {"mcl_colorblocks:hardened_clay"},
y_min = y_min,
y_max = y_max,
biomes = {"Mesa", "MesaPlateauF"},
noise_params = {
offset = y_min + (y_max - y_min) / 2,
scale = 0,
spread = vector.new(50, 50, 50),
seed = seed + 4,
octaves = 1,
persist = 1.0
},
np_stratum_thickness = {
offset = 1.28,
scale = 1,
spread = vector.new(18, 18, 18),
seed = seed + 4,
octaves = 3,
persist = 0.8,
},
})
-- Very eroded stratum, most of the color is gone
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_colorblocks:hardened_clay_" .. color,
wherein = {"mcl_colorblocks:hardened_clay"},
y_min = y_min,
y_max = y_max,
biomes = {"MesaPlateauFM"},
noise_params = {
offset = y_min + (y_max - y_min) / 2,
scale = 0,
spread = vector.new(50, 50, 50),
seed = seed + 4,
octaves = 1,
persist = 1.0
},
np_stratum_thickness = {
offset = 0.1,
scale = 1,
spread = vector.new(28, 28, 28),
seed = seed + 4,
octaves = 2,
persist = 0.6,
},
})
end
end
-- Hardcoded orange strata near sea level.
-- For MesaBryce, since it has no sand at these heights
stratum(4, 1, "orange", nil, true)
stratum(7, 2, "orange", nil, true)
-- 3-level stratum above the sandlevel (all mesa biomes)
stratum(11, 3, "orange", nil, true)
-- Create random strata for up to Y = 256.
--[[
------ DANGER ZONE! ------
The following code is sensitive to changes; changing any number may break
mapgen consistency when the mapgen generates new mapchunks in existing
worlds because the random generator will yield different results and the strata
suddenly don't match up anymore. ]]
-- These strata are calculated based on the world seed and are global.
-- They are thus different per-world.
local mesapr = PcgRandom(mg_seed)
-- Available Mesa colors:
local mesa_stratum_colors = {"silver", "brown", "orange", "red", "yellow", "white"}
-- Start level
local y = 17
-- Generate stratas
while y <= 256 do
-- Each stratum has a color (duh!)
local colorid = mesapr:next(1, #mesa_stratum_colors)
-- … and a random thickness
local heightrandom = mesapr:next(1, 12)
local h = heightrandom == 12 and 4 or heightrandom >= 10 and 3 or heightrandom >= 8 and 2 or 1
-- Small built-in bias: Only thin strata up to this Y level
if y < 45 then h = math.min(h, 2) end
-- Register stratum
stratum(y, h, mesa_stratum_colors[colorid])
-- Skip a random amount of layers (which won't get painted)
local skiprandom = mesapr:next(1, 12)
local skip = skiprandom == 12 and 4 or skiprandom >= 10 and 3 or skiprandom >= 5 and 2 or skiprandom >= 2 and 1 or 0
-- Get height of next stratum or finish
y = y + h + skip
end
--[[ END OF DANGER ZONE ]]
-- Dead bushes
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:sand", "mcl_core:podzol", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt", "group:hardened_clay"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.06,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"Mesa", "Mesa_sandlevel", "MesaPlateauF", "MesaPlateauF_sandlevel", "MesaPlateauF_grasstop", "MesaBryce"},
decoration = "mcl_core:deadbush",
height = 1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:sand", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.06,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"MesaPlateauFM_grasstop"},
decoration = "mcl_core:deadbush",
height = 1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:sand"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.06,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"MesaPlateauFM", "MesaPlateauFM_sandlevel"},
decoration = "mcl_core:deadbush",
height = 1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:hardened_clay"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.06,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"MesaPlateauFM", "MesaPlateauFM_sandlevel", "MesaPlateauFM_grasstop"},
decoration = "mcl_core:deadbush",
height = 1,
})

View File

@ -0,0 +1,42 @@
-- Mesa aka Badlands
-- Starts with a couple of sand-covered layers (the "sandlevel"),
-- followed by terracotta with colorful (but imperfect) strata
vl_biomes.register_biome({
name = "Mesa",
node_top = "mcl_colorblocks:hardened_clay",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay",
node_riverbed = "mcl_core:redsand",
depth_riverbed = 1,
node_stone = "mcl_colorblocks:hardened_clay",
y_min = 11,
y_max = vl_biomes.overworld_max,
humidity_point = 0,
heat_point = 100,
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 19,
_mcl_foliage_palette_index = 4,
_mcl_water_palette_index = 3,
_mcl_skycolor = "#6EB1FF",
-- Helper biome for the red sand at the bottom of Mesas.
_sandlevel = {
node_top = "mcl_core:redsand",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay_orange",
depth_filler = 3,
node_stone = "mcl_colorblocks:hardened_clay_orange",
y_min = -4,
y_max = 10,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 3,
node_filler = "mcl_core:sand",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_max = -5,
vertical_blend = 1,
},
})

View File

@ -0,0 +1,42 @@
-- Mesa Bryce aka Eroded Badlands
-- Variant of Mesa, but with perfect strata and a much smaller red sand desert
vl_biomes.register_biome({
name = "MesaBryce",
node_top = "mcl_colorblocks:hardened_clay",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay",
node_riverbed = "mcl_colorblocks:hardened_clay",
depth_riverbed = 1,
node_stone = "mcl_colorblocks:hardened_clay",
y_min = 4,
y_max = vl_biomes.overworld_max,
humidity_point = -5,
heat_point = 100,
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 20,
_mcl_foliage_palette_index = 4,
_mcl_water_palette_index = 3,
_mcl_skycolor = "#6EB1FF",
_sandlevel = {
node_top = "mcl_core:redsand",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay_orange",
depth_filler = 3,
node_riverbed = "mcl_colorblocks:hardened_clay",
depth_riverbed = 1,
node_stone = "mcl_colorblocks:hardened_clay_orange",
y_min = -4,
y_max = 3,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 3,
node_filler = "mcl_core:sand",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_max = -5,
vertical_blend = 1,
},
})

View File

@ -0,0 +1,111 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Mesa Plateau F aka Wooded Badlands
-- Identical to Mesa below Y=30. At Y=30 and above there is a "dry" oak forest
vl_biomes.register_biome({
name = "MesaPlateauF",
node_top = "mcl_colorblocks:hardened_clay",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay",
node_riverbed = "mcl_core:redsand",
depth_riverbed = 1,
node_stone = "mcl_colorblocks:hardened_clay",
y_min = 11,
y_max = 29,
humidity_point = 0,
heat_point = 60,
vertical_blend = 0, -- we want a sharp transition
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 21,
_mcl_foliage_palette_index = 4,
_mcl_water_palette_index = 3,
_mcl_skycolor = "#6EB1FF",
-- The oak forest plateau of this biome.
-- This is a plateau for grass blocks, dry shrubs, tall grass, coarse dirt and oaks.
-- Strata don't generate here.
_grasstop = {
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 1,
y_min = 30,
y_max = vl_biomes.overworld_max,
},
_sandlevel = {
node_top = "mcl_core:redsand",
depth_top = 2,
node_filler = "mcl_colorblocks:hardened_clay_orange",
depth_filler = 3,
node_stone = "mcl_colorblocks:hardened_clay_orange",
y_min = -5,
y_max = 10,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 3,
node_filler = "mcl_core:sand",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_max = -6,
vertical_blend = 1,
},
})
-- Random coarse dirt floor in Mesa Plateau F
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_core:coarse_dirt",
wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
column_height_max = 1,
column_midpoint_factor = 0.0,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_threshold = 0.0,
noise_params = {offset = 0, scale = 15, spread = vector.new(250, 250, 250), seed = 24, octaves = 3, persist = 0.70},
biomes = {"MesaPlateauF_grasstop"},
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_core:coarse_dirt",
wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
clust_scarcity = 1500,
clust_num_ores = 25,
clust_size = 7,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
biomes = {"MesaPlateauF_grasstop"},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.015,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"MesaPlateauF_grasstop"},
y_min = 30,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})

View File

@ -0,0 +1,187 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Mesa Plateau FM aka Modified Wooded Badlands Plateau
-- Dryer and more "chaotic"/"weathered down" variant of MesaPlateauF:
-- oak forest is less dense, more coarse dirt, more erratic terrain, vertical blend, more red sand layers,
-- red sand as ores, red sandstone at sandlevel
vl_biomes.register_biome({
name = "MesaPlateauFM",
node_top = "mcl_colorblocks:hardened_clay",
depth_top = 1,
node_filler = "mcl_colorblocks:hardened_clay",
node_riverbed = "mcl_core:redsand",
depth_riverbed = 2,
node_stone = "mcl_colorblocks:hardened_clay",
y_min = 12,
y_max = 29,
humidity_point = -5,
heat_point = 60,
vertical_blend = 5,
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 22,
_mcl_foliage_palette_index = 4,
_mcl_water_palette_index = 3,
_mcl_skycolor = "#6EB1FF",
-- Grass plateau
_grasstop = {
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:coarse_dirt",
depth_filler = 2,
node_riverbed = "mcl_core:redsand",
depth_riverbed = 1,
y_min = 30,
y_max = vl_biomes.overworld_max,
},
_sandlevel = {
node_top = "mcl_core:redsand",
depth_top = 3,
node_filler = "mcl_colorblocks:hardened_clay_orange",
depth_filler = 3,
node_stone = "mcl_colorblocks:hardened_clay",
-- red sand has wider reach than in other mesa biomes
y_min = -7,
y_max = 11,
vertical_blend = 4,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 3,
node_filler = "mcl_core:sand",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 3,
y_min = vl_biomes.OCEAN_MIN,
y_max = -8,
vertical_blend = 2,
},
})
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_core:coarse_dirt",
wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
column_height_max = 1,
column_midpoint_factor = 0.0,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_threshold = -2.5,
noise_params = {offset = 1, scale = 15, spread = vector.new(250, 250, 250), seed = 24, octaves = 3, persist = 0.80},
biomes = {"MesaPlateauFM_grasstop"},
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_core:coarse_dirt",
wherein = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
clust_scarcity = 1800,
clust_num_ores = 65,
clust_size = 15,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
biomes = {"MesaPlateauFM_grasstop"},
})
-- Occasionally dig out portions of MesaPlateauFM
minetest.register_ore({
ore_type = "blob",
ore = "air",
wherein = {"group:hardened_clay", "group:sand", "mcl_core:coarse_dirt"},
clust_scarcity = 4000,
clust_size = 5,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
biomes = {"MesaPlateauFM", "MesaPlateauFM_grasstop"},
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_core:redsandstone",
wherein = {"mcl_colorblocks:hardened_clay_orange"},
clust_scarcity = 300,
clust_size = 8,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
biomes = {"MesaPlateauFM_sandlevel"},
})
-- More red sand in MesaPlateauFM
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_core:redsand",
wherein = {"group:hardened_clay"},
clust_scarcity = 1,
clust_num_ores = 12,
clust_size = 10,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_threshold = 0.1,
noise_params = {offset = 0, scale = 15, spread = vector.new(130, 130, 130), seed = 95, octaves = 3, persist = 0.70},
biomes = {"MesaPlateauFM"},
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_core:redsand",
wherein = {"group:hardened_clay"},
clust_scarcity = 1500,
clust_size = 4,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
biomes = {"MesaPlateauFM", "MesaPlateauFM_grasstop", "MesaPlateauFM_sandlevel"},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.008,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"MesaPlateauFM_grasstop"},
y_min = 30,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})

View File

@ -0,0 +1,68 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Bamboo Jungle areas are like the Jungle areas, but warmer and more humid.
vl_biomes.register_biome({
name = "BambooJungle",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 90,
heat_point = 95,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 24,
_mcl_foliage_palette_index = 12,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_shore = {
node_top = "mcl_core:dirt",
depth_top = 1,
y_min = -2,
y_max = 0,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -3,
vertical_blend = 1,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.025,
biomes = {"BambooJungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.01,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"BambooJungle"},
})

View File

@ -0,0 +1,59 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Bamboo Jungle Edge
vl_biomes.register_biome({
name = "BambooJungleEdge",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 92,
heat_point = 90,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 26,
_mcl_foliage_palette_index = 13,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 2,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0045,
biomes = {"BambooJungleEdge"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.005,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"BambooJungleEdge"},
})

View File

@ -0,0 +1,86 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Bamboo Jungle M
-- Like Bamboo Jungle but with even more dense vegetation
vl_biomes.register_biome({
name = "BambooJungleM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 95,
heat_point = 95,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 25,
_mcl_foliage_palette_index = 12,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_shore = {
node_top = "mcl_core:dirt",
depth_top = 1,
y_min = -2,
y_max = 0,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -3,
vertical_blend = 1,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.09,
biomes = {"BambooJungleM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_2.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.05,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"BambooJungleM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"BambooJungleM"},
})

View File

@ -0,0 +1,83 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Jungle Edge M (very rare).
-- Almost identical to Jungle Edge. Has deeper dirt. Melons spawn here a lot.
-- This biome occours directly between Jungle M and Jungle Edge but also has a small border to Jungle.
-- This biome is very small in general.
vl_biomes.register_biome({
name = "BambooJungleEdgeM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 4,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 95,
heat_point = 95,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 27,
_mcl_foliage_palette_index = 13,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 4,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0045,
biomes = {"BambooJungleEdgeM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0085,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"BambooJungleEdgeM"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.005,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"BambooJungleEdgeM"},
})

View File

@ -0,0 +1,68 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Birch Forest
vl_biomes.register_biome({
name = "BirchForest",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 78,
heat_point = 31,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 15,
_mcl_foliage_palette_index = 8,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#7AA5FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0.03,
scale = 0.0025,
spread = vector.new(250, 250, 250),
seed = 11,
octaves = 3,
persist = 0.66
},
biomes = {"BirchForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch.mts",
flags = "place_center_x, place_center_z",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]--
fill_ratio = 0.00002,
biomes = {"BirchForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch_bee_nest.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
})

View File

@ -0,0 +1,69 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Birch Forest M aka Old Growth Birch Forest
vl_biomes.register_biome({
name = "BirchForestM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 77,
heat_point = 27,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 16,
_mcl_foliage_palette_index = 8,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#7AA5FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0.03,
scale = 0.0025,
spread = vector.new(250, 250, 250),
seed = 11,
octaves = 3,
persist = 0.66
},
biomes = {"BirchForestM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch_tall.mts",
flags = "place_center_x, place_center_z",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]--
fill_ratio = 0.00002,
biomes = {"BirchForestM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch_bee_nest.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
})

View File

@ -0,0 +1,107 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms")
-- Roofed Forest aka Dark Forest
vl_biomes.register_biome({
name = "RoofedForest",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 94,
heat_point = 27,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 18,
_mcl_foliage_palette_index = 7,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#79A6FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 2,
},
})
-- Dark Oak
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0.05,
scale = 0.0015,
spread = vector.new(125, 125, 125),
seed = 223,
octaves = 3,
persist = 0.66
},
biomes = {"RoofedForest"},
y_min = 4,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_dark_oak.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
local ratio_mushroom = 0.0001
local ratio_mushroom_huge = ratio_mushroom * (11 / 12)
local ratio_mushroom_giant = ratio_mushroom * (1 / 12)
-- Huge Brown Mushroom
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = ratio_mushroom_huge,
biomes = {"RoofedForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_huge_brown.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = ratio_mushroom_giant,
biomes = {"RoofedForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_giant_brown.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
-- Huge Red Mushroom
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = ratio_mushroom_huge,
biomes = {"RoofedForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_huge_red.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = ratio_mushroom_giant,
biomes = {"RoofedForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_giant_red.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})

View File

@ -0,0 +1,31 @@
-- Bamboo
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt", },
sidelen = 80,
fill_ratio = 0.0043,
biomes = {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_bamboo:bamboo",
height = 9,
max_height = 11,
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.095,
biomes = {"BambooJungle", "BambooJungleM", "BambooJungleEdge", "BambooJungleEdgeM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_bamboo:bamboo",
height = 9,
max_height = 10,
flags = "place_center_x, place_center_z",
rotation = "random",
})

View File

@ -0,0 +1,27 @@
-- Cacti
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:sand"},
sidelen = 16,
noise_params = {
offset = -0.01,
scale = 0.024,
spread = vector.new(100, 100, 100),
seed = 257,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
decoration = "mcl_core:cactus",
biomes = {"Desert",
"Mesa", "Mesa_sandlevel",
"MesaPlateauF", "MesaPlateauF_sandlevel",
"MesaPlateauFM", "MesaPlateauFM_sandlevel"},
height = 1,
height_max = 3,
spawn_by = "air",
check_offset = 1,
num_spawn_by = 16
})

View File

@ -0,0 +1,165 @@
-- TODO: use priorities, and move this to the module where coral blocks are defined?
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
local coral_min = vl_biomes.OCEAN_MIN
local coral_max = -10
local warm_oceans = vl_biomes.by_water_temp.warm
-- Coral Reefs
for _, c in ipairs({ "brain", "horn", "bubble", "tube", "fire" }) do
local noise = {
offset = -0.0085,
scale = 0.002,
spread = vector.new(25, 120, 25),
seed = 235,
octaves = 5,
persist = 1.8,
lacunarity = 3.5,
flags = "absvalue"
}
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:sand", "mcl_core:gravel", "mcl_mud:mud"},
sidelen = 80,
noise_params = noise,
biomes = warm_oceans,
y_min = coral_min,
y_max = coral_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_coral_" .. c .. "_1.mts",
rotation = "random",
flags = "all_floors,force_placement",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:sand", "mcl_core:gravel", "mcl_mud:mud"},
noise_params = noise,
sidelen = 80,
biomes = warm_oceans,
y_min = coral_min,
y_max = coral_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_coral_" .. c .. "_2.mts",
rotation = "random",
flags = "all_floors,force_placement",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:" .. c .. "_coral_block"},
sidelen = 16,
fill_ratio = 3,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:" .. c .. "_coral",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:horn_coral_block"},
sidelen = 16,
fill_ratio = 7,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:" .. c .. "_coral_fan",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
})
end
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:sand", "mcl_core:gravel", "mcl_mud:mud"},
sidelen = 16,
noise_params = {
offset = -0.0085,
scale = 0.002,
spread = vector.new(25, 120, 25),
seed = 235,
octaves = 5,
persist = 1.8,
lacunarity = 3.5,
flags = "absvalue"
},
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:dead_brain_coral_block",
biomes = warm_oceans,
flags = "force_placement",
height = 1,
height_max = 1,
place_offset_y = -1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:dead_brain_coral_block"},
sidelen = 16,
fill_ratio = 3,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:sea_pickle_1_dead_brain_coral_block",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
place_offset_y = -1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:dead_brain_coral_block"},
sidelen = 16,
fill_ratio = 3,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:sea_pickle_2_dead_brain_coral_block",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
place_offset_y = -1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:dead_brain_coral_block"},
sidelen = 16,
fill_ratio = 2,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:sea_pickle_3_dead_brain_coral_block",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
place_offset_y = -1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_ocean:dead_brain_coral_block"},
sidelen = 16,
fill_ratio = 2,
y_min = coral_min,
y_max = coral_max,
decoration = "mcl_ocean:sea_pickle_4_dead_brain_coral_block",
biomes = warm_oceans,
flags = "force_placement, all_floors",
height = 1,
height_max = 1,
place_offset_y = -1,
})
--rare CORAl easter egg
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:sand", "mcl_core:gravel"},
fill_ratio = 0.0001,
sidelen = 80,
biomes = warm_oceans,
y_min = coral_min,
y_max = coral_max,
schematic = mod_mcl_structures .. "/schematics/coral_cora.mts",
rotation = "random",
flags = "all_floors,force_placement",
})

View File

@ -0,0 +1,79 @@
-- Template to register a grass or fern decoration
local function register_fern_decoration(offset, scale, biomes)
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:grass_block_no_snow", "mcl_core:podzol", "mcl_mud:mud"},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(200, 200, 200),
seed = 333,
octaves = 3,
persist = 0.6
},
biomes = {biomes[b]},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_flowers:fern",
param2 = param2,
})
end
end
local fern_minimal = {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "ColdTaiga", "MangroveSwamp"}
local fern_low = {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga"}
local fern_Jungle = {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM"}
--local fern_JungleM = { "JungleM" },
-- FIXME: register once per biome only, with appropriate parameters?
register_fern_decoration(-0.03, 0.09, fern_minimal)
register_fern_decoration(-0.015, 0.075, fern_minimal)
register_fern_decoration(0, 0.06, fern_minimal)
register_fern_decoration(0.015, 0.045, fern_low)
register_fern_decoration(0.03, 0.03, fern_low)
register_fern_decoration(0.01, 0.05, fern_Jungle)
register_fern_decoration(0.03, 0.03, fern_Jungle)
register_fern_decoration(0.05, 0.01, fern_Jungle)
register_fern_decoration(0.07, -0.01, fern_Jungle)
register_fern_decoration(0.09, -0.03, fern_Jungle)
register_fern_decoration(0.12, -0.03, {"JungleM"})
-- Large ferns
local function register_double_fern(offset, scale, biomes)
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
priority = 1500,
schematic = {
size = vector.new(1, 3, 1),
data = {
{name = "air", prob = 0},
{name = "mcl_flowers:double_fern", param1 = 255, param2 = param2},
{name = "mcl_flowers:double_fern_top", param1 = 255, param2 = param2},
},
},
place_on = {"group:grass_block_no_snow", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 2,
persist = 0.66,
},
y_min = 1,
y_max = vl_biomes.overworld_max,
biomes = biomes[b],
})
end
end
register_double_fern(0.01, 0.03, {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "ColdTaiga", "MegaTaiga", "MegaSpruceTaiga", "BambooJungle", "BambooJungleM", "BambooJungleEdge", "BambooJungleEdgeM", })
register_double_fern(0.15, 0.1, {"JungleM", "BambooJungleM", "BambooJungle"})

View File

@ -0,0 +1,86 @@
-- Large flowers
local function register_large_flower(name, biomes, seed, offset)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
schematic = {
size = vector.new(1, 2, 1),
data = {
{name = "mcl_flowers:" .. name },
{name = "mcl_flowers:" .. name .. "_top" },
},
},
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = offset,
scale = 0.01,
spread = vector.new(300, 300, 300),
seed = seed,
octaves = 5,
persist = 0.62,
},
y_min = 1,
y_max = vl_biomes.overworld_max,
biomes = biomes,
})
end
register_large_flower("rose_bush", {"Forest"}, 9350, -0.008)
register_large_flower("rose_bush", {"FlowerForest"}, 9350, 0.003)
register_large_flower("peony", {"Forest"}, 10450, -0.008)
register_large_flower("peony", {"FlowerForest"}, 10450, 0.003)
register_large_flower("lilac", {"Forest"}, 10600, -0.007)
register_large_flower("lilac", {"FlowerForest"}, 10600, 0.003)
register_large_flower("sunflower", {"SunflowerPlains"}, 2940, 0.01)
local function register_flower(name, biomes, seed, offset)
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = offset,
scale = 0.006,
spread = vector.new(100, 100, 100),
seed = seed,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
biomes = biomes,
decoration = "mcl_flowers:" .. name,
})
end
local flower_biomes1 = {"Plains", "SunflowerPlains", "RoofedForest", "Forest", "BirchForest", "BirchForestM", "Taiga", "ColdTaiga", "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Savanna", "SavannaM", "ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop"}
register_flower("dandelion", flower_biomes1, 8, 0.0008)
register_flower("dandelion", {"FlowerForest"}, 8, 0.032)
register_flower("poppy", flower_biomes1, 9439, 0.0008)
register_flower("poppy", {"FlowerForest"}, 9439, 0.032)
register_flower("clover", flower_biomes1, 3, 0.0408) -- not in Flower Forest
register_flower("fourleaf_clover", flower_biomes1, 13, -0.0012) -- not in Flower Forest
local flower_biomes2 = {"Plains", "SunflowerPlains"}
register_flower("tulip_red", flower_biomes2, 436, 0.0008)
register_flower("tulip_red", {"FlowerForest"}, 436, 0.032)
register_flower("tulip_orange", flower_biomes2, 536, 0.0008)
register_flower("tulip_orange", {"FlowerForest"}, 536, 0.032)
register_flower("tulip_pink", flower_biomes2, 636, 0.0008)
register_flower("tulip_pink", {"FlowerForest"}, 636, 0.032)
register_flower("tulip_white", flower_biomes2, 736, 0.0008)
register_flower("tulip_white", {"FlowerForest"}, 736, 0.032)
register_flower("azure_bluet", flower_biomes2, 800, 0.0008)
register_flower("azure_bluet", {"FlowerForest"}, 800, 0.032)
register_flower("oxeye_daisy", flower_biomes2, 3490, 0.0008)
register_flower("oxeye_daisy", {"FlowerForest"}, 3490, 0.032)
register_flower("cornflower", flower_biomes2, 486, 0.0008)
register_flower("cornflower", {"FlowerForest"}, 486, 0.032)
register_flower("lily_of_the_valley", {"Forest", "BirchForest", "BirchForestM", "RoofedForest"}, 325, 0.0008)
register_flower("lily_of_the_valley", {"FlowerForest"}, 325, 0.032)
register_flower("allium", {"FlowerForest"}, 836, 0.04008) -- Flower Forest only, until we have Meadows
register_flower("blue_orchid", {"Swampland"}, 64500, 0.0008) -- Swamp only

View File

@ -0,0 +1,70 @@
-- Small mushrooms in caves
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:material_stone"},
sidelen = 80,
fill_ratio = 0.009,
noise_threshold = 2.0,
flags = "all_floors",
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_red",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:material_stone"},
sidelen = 80,
fill_ratio = 0.009,
noise_threshold = 2.0,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_brown",
})
-- Mushrooms next to trees
local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}
local mseeds = {7133, 8244}
for m = 1, #mushrooms do
-- Mushrooms next to trees
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.003,
spread = vector.new(250, 250, 250),
seed = mseeds[m],
octaves = 3,
persist = 0.66,
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = mushrooms[m],
spawn_by = {"mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree"},
num_spawn_by = 1,
priority = 1150,
})
-- More mushrooms in Swampland
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"},
sidelen = 16,
noise_params = {
offset = 0.05,
scale = 0.003,
spread = vector.new(250, 250, 250),
seed = mseeds[m],
octaves = 3,
persist = 0.6,
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = mushrooms[m],
biomes = {"Swampland"},
spawn_by = {"mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree"},
num_spawn_by = 1,
priority = 1150,
})
end

View File

@ -0,0 +1,20 @@
-- Pumpkin
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_farming:pumpkin",
param2 = 0,
param2_max = 3,
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.016,
scale = 0.01332,
spread = vector.new(125, 125, 125),
seed = 666,
octaves = 6,
persist = 0.666
},
y_min = 1,
y_max = vl_biomes.overworld_max,
biomes = {"ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "Plains", "SunflowerPlains", "Swampland", "MangroveSwamp"},
})

View File

@ -0,0 +1,43 @@
-- Sugar canes
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt", "mcl_core:coarse_dirt", "group:grass_block_no_snow", "group:sand", "mcl_core:podzol", "mcl_core:reeds"},
sidelen = 16,
noise_params = {
offset = -0.3,
scale = 0.7,
spread = vector.new(200, 200, 200),
seed = 2,
octaves = 3,
persist = 0.7
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_core:reeds",
height = 1,
height_max = 3,
spawn_by = {"mcl_core:water_source", "group:frosted_ice"}, -- TODO: river water source, too?
num_spawn_by = 1,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt", "mcl_core:coarse_dirt", "group:grass_block_no_snow", "group:sand", "mcl_core:podzol", "mcl_core:reeds"},
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.5,
spread = vector.new(200, 200, 200),
seed = 2,
octaves = 3,
persist = 0.7,
},
biomes = {"Swampland", "Swampland_shore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_core:reeds",
height = 1,
height_max = 3,
spawn_by = {"mcl_core:water_source", "group:frosted_ice"},
num_spawn_by = 1,
})

View File

@ -0,0 +1,155 @@
-- TODO: move to mcl_ocean?
local function register_seagrass_decoration(grasstype, offset, scale, biomes)
local seed, nodes, surfaces, param2, param2_max, y_max
if grasstype == "seagrass" then
seed = 16
surfaces = {"mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel", "mcl_core:redsand"}
nodes = {"mcl_ocean:seagrass_dirt", "mcl_ocean:seagrass_sand", "mcl_ocean:seagrass_gravel", "mcl_ocean:seagrass_redsand"}
y_max = 0
elseif grasstype == "kelp" then
seed = 32
param2 = 16
param2_max = 96
surfaces = {"mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel"}
nodes = {"mcl_ocean:kelp_dirt", "mcl_ocean:kelp_sand", "mcl_ocean:kelp_gravel"}
y_max = -6
end
local noise = {
offset = offset,
scale = scale,
spread = vector.new(100, 100, 100),
seed = seed,
octaves = 3,
persist = 0.6,
}
for s = 1, #surfaces do
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {surfaces[s]},
sidelen = 16,
noise_params = noise,
biomes = biomes,
y_min = vl_biomes.DEEP_OCEAN_MIN,
y_max = y_max,
decoration = nodes[s],
param2 = param2,
param2_max = param2_max,
place_offset_y = -1,
flags = "force_placement",
})
end
end
-- TODO: use temperature classes, rather than hardcoding biome lists here?
-- Also would allow for more/less seagrass depending on temperature class
register_seagrass_decoration("seagrass", 0, 0.5, {
"ColdTaiga_ocean",
"ExtremeHills_ocean",
"ExtremeHillsM_ocean",
"ExtremeHills+_ocean",
"Taiga_ocean",
"MegaTaiga_ocean",
"MegaSpruceTaiga_ocean",
"StoneBeach_ocean",
"Plains_ocean",
"SunflowerPlains_ocean",
"Forest_ocean",
"FlowerForest_ocean",
"BirchForest_ocean",
"BirchForestM_ocean",
"RoofedForest_ocean",
"Swampland_ocean",
"Jungle_ocean",
"JungleM_ocean",
"JungleEdge_ocean",
"JungleEdgeM_ocean",
"MushroomIsland_ocean",
"Desert_ocean",
"Savanna_ocean",
"SavannaM_ocean",
"Mesa_ocean",
"MesaBryce_ocean",
"MesaPlateauF_ocean",
"MesaPlateauFM_ocean",
"ColdTaiga_deep_ocean",
"ExtremeHills_deep_ocean",
"ExtremeHillsM_deep_ocean",
"ExtremeHills+_deep_ocean",
"Taiga_deep_ocean",
"MegaTaiga_deep_ocean",
"MegaSpruceTaiga_deep_ocean",
"StoneBeach_deep_ocean",
"Plains_deep_ocean",
"SunflowerPlains_deep_ocean",
"Forest_deep_ocean",
"FlowerForest_deep_ocean",
"BirchForest_deep_ocean",
"BirchForestM_deep_ocean",
"RoofedForest_deep_ocean",
"Swampland_deep_ocean",
"Jungle_deep_ocean",
"JungleM_deep_ocean",
"JungleEdge_deep_ocean",
"JungleEdgeM_deep_ocean",
"MushroomIsland_deep_ocean",
"Desert_deep_ocean",
"Savanna_deep_ocean",
"SavannaM_deep_ocean",
"Mesa_deep_ocean",
"MesaBryce_deep_ocean",
"MesaPlateauF_deep_ocean",
"MesaPlateauFM_deep_ocean",
"Mesa_sandlevel",
"MesaBryce_sandlevel",
"MesaPlateauF_sandlevel",
"MesaPlateauFM_sandlevel",
"Swampland_shore",
"Jungle_shore",
"JungleM_shore",
"Savanna_beach",
"FlowerForest_beach",
"ColdTaiga_beach_water",
"ExtremeHills_beach",
})
register_seagrass_decoration("kelp", -0.5, 1, {
"ExtremeHillsM_ocean",
"ExtremeHills+_ocean",
"MegaTaiga_ocean",
"MegaSpruceTaiga_ocean",
"Plains_ocean",
"SunflowerPlains_ocean",
"Forest_ocean",
"FlowerForest_ocean",
"BirchForest_ocean",
"BirchForestM_ocean",
"RoofedForest_ocean",
"Swampland_ocean",
"Jungle_ocean",
"JungleM_ocean",
"JungleEdge_ocean",
"JungleEdgeM_ocean",
"MushroomIsland_ocean",
"ExtremeHillsM_deep_ocean",
"ExtremeHills+_deep_ocean",
"MegaTaiga_deep_ocean",
"MegaSpruceTaiga_deep_ocean",
"Plains_deep_ocean",
"SunflowerPlains_deep_ocean",
"Forest_deep_ocean",
"FlowerForest_deep_ocean",
"BirchForest_deep_ocean",
"BirchForestM_deep_ocean",
"RoofedForest_deep_ocean",
"Swampland_deep_ocean",
"Jungle_deep_ocean",
"JungleM_deep_ocean",
"JungleEdge_deep_ocean",
"JungleEdgeM_deep_ocean",
"MushroomIsland_deep_ocean",
})

View File

@ -0,0 +1,11 @@
--Snow layer on snowy dirt
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt_with_grass_snow"},
sidelen = 80,
fill_ratio = 10,
flags = "all_floors",
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_core:snow",
})

View File

@ -0,0 +1,20 @@
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.012,
spread = vector.new(100, 100, 100),
seed = 354,
octaves = 1,
persist = 0.5,
lacunarity = 1.0,
flags = "absvalue"
},
biomes = {"Taiga", "ColdTaiga", "MegaTaiga", "MegaSpruceTaiga", "Forest"},
y_max = vl_biomes.overworld_max,
y_min = 2,
decoration = "mcl_sweet_berry:sweet_berry_bush_3"
})

View File

@ -0,0 +1,110 @@
-- Template to register a grass decoration
local function register_grass_decoration(offset, scale, biomes)
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:grass_block_no_snow", "mcl_mud:mud"},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(200, 200, 200),
seed = 420,
octaves = 3,
persist = 0.6
},
biomes = { biomes[b] },
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_flowers:tallgrass",
param2 = param2,
})
end
end
local grass_forest = {"Plains", "Taiga", "Forest", "FlowerForest", "BirchForest", "BirchForestM", "RoofedForest", "Swampland", }
local grass_mpf = {"MesaPlateauF_grasstop"}
local grass_plains = {"Plains", "SunflowerPlains", "JungleEdge", "JungleEdgeM", "MangroveSwamp"}
local grass_savanna = {"Savanna", "SavannaM"}
local grass_sparse = {"ExtremeHills", "ExtremeHills+", "ExtremeHills+_snowtop", "ExtremeHillsM", "Jungle"}
local grass_mpfm = {"MesaPlateauFM_grasstop"}
-- TODO: register only once for each biome, with better parameters?
register_grass_decoration(-0.03, 0.09, grass_forest)
register_grass_decoration(-0.015, 0.075, grass_forest)
register_grass_decoration(0, 0.06, grass_forest)
register_grass_decoration(0.015, 0.045, grass_forest)
register_grass_decoration(0.03, 0.03, grass_forest)
register_grass_decoration(-0.03, 0.09, grass_mpf)
register_grass_decoration(-0.015, 0.075, grass_mpf)
register_grass_decoration(0, 0.06, grass_mpf)
register_grass_decoration(0.01, 0.045, grass_mpf)
register_grass_decoration(0.01, 0.05, grass_forest)
register_grass_decoration(0.03, 0.03, grass_plains)
register_grass_decoration(0.05, 0.01, grass_plains)
register_grass_decoration(0.07, -0.01, grass_plains)
register_grass_decoration(0.09, -0.03, grass_plains)
register_grass_decoration(0.18, -0.03, grass_savanna)
register_grass_decoration(0.05, -0.03, grass_sparse)
register_grass_decoration(0.05, 0.05, grass_mpfm)
register_grass_decoration(-0.03, 1, {"BambooJungle", "BambooJungleM", "BambooJungleEdge"})
-- Doubletall grass registration helper
local function register_doubletall_grass(offset, scale, biomes)
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
priority = 1500,
schematic = {
size = vector.new(1, 3, 1),
data = {
{name = "air", prob = 0},
{name = "mcl_flowers:double_grass", param1 = 255, param2 = param2},
{name = "mcl_flowers:double_grass_top", param1 = 255, param2 = param2},
},
},
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(200, 200, 200),
seed = 420,
octaves = 3,
persist = 0.6,
},
y_min = 1,
y_max = vl_biomes.overworld_max,
biomes = biomes,
})
end
end
register_doubletall_grass(-0.0005, -0.3, {"BambooJungle", "BambooJungleM", "BambooJungleEdge"})
register_doubletall_grass(-0.01, 0.03, {"Forest", "FlowerForest", "BirchForest", "BirchForestM", "RoofedForest", "Taiga"})
register_doubletall_grass(-0.002, 0.03, {"Plains", "SunflowerPlains"})
register_doubletall_grass(-0.0005, -0.03, {"Savanna", "SavannaM"})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.012,
spread = vector.new(100, 100, 100),
seed = 354,
octaves = 1,
persist = 0.5,
lacunarity = 1.0,
flags = "absvalue"
},
biomes = {"BambooJungle", "BambooJungleEdge","BambooJungleM", "BambooJungleEdge"},
y_max = vl_biomes.overworld_max,
y_min = 1,
decoration = "mcl_flowers:tallgrass"
})

View File

@ -0,0 +1,45 @@
-- Desert
vl_biomes.register_biome({
name = "Desert",
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
node_stone = "mcl_core:sandstone",
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 26,
heat_point = 94,
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 3,
_mcl_skycolor = "#6EB1FF",
_ocean = {
node_filler = "mcl_core:sand",
depth_filler = 3,
}
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"group:sand", "group:hardened_clay"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.006,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"Desert"},
decoration = "mcl_core:deadbush",
height = 1,
})

View File

@ -0,0 +1,326 @@
local mg_seed = minetest.get_mapgen_setting("seed")
vl_biomes.register_biome({
name = "End",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 1000, --ridiculously high values so End Island always takes precedent
humidity_point = 1000,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndBarrens",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 1000,
humidity_point = 1000,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndMidlands",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 1000,
humidity_point = 1000,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndHighlands",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 1000,
humidity_point = 1000,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndSmallIslands",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 1000,
humidity_point = 1000,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndBorder",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max + 80,
heat_point = 500,
humidity_point = 500,
vertical_blend = 16,
max_pos = vector.new(1250, vl_biomes.end_min + 512, 1250),
min_pos = vector.new(-1250, vl_biomes.end_min, -1250),
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
vl_biomes.register_biome({
name = "EndIsland",
node_stone = "air",
node_filler = "air",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
max_pos = vector.new(650, vl_biomes.end_min + 512, 650),
min_pos = vector.new(-650, vl_biomes.end_min, -650),
heat_point = 50,
humidity_point = 50,
vertical_blend = 16,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 0,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.end_skycolor,
_mcl_fogcolor = vl_biomes.end_fogcolor
})
-- Generate fake End
-- TODO: Remove the "ores" when there's a better End generator
-- FIXME: Broken lighting in v6 mapgen
local mg_name = minetest.get_mapgen_setting("mg_name")
local end_wherein = mg_name == "v6" and {"air", "mcl_core:stone"} or {"air"}
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_end:end_stone",
wherein = end_wherein,
biomes = {"EndSmallIslands", "Endborder"},
y_min = vl_biomes.end_min + 64,
y_max = vl_biomes.end_min + 80,
clust_num_ores = 3375,
clust_size = 15,
noise_params = {
offset = vl_biomes.end_min + 70,
scale = -1,
spread = vector.new(84, 84, 84),
seed = 145,
octaves = 3,
persist = 0.6,
lacunarity = 2,
--flags = "defaults",
},
np_stratum_thickness = {
offset = 0,
scale = 15,
spread = vector.new(84, 84, 84),
seed = 145,
octaves = 3,
persist = 0.6,
lacunarity = 2,
--flags = "defaults",
},
clust_scarcity = 1,
})
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_end:end_stone",
wherein = end_wherein,
biomes = {"End", "EndMidlands", "EndHighlands", "EndBarrens"},
y_min = vl_biomes.end_min + 64,
y_max = vl_biomes.end_min + 80,
noise_params = {
offset = vl_biomes.end_min + 70,
scale = -1,
spread = vector.new(126, 126, 126),
seed = mg_seed + 9999,
octaves = 3,
persist = 0.5,
},
np_stratum_thickness = {
offset = -2,
scale = 10,
spread = vector.new(126, 126, 126),
seed = mg_seed + 9999,
octaves = 3,
persist = 0.5,
},
clust_scarcity = 1,
})
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_end:end_stone",
wherein = end_wherein,
biomes = {"End", "EndMidlands", "EndHighlands", "EndBarrens"},
y_min = vl_biomes.end_min + 64,
y_max = vl_biomes.end_min + 80,
noise_params = {
offset = vl_biomes.end_min + 72,
scale = -3,
spread = vector.new(84, 84, 84),
seed = mg_seed + 999,
octaves = 4,
persist = 0.8,
},
np_stratum_thickness = {
offset = -4,
scale = 10,
spread = vector.new(84, 84, 84),
seed = mg_seed + 999,
octaves = 4,
persist = 0.8,
},
clust_scarcity = 1,
})
minetest.register_ore({
ore_type = "stratum",
ore = "mcl_end:end_stone",
wherein = end_wherein,
biomes = {"End", "EndMidlands", "EndHighlands", "EndBarrens"},
y_min = vl_biomes.end_min + 64,
y_max = vl_biomes.end_min + 80,
noise_params = {
offset = vl_biomes.end_min + 70,
scale = -2,
spread = vector.new(84, 84, 84),
seed = mg_seed + 99,
octaves = 4,
persist = 0.85,
},
np_stratum_thickness = {
offset = -3,
scale = 5,
spread = vector.new(63, 63, 63),
seed = mg_seed + 50,
octaves = 4,
persist = 0.85,
},
clust_scarcity = 1,
})
-- Chorus plant
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:chorus",
deco_type = "simple",
place_on = {"mcl_end:end_stone"},
flags = "all_floors",
sidelen = 16,
noise_params = {
offset = -0.012,
scale = 0.024,
spread = vector.new(100, 100, 100),
seed = 257,
octaves = 3,
persist = 0.6
},
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max,
decoration = "mcl_end:chorus_plant",
height = 1,
height_max = 8,
biomes = {"End", "EndMidlands", "EndHighlands", "EndBarrens", "EndSmallIslands"},
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:chorus_plant",
deco_type = "simple",
place_on = {"mcl_end:chorus_plant"},
flags = "all_floors",
sidelen = 16,
fill_ratio = 10,
--[[noise_params = {
offset = -0.012,
scale = 0.024,
spread = vector.new(100, 100, 100),
seed = 257,
octaves = 3,
persist = 0.6
},--]]
y_min = vl_biomes.end_min,
y_max = vl_biomes.end_max,
decoration = "mcl_end:chorus_flower",
height = 1,
biomes = {"End", "EndMidlands", "EndHighlands", "EndBarrens", "EndSmallIslands"},
gen_callback = function(t, minp, maxp, blockseed)
local pr = PcgRandom(blockseed + mg_seed + 99682)
for _, pos in ipairs(t) do
local x, y, z = pos.x, pos.y, pos.z
if x < -10 or x > 10 or z < -10 or z > 10 then
local realpos = vector.new(x, y + 1, z)
local node = minetest.get_node(realpos)
if node and node.name == "mcl_end:chorus_flower" then
mcl_end.grow_chorus_plant(realpos, node, pr)
end
end
end
end,
})

View File

@ -0,0 +1,168 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Forest
vl_biomes.register_biome({
name = "Forest",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 61,
heat_point = 45,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 13,
_mcl_foliage_palette_index = 7,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#79A6FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_filler = "mcl_core:sandstone",
depth_filler = 1,
y_min = -1,
y_max = 0,
_mcl_foliage_palette_index = 1,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -2,
},
})
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.000545,
scale = 0.0011,
spread = vector.new(250, 250, 250),
seed = 3 + 5 * i,
octaves = 3,
persist = 0.66
},
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_large_"..i..".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.025,
scale = 0.0022,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]
fill_ratio = 0.00002,
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic_bee_nest.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
})
-- Rare balloon oak
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.002083,
scale = 0.0022,
spread = vector.new(250, 250, 250),
seed = 3,
octaves = 3,
persist = 0.6,
},
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_balloon.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Birch
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.000333,
scale = -0.0015,
spread = vector.new(250, 250, 250),
seed = 11,
octaves = 3,
persist = 0.66
},
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch.mts",
flags = "place_center_x, place_center_z",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]--
fill_ratio = 0.00002,
biomes = {"Forest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch_bee_nest.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
})

View File

@ -0,0 +1,100 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Flower Forest
vl_biomes.register_biome({
name = "FlowerForest",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 3,
y_max = vl_biomes.overworld_max,
humidity_point = 44,
heat_point = 32,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 14,
_mcl_foliage_palette_index = 7,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#79A6FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_filler = "mcl_core:sandstone",
depth_filler = 1,
y_min = -2,
y_max = 2,
_mcl_foliage_palette_index = 1,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -3,
},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.0022,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = {"FlowerForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]--
fill_ratio = 0.0002,
biomes = {"FlowerForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic_bee_nest.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
})
-- Birch
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.000333,
scale = -0.0015,
spread = vector.new(250, 250, 250),
seed = 11,
octaves = 3,
persist = 0.66
},
biomes = {"FlowerForest"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_birch.mts",
flags = "place_center_x, place_center_z",
})

View File

@ -0,0 +1,347 @@
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
-- Future biomes API, work in progress
vl_biomes = {}
vl_biomes.overworld_fogcolor = "#C0D8FF"
vl_biomes.beach_skycolor = "#78A7FF" -- This is the case for all beach biomes except for the snowy ones! Those beaches will have their own colour instead of this one.
vl_biomes.ocean_skycolor = "#7BA4FF" -- This is the case for all ocean biomes except for non-deep frozen oceans! Those oceans will have their own colour instead of this one.
vl_biomes.nether_skycolor = "#6EB1FF" -- The Nether biomes seemingly don't use the sky colour, despite having this value according to the wiki. The fog colour is used for both sky and fog.
vl_biomes.end_skycolor = "#000000"
vl_biomes.end_fogcolor = "#A080A0" -- The End biomes seemingly don't use the fog colour, despite having this value according to the wiki. The sky colour is used for both sky and fog.
-- Colors of underwater fog effect, defaults for temperatures
-- Swamp and Mangrove Swamp differ
local waterfogcolor = { warm = "#43D5EE", lukewarm = "#45ADF2", ocean = "#3F76E4", cold = "#3D57D6", frozen = "#3938C9" }
vl_biomes.overworld_min = mcl_vars.mg_overworld_min
vl_biomes.overworld_max = mcl_vars.mg_overworld_max
vl_biomes.nether_min = mcl_vars.mg_nether_min
vl_biomes.lava_nether_max = mcl_vars.mg_lava_nether_max
vl_biomes.nether_deco_max = mcl_vars.mg_nether_deco_max
vl_biomes.nether_max = mcl_vars.mg_nether_max
vl_biomes.end_min = mcl_vars.mg_end_min
vl_biomes.end_max = mcl_vars.mg_end_max
vl_biomes.OCEAN_MIN = -15
vl_biomes.DEEP_OCEAN_MAX = vl_biomes.OCEAN_MIN - 1
vl_biomes.DEEP_OCEAN_MIN = -31
local mg_name = minetest.get_mapgen_setting("mg_name")
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
-- Biomes by water temperature, for decorations and structures
vl_biomes.by_water_temp = {}
-- Register a biome
-- This API has a few extensions over minetest.register_biome:
--
-- - _mcl_skycolor affects sky color
-- - _mcl_waterfogcolor affects sky color depending on weather
-- - _mcl_biome_type = "snowy", "cold", "medium" or "hot" affects weather
-- - _mcl_foliage_palette_index affects tree colors
-- - _mcl_grass_palette_index affects grass color
-- - _mcl_water_palette_index affects water color
-- - some default values
-- - subbiomes that inherit from defaults or their parents
--
-- TODO: add a "_mcl_world" parameter to set defaults for y_min, y_max, and ensure bounds?
vl_biomes.register_biome = function(def)
local is_overworld = (def.y_min or def.min_pos.y) >= vl_biomes.overworld_min - 5 and (def.y_max or def.max_pos.y) <= vl_biomes.overworld_max + 5
if is_overworld then
-- some defaults:
if def._mcl_fogcolor == nil then def._mcl_fogcolor = vl_biomes.overworld_fogcolor end
if def._beach and def._beach._mcl_skycolor == nil then def._beach._mcl_skycolor = vl_biomes.beach_skycolor end
if def._ocean then
local odef = def._ocean
if odef._mcl_skycolor == nil then odef._mcl_skycolor = vl_biomes.ocean_skycolor end
if odef._mcl_water_temp == nil or odef._mcl_water_temp == "default" then odef._mcl_water_temp = "ocean" end
if odef._mcl_waterfogcolor == nil then odef._mcl_waterfogcolor = waterfogcolor[odef._mcl_water_temp] end
if odef.y_min == nil and not odef.min_pos then odef.y_min = vl_biomes.OCEAN_MIN end
if odef.y_max == nil and not odef.max_pos then odef.y_max = 0 end
if odef._mcl_foliage_palette_index == nil then odef._mcl_foliage_palette_index = 0 end -- no param2 updates
end
-- add deep ocean automatically
if def._deep_ocean == nil then
-- TODO: y_min, y_max only if not min_pos, max_pos
def._deep_ocean = {
y_min = vl_biomes.DEEP_OCEAN_MIN,
y_max = vl_biomes.DEEP_OCEAN_MAX,
node_top = def._ocean.node_top or def.node_top,
depth_top = 2,
node_filler = def._ocean.node_filler or def.node_filler,
depth_filler = 3,
node_riverbed = def._ocean.node_riverbed or def.node_riverbed,
depth_riverbed = 2,
vertical_blend = 5,
_mcl_foliage_palette_index = 0, -- to avoid running the foliage fix
_mcl_skycolor = vl_biomes.ocean_skycolor,
}
end
-- Underground biomes are used to identify the underground and to prevent nodes from the surface
-- (sand, dirt) from leaking into the underground.
if def._underground == nil then
-- TODO: y_min, y_max only if not min_pos, max_pos
def._underground = {
node_top = def._ocean.node_top or def.node_top,
depth_top = 2,
node_filler = def._ocean.node_filler or def.node_filler,
depth_filler = 3,
node_riverbed = def._ocean.node_riverbed or def.node_riverbed,
depth_riverbed = 2,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.DEEP_OCEAN_MIN - 1,
}
end
end
-- subbiomes
local subbiomes = {}
for k, sdef in pairs(def) do
-- currently, all _tables are subbiomes
-- TODO: more precise check, or use _subbiomes = {}?
if k:sub(1,1) == "_" and type(sdef) == "table" then
-- subbiome name
if not sdef.name then sdef.name = def.name .. k end
-- merge from parent
for k2, v2 in pairs(def) do
if type(v2) ~= "table" and sdef[k2] == nil then
sdef[k2] = v2
end
end
table.insert(subbiomes, sdef)
def[k] = nil -- remove
end
-- build a biome map based on water temperature
if k == "_ocean" and sdef._mcl_water_temp then
local temp = sdef._mcl_water_temp
if not vl_biomes.by_water_temp[temp] then vl_biomes.by_water_temp[temp] = {} end
table.insert(vl_biomes.by_water_temp[temp], sdef.name)
end
end
minetest.register_biome(def)
-- minetest.log("action", "registering biome "..tostring(def.name))
for _, sdef in ipairs(subbiomes) do
-- minetest.log("action", "registering subbiome "..tostring(sdef.name))
minetest.register_biome(sdef)
end
end
-- helper for spruce decorations
function vl_biomes.register_spruce_decoration(seed, offset, sprucename, biomes, y_min)
local mod_mcl_core = minetest.get_modpath("mcl_core")
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = offset,
scale = 0.0006,
spread = vector.new(250, 250, 250),
seed = seed,
octaves = 3,
persist = 0.66
},
biomes = biomes,
y_min = y_min or 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/" .. sprucename,
flags = "place_center_x, place_center_z",
})
end
--
-- Detect mapgen to select functions
--
if mg_name == "singlenode" then
-- nothing in singlenode
elseif superflat then
-- Implementation of Minecraft's Superflat mapgen, classic style:
-- * Perfectly flat land, 1 grass biome, no decorations, no caves
-- * 4 layers, from top to bottom: grass block, dirt, dirt, bedrock
minetest.clear_registered_biomes()
minetest.clear_registered_decorations()
minetest.clear_registered_schematics()
-- Classic Superflat: bedrock (not part of biome), 2 dirt, 1 grass block
minetest.register_biome({
name = "flat",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_stone = "mcl_core:dirt",
y_min = mcl_vars.mg_overworld_min - 512,
y_max = mcl_vars.mg_overworld_max,
humidity_point = 50,
heat_point = 50,
_mcl_biome_type = "medium",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 1,
_mcl_water_palette_index = 0,
_mcl_watertemp = "ocean",
_mcl_waterfogcolor = waterfogcolor["ocean"],
_mcl_skycolor = "#78A7FF",
_mcl_fogcolor = vl_biomes.overworld_fogcolor
})
elseif mg_name ~= "v6" then
-- OVERWORLD biomes
--[[ These biomes try to resemble MC. This means especially the floor cover and the type of
plants and structures (shapes might differ). The terrain itself will be of course different and
depends on the mapgen.
Important: MC also takes the terrain into account while MT biomes so far don't care about the
terrain at all (except height).
MC has many M and Hills variants, most of which only differ in terrain compared to their original
counterpart.
In MT, any biome can occour in any terrain, so these variants are implied and are therefore
not explicitly implmented in MCL2. M variants are only included if they have another unique feature,
such as a different land cover.
In MCL2, the MC Overworld biomes are split in multiple more parts (stacked by height):
* The main part, this represents the land. It begins at around sea level and usually goes all the way up
* _ocean: For the area covered by ocean water. The y_max may vary for various beach effects.
Has sand or dirt as floor.
* _deep_ocean: Like _ocean, but deeper and has gravel as floor
* _underground:
* Other modifiers: Some complex biomes require more layers to improve the landscape.
The following naming conventions apply:
* The land biome name is equal to the MC biome name, as of Minecraft 1.11 (in camel case)
* Height modifiers and sub-biomes are appended with underscores and in lowercase. Example: _ocean
* Non-MC biomes are written in lowercase
* MC dimension biomes are named after their MC dimension
Intentionally missing biomes:
* River (generated by valleys and v7)
* Frozen River (generated by valleys and v7)
* Hills biomes (shape only)
* Plateau (shape only)
* Plateau M (shape only)
* Cold Taiga M (mountain only)
* Taiga M (mountain only)
* Roofed Forest M (mountain only)
* Swampland M (mountain only)
* Extreme Hills Edge (unused in MC)
TODO:
* Better beaches
* Improve Extreme Hills M
* Desert M (desert lakes - removed?)
]]
dofile(modpath.."/plains.lua")
dofile(modpath.."/plains_sunflower.lua")
dofile(modpath.."/savanna.lua")
dofile(modpath.."/savanna_windswept.lua")
dofile(modpath.."/desert.lua")
-- missing: Meadow, similar to Plains?
dofile(modpath.."/forest.lua")
dofile(modpath.."/forest_flower.lua")
dofile(modpath.."/birchforest.lua")
dofile(modpath.."/birchforest_old.lua")
dofile(modpath.."/taiga.lua")
dofile(modpath.."/taiga_old_pine.lua")
dofile(modpath.."/taiga_old_spruce.lua")
dofile(modpath.."/dark_forest.lua")
-- missing: Cherry Grove
-- missing: Frozen Peaks -- just a matter of shape?
-- missing: Grove, but how does it differ from snowy taiga?
-- missing: Jagged Peaks -- just a matter of shape?
dofile(modpath.."/snowy_taiga.lua")
dofile(modpath.."/snowy_plains.lua")
dofile(modpath.."/snowy_plains_spikes.lua")
-- missing: Snowy Slopes -- just a matter of shape?
dofile(modpath.."/badlands.lua")
dofile(modpath.."/badlands_eroded.lua")
dofile(modpath.."/badlands_wooded.lua")
dofile(modpath.."/badlands_wooded_mod.lua")
dofile(modpath.."/badlands-strata.lua") -- not a biome, but shared code that needs to be last
dofile(modpath.."/jungle.lua")
dofile(modpath.."/jungle_edge.lua")
dofile(modpath.."/jungle_modified.lua")
dofile(modpath.."/jungle_modified_edge.lua")
dofile(modpath.."/bamboojungle.lua")
dofile(modpath.."/bamboojungle_edge.lua")
dofile(modpath.."/bamboojungle_modified.lua")
dofile(modpath.."/bamboojungle_modified_edge.lua")
dofile(modpath.."/swampland.lua")
dofile(modpath.."/mangroveswamp.lua")
dofile(modpath.."/mushroomisland.lua")
dofile(modpath.."/stonebeach.lua")
dofile(modpath.."/windswepthills.lua")
dofile(modpath.."/windswepthills_forest.lua")
dofile(modpath.."/windswepthills_gravelly.lua")
-- missing: Stony Peaks -- just a matter of shape?
-- missing: Deep Dark
-- missing: Dripstone Caves
-- missing: Lush Caves
-- Additional decorations
dofile(modpath.."/deco/bamboo.lua")
dofile(modpath.."/deco/cacti.lua")
dofile(modpath.."/deco/corals.lua")
dofile(modpath.."/deco/fern.lua")
dofile(modpath.."/deco/flowers.lua")
dofile(modpath.."/deco/mushrooms.lua")
dofile(modpath.."/deco/pumpkin.lua")
dofile(modpath.."/deco/reeds.lua")
dofile(modpath.."/deco/seagrass_kelp.lua")
dofile(modpath.."/deco/snowy_dirt.lua")
dofile(modpath.."/deco/sweet_berry.lua")
dofile(modpath.."/deco/tallgrass.lua")
end
-- FIXME: add back some v6 support?
-- Non-overworld in everything except singlenode
if mg_name ~= "singlenode" then
--[[ THE NETHER ]]
-- the following decoration is a hack to cover exposed bedrock in netherrack - be careful
-- not to put any ceiling decorations in a way that would apply to this
-- (they would get generated regardless of biome)
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:bedrock"},
sidelen = 16,
fill_ratio = 10,
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_max + 15,
height = 6,
max_height = 10,
decoration = "mcl_nether:netherrack",
flags = "all_ceilings",
param2 = 0,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:bedrock"},
sidelen = 16,
fill_ratio = 10,
y_min = vl_biomes.nether_min - 10,
y_max = vl_biomes.lava_nether_max,
height = 7,
max_height = 14,
decoration = "mcl_nether:netherrack",
flags = "all_floors,force_placement",
param2 = 0,
})
-- Nether biomes
dofile(modpath.."/nether/netherwastes.lua")
dofile(modpath.."/nether/soulsandvalley.lua")
dofile(modpath.."/nether/crimsonforest.lua")
dofile(modpath.."/nether/warpedforest.lua")
dofile(modpath.."/nether/basaltdelta.lua")
-- Sahred ores across nether biomes
dofile(modpath.."/nether/ores.lua")
--[[ THE END ]]
dofile(modpath.."/end/end.lua")
end

View File

@ -0,0 +1,173 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Jungle
vl_biomes.register_biome({
name = "Jungle",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 88,
heat_point = 81,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 24,
_mcl_foliage_palette_index = 12,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_shore = {
node_top = "mcl_core:dirt",
depth_top = 1,
y_min = -2,
y_max = 0,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -3,
vertical_blend = 1,
},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.004,
biomes = {"Jungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Huge jungle tree (4 variants)
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0008,
biomes = {"Jungle"},
y_min = 4,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_huge_"..i..".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
-- Common jungle tree
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.025,
biomes = {"Jungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.015,
biomes = {"Jungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_2.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.005,
biomes = {"Jungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_3.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.005,
biomes = {"Jungle"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_4.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Jungle bush
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0196,
scale = 0.015,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"Jungle"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0196,
scale = 0.005,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"Jungle" },
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves_2.mts",
flags = "place_center_x, place_center_z",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.01,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"Jungle"},
})

View File

@ -0,0 +1,93 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Jungle Edge aka Sparse Jungle
vl_biomes.register_biome({
name = "JungleEdge",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 88,
heat_point = 76,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 26,
_mcl_foliage_palette_index = 13,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 2,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0004,
biomes = {"JungleEdge"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0045,
biomes = {"JungleEdge"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0085,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"JungleEdge"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.005,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"JungleEdge"},
})

View File

@ -0,0 +1,115 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Jungle M aka modified Jungle
-- Like Jungle but with even more dense vegetation
vl_biomes.register_biome({
name = "JungleM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 92,
heat_point = 81,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 25,
_mcl_foliage_palette_index = 12,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_shore = {
node_top = "mcl_core:dirt",
depth_top = 1,
y_min = -2,
y_max = 0,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -3,
vertical_blend = 1,
},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.004,
biomes = {"JungleM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Huge jungle tree (4 variants)
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"JungleM"},
y_min = 4,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_huge_"..i..".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.09,
biomes = {"JungleM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree_2.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.05,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"JungleM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"JungleM"},
})

View File

@ -0,0 +1,113 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Jungle Edge M (very rare).
-- Almost identical to Jungle Edge. Has deeper dirt. Melons spawn here a lot.
-- This biome occours directly between Jungle M and Jungle Edge but also has a small border to Jungle.
-- This biome is very small in general.
vl_biomes.register_biome({
name = "JungleEdgeM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 4,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 90,
heat_point = 79,
_mcl_biome_type = "medium",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 27,
_mcl_foliage_palette_index = 13,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#77A8FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 4,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0004,
biomes = {"JungleEdgeM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0045,
biomes = {"JungleEdgeM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_tree.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0085,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2930,
octaves = 4,
persist = 0.6,
},
biomes = {"JungleEdgeM"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
flags = "place_center_x, place_center_z",
})
-- Lots of melons in Jungle Edge M
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 80,
noise_params = {
offset = 0.013,
scale = 0.006,
spread = vector.new(125, 125, 125),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"JungleEdgeM"},
})
-- Melon
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"group:grass_block_no_snow"},
sidelen = 16,
noise_params = {
offset = -0.005,
scale = 0.006,
spread = vector.new(250, 250, 250),
seed = 333,
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = vl_biomes.overworld_max,
decoration = "mcl_farming:melon",
biomes = {"JungleEdgeM"},
})

View File

@ -0,0 +1,207 @@
-- TODO: move to mcl_mangrove module?
local mod_mcl_mangrove = minetest.get_modpath("mcl_mangrove")
local mg_seed = minetest.get_mapgen_setting("seed")
-- Mangrove swamp
vl_biomes.register_biome({
name = "MangroveSwamp",
node_top = "mcl_mud:mud",
depth_top = 1,
node_filler = "mcl_mud:mud",
depth_filler = 3,
node_riverbed = "mcl_core:dirt",
depth_riverbed = 2,
y_min = -5, -- was 1, with _shore below
y_max = 27, -- Note: Limited in height!
humidity_point = 95,
heat_point = 94,
_mcl_biome_type = "hot",
_mcl_water_temp = "warm",
_mcl_grass_palette_index = 27,
_mcl_foliage_palette_index = 6,
_mcl_water_palette_index = 7,
_mcl_waterfogcolor = "#3A7A6A",
_mcl_skycolor = "#78A7FF",
-- removed, as it did not differ _shore = { y_min = -5, y_max = 0, },
_ocean = {
node_top = "mcl_core:dirt",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:gravel",
depth_riverbed = 2,
y_max = -6,
vertical_blend = 1,
},
})
--- Grow mangrove roots after generation
local function mangrove_root_gennotify(t, minp, maxp, blockseed)
for _, pos in ipairs(t) do
local nn = minetest.find_nodes_in_area(vector.offset(pos, -8, -1, -8), vector.offset(pos, 8, 0, 8), {"mcl_mangrove:mangrove_roots"})
if nn and #nn > 0 then
local pr = PcgRandom(blockseed + mg_seed + 38327)
for _, v in pairs(nn) do
local l = pr:next(2, 16)
local n = minetest.get_node(vector.offset(v, 0, -1, 0)).name
if minetest.get_item_group(n, "water") > 0 then
local wl = "mcl_mangrove:water_logged_roots"
if n:find("river") then wl = "mcl_mangrove:river_water_logged_roots" end
minetest.bulk_swap_node(minetest.find_nodes_in_area(v, vector.offset(v, 0, -l, 0), {"group:water"}), {name = wl})
elseif n == "mcl_mud:mud" then
minetest.bulk_swap_node(minetest.find_nodes_in_area(v, vector.offset(v, 0, -l, 0), {"mcl_mud:mud"}), {name = "mcl_mangrove:mangrove_mud_roots"})
elseif n == "air" then
minetest.bulk_swap_node(minetest.find_nodes_in_area(v, vector.offset(v, 0, -l, 0), {"air"}), {name = "mcl_mangrove:mangrove_roots"})
end
end
end
end
end
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_tree_1",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.0065,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_tree_1.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_tree_2",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.0045,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = -1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_tree_2.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_tree_3",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.023,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = -1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_tree_3.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_tree_4",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.023,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = -1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_tree_4.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_tree_5",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.023,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = -1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_tree_5.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
name = "mcl_biomes:mangrove_bee_nest",
deco_type = "schematic",
place_on = {"mcl_mud:mud"},
sidelen = 80,
--[[noise_params = {
offset = 0.01,
scale = 0.00001,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.33
},]]--
fill_ratio = 0.0005,
biomes = {"MangroveSwamp"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mangrove .. "/schematics/mcl_mangrove_bee_nest.mts",
flags = "place_center_x, place_center_z, force_placement",
rotation = "random",
spawn_by = "group:flower",
priority = 1550,
gen_callback = mangrove_root_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.045,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = 0,
y_max = 0,
decoration = "mcl_mangrove:water_logged_roots",
flags = "place_center_x, place_center_z, force_placement",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_mangrove:mangrove_roots"},
spawn_by = {"group:water"},
num_spawn_by = 2,
sidelen = 80,
fill_ratio = 10,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
y_min = 0,
y_max = 0,
decoration = "mcl_mangrove:water_logged_roots",
flags = "place_center_x, place_center_z, force_placement, all_ceilings",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.045,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
place_offset_y = -1,
decoration = "mcl_mangrove:mangrove_mud_roots",
flags = "place_center_x, place_center_z, force_placement",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_mud:mud"},
sidelen = 80,
fill_ratio = 0.008,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
decoration = "mcl_core:deadbush",
flags = "place_center_x, place_center_z",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:water_source"},
sidelen = 80,
fill_ratio = 0.035,
biomes = {"MangroveSwamp", "MangroveSwamp_shore"},
decoration = "mcl_flowers:waterlily",
flags = "place_center_x, place_center_z, liquid_surface",
})

View File

@ -1,4 +1,4 @@
name = mcl_biomes
author = maikerumine
name = vl_biomes
author = maikerumine,wuzzy,kno10
description = Adds the various biomes and biome-related things for non-v6 map generators.
depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean, mcl_crimson, mcl_blackstone, mcl_mangrove

View File

@ -0,0 +1,107 @@
local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms")
-- Mushroom Island / Mushroom Island Shore (rare) aka Mushroom Fields
-- Not neccessarily an island at all, only named after Minecraft's biome
vl_biomes.register_biome({
name = "MushroomIsland",
node_top = "mcl_core:mycelium",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1, -- was 4, with Shore below
y_max = 20, -- Note: Limited in height!
vertical_blend = 1,
humidity_point = 106,
heat_point = 50,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 29,
_mcl_foliage_palette_index = 17,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#77A8FF",
-- _shore = { name = "MushroomIslandShore", y_min = 1, y_max = 3, },
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
},
})
local ratio_mushroom_mycelium = 0.002
local ratio_mushroom_mycelium_huge = ratio_mushroom_mycelium * (11 / 12)
local ratio_mushroom_mycelium_giant = ratio_mushroom_mycelium * (1 / 12)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = ratio_mushroom_mycelium_huge,
biomes = {"MushroomIsland"}, --"MushroomIslandShore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_huge_brown.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = ratio_mushroom_mycelium_giant,
biomes = {"MushroomIsland"}, --"MushroomIslandShore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_giant_brown.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = ratio_mushroom_mycelium_huge,
biomes = {"MushroomIsland"}, --"MushroomIslandShore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_huge_red.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = ratio_mushroom_mycelium_giant,
biomes = {"MushroomIsland"}, --"MushroomIslandShore"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_mushrooms .. "/schematics/mcl_mushrooms_giant_red.mts",
flags = "place_center_x, place_center_z",
rotation = "0",
})
-- Mushrooms in mushroom biome
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = 0.009,
biomes = {"MushroomIsland", "MushroomIslandShore"},
noise_threshold = 2.0,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_red",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:mycelium"},
sidelen = 80,
fill_ratio = 0.009,
biomes = {"MushroomIsland", "MushroomIslandShore"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_brown",
})

View File

@ -0,0 +1,135 @@
-- Nether Basalt Delta biome
vl_biomes.register_biome({
name = "BasaltDelta",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_blackstone:basalt",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max + 80,
heat_point = 27,
humidity_point = 80,
_mcl_biome_type = "hot",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.nether_skycolor,
_mcl_fogcolor = "#685F70"
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_blackstone:nether_gold", "mcl_nether:quartz_ore", "mcl_core:gravel", "mcl_nether:soul_sand", "mcl_blackstone:blackstone", "mcl_nether:magma"},
sidelen = 16,
fill_ratio = 10,
biomes = {"BasaltDelta"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
decoration = "mcl_blackstone:basalt",
flags = "all_floors",
param2 = 0,
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_blackstone:blackstone",
wherein = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_core:gravel"},
clust_scarcity = 100,
clust_num_ores = 400,
clust_size = 20,
biomes = {"BasaltDelta"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
}
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_blackstone:basalt",
place_on = {"mcl_blackstone:basalt", "mcl_nether:netherrack", "mcl_blackstone:blackstone"},
sidelen = 80,
height_max = 55,
noise_params = {
offset = -0.0085,
scale = 0.002,
spread = vector.new(25, 120, 25),
seed = 2325,
octaves = 5,
persist = 2,
lacunarity = 3.5,
flags = "absvalue"
},
biomes = {"BasaltDelta"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_deco_max - 50,
flags = "all_floors, all ceilings",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_blackstone:basalt",
place_on = {"mcl_blackstone:basalt", "mcl_nether:netherrack", "mcl_blackstone:blackstone"},
sidelen = 80,
height_max = 15,
noise_params = {
offset = -0.0085,
scale = 0.004,
spread = vector.new(25, 120, 25),
seed = 235,
octaves = 5,
persist = 2.5,
lacunarity = 3.5,
flags = "absvalue"
},
biomes = {"BasaltDelta"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_deco_max - 15,
flags = "all_floors, all ceilings",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_blackstone:basalt",
place_on = {"mcl_blackstone:basalt", "mcl_nether:netherrack", "mcl_blackstone:blackstone"},
sidelen = 80,
height_max = 3,
fill_ratio = 0.4,
biomes = {"BasaltDelta"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_deco_max - 15,
flags = "all_floors, all ceilings",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_nether:magma",
place_on = {"mcl_blackstone:basalt", "mcl_nether:netherrack", "mcl_blackstone:blackstone"},
sidelen = 80,
fill_ratio = 0.082323,
biomes = {"BasaltDelta"},
place_offset_y = -1,
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors, all ceilings",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
decoration = "mcl_nether:nether_lava_source",
place_on = {"mcl_blackstone:basalt", "mcl_nether:netherrack", "mcl_blackstone:blackstone"},
spawn_by = {"mcl_blackstone:basalt", "mcl_blackstone:blackstone"},
num_spawn_by = 14,
sidelen = 80,
fill_ratio = 4,
biomes = {"BasaltDelta"},
place_offset_y = -1,
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 5,
flags = "all_floors, force_placement",
})

View File

@ -0,0 +1,121 @@
local mod_mcl_crimson = minetest.get_modpath("mcl_crimson")
vl_biomes.register_biome({
name = "CrimsonForest",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_crimson:crimson_nylium",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max + 80,
heat_point = 60,
humidity_point = 47,
_mcl_biome_type = "hot",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.nether_skycolor,
_mcl_fogcolor = "#330303"
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_blackstone:nether_gold", "mcl_nether:quartz_ore", "mcl_core:gravel", "mcl_nether:soul_sand", "mcl_nether:magma", "mcl_blackstone:blackstone"},
sidelen = 16,
fill_ratio = 10,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
decoration = "mcl_crimson:crimson_nylium",
flags = "all_floors",
param2 = 0,
})
--- Fix light for mushroom lights after generation
local function fix_light_8_gennotify(t, minp, maxp, blockseed)
for _, pos in ipairs(t) do
minetest.fix_light(vector.offset(pos, -8, -8, -8), vector.offset(pos, 8, 8, 8))
end
end
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.02,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 10,
flags = "all_floors",
decoration = "mcl_crimson:crimson_fungus",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree1",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.008,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 10,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/crimson_fungus_1.mts",
size = vector.new(5, 8, 5),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
minetest.register_alias("mcl_biomes:crimson_tree", "mcl_biomes:crimson_tree1") -- legacy inconsistency, fixed 08/2024
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree2",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.006,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 15,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/crimson_fungus_2.mts",
size = vector.new(5, 12, 5),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:crimson_tree3",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.004,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 20,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/crimson_fungus_3.mts",
size = vector.new(7, 13, 7),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium", "mcl_crimson:weeping_vines", "mcl_nether:netherrack"},
sidelen = 16,
fill_ratio = 0.063,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_deco_max,
flags = "all_ceilings",
height = 2,
height_max = 8,
decoration = "mcl_crimson:weeping_vines",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.082,
biomes = {"CrimsonForest"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_crimson:crimson_roots",
})

View File

@ -0,0 +1,102 @@
-- Nether Wastes
minetest.register_biome({
name = "Nether",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_nether:netherrack",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max + 80,
heat_point = 100,
humidity_point = 0,
_mcl_biome_type = "hot",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.nether_skycolor,
_mcl_fogcolor = "#330808"
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_blackstone:nether_gold", "mcl_nether:quartz_ore", "mcl_core:gravel", "mcl_nether:soul_sand", "mcl_nether:glowstone", "mcl_nether:magma"},
sidelen = 16,
fill_ratio = 10,
biomes = {"Nether"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
decoration = "mcl_nether:netherrack",
flags = "all_floors",
param2 = 0,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:magma"},
sidelen = 16,
fill_ratio = 0.04,
biomes = {"Nether"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 1,
flags = "all_floors",
decoration = "mcl_fire:eternal_fire",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack"},
sidelen = 16,
fill_ratio = 0.013,
biomes = {"Nether"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 1,
flags = "all_floors",
decoration = "mcl_mushrooms:mushroom_brown",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack"},
sidelen = 16,
fill_ratio = 0.012,
biomes = {"Nether"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 1,
flags = "all_floors",
decoration = "mcl_mushrooms:mushroom_red",
})
--nether gold
local mg_name = minetest.get_mapgen_setting("mg_name")
if mg_name ~= "v6" then
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:blackstone_gilded",
wherein = "mcl_blackstone:blackstone",
clust_scarcity = 4775,
clust_num_ores = 2,
clust_size = 2,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 830,
clust_num_ores = 5,
clust_size = 3,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_blackstone:nether_gold",
wherein = "mcl_nether:netherrack",
clust_scarcity = 1660,
clust_num_ores = 4,
clust_size = 2,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max,
})
end

View File

@ -0,0 +1,190 @@
-- Soul sand
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_nether:soul_sand",
-- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally
-- in v6, but instead set with the on_generated function in mcl_mapgen_core.
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 13 * 13 * 13,
clust_size = 5,
y_min = vl_biomes.nether_min,
y_max = mcl_worlds.layer_to_y(64, "nether"),
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.1,
spread = vector.new(5, 5, 5),
seed = 2316,
octaves = 1,
persist = 0.0
},
})
-- Magma blocks
minetest.register_ore({
ore_type = "blob",
ore = "mcl_nether:magma",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 45,
clust_size = 6,
y_min = mcl_worlds.layer_to_y(23, "nether"),
y_max = mcl_worlds.layer_to_y(37, "nether"),
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_nether:magma",
wherein = {"mcl_nether:netherrack"},
clust_scarcity = 10 * 10 * 10,
clust_num_ores = 65,
clust_size = 8,
y_min = mcl_worlds.layer_to_y(23, "nether"),
y_max = mcl_worlds.layer_to_y(37, "nether"),
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
},
})
-- Glowstone
minetest.register_ore({
ore_type = "blob",
ore = "mcl_nether:glowstone",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 26 * 26 * 26,
clust_size = 5,
y_min = vl_biomes.lava_nether_max + 10,
y_max = vl_biomes.nether_max - 13,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.1,
spread = vector.new(5, 5, 5),
seed = 17676,
octaves = 1,
persist = 0.0
},
})
-- Gravel (Nether)
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_core:gravel",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
column_height_min = 1,
column_height_max = 1,
column_midpoint_factor = 0,
y_min = mcl_worlds.layer_to_y(63, "nether"),
-- This should be 65, but for some reason with this setting, the sheet ore really stops at 65. o_O
y_max = mcl_worlds.layer_to_y(65 + 2, "nether"),
noise_threshold = 0.2,
noise_params = {
offset = 0.0,
scale = 0.5,
spread = vector.new(20, 20, 20),
seed = 766,
octaves = 3,
persist = 0.6,
},
})
-- Nether quartz
if minetest.settings:get_bool("mcl_generate_ores", true) then
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:quartz_ore",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 850,
clust_num_ores = 4, -- MC cluster amount: 4-10
clust_size = 3,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:quartz_ore",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 1650,
clust_num_ores = 8, -- MC cluster amount: 4-10
clust_size = 4,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max,
})
end
-- Lava springs in the Nether
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:nether_lava_source",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 13500, --rare
clust_num_ores = 1,
clust_size = 1,
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_max - 13,
})
local lava_biomes = {"BasaltDelta", "Nether"}
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:nether_lava_source",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 500,
clust_num_ores = 1,
clust_size = 1,
biomes = lava_biomes,
y_min = vl_biomes.nether_min,
y_max = vl_biomes.lava_nether_max + 1,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:nether_lava_source",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 1000,
clust_num_ores = 1,
clust_size = 1,
biomes = lava_biomes,
y_min = vl_biomes.lava_nether_max + 2,
y_max = vl_biomes.lava_nether_max + 12,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:nether_lava_source",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 2000,
clust_num_ores = 1,
clust_size = 1,
biomes = lava_biomes,
y_min = vl_biomes.lava_nether_max + 13,
y_max = vl_biomes.lava_nether_max + 48,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:nether_lava_source",
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
clust_scarcity = 3500,
clust_num_ores = 1,
clust_size = 1,
biomes = lava_biomes,
y_min = vl_biomes.lava_nether_max + 49,
y_max = vl_biomes.nether_max - 13,
})

View File

@ -0,0 +1,115 @@
local mod_mcl_blackstone = minetest.get_modpath("mcl_blackstone")
vl_biomes.register_biome({
name = "SoulsandValley",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_blackstone:soul_soil",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max + 80,
heat_point = 77,
humidity_point = 33,
_mcl_biome_type = "hot",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.nether_skycolor,
_mcl_fogcolor = "#1B4745"
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_nether:magma"},
sidelen = 16,
fill_ratio = 10,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
decoration = "mcl_blackstone:soul_soil",
flags = "all_floors, all_ceilings",
param2 = 0,
})
minetest.register_ore({
ore_type = "blob",
ore = "mcl_nether:soul_sand",
wherein = {"mcl_nether:netherrack", "mcl_blackstone:soul_soil"},
clust_scarcity = 100,
clust_num_ores = 225,
clust_size = 15,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
noise_params = {
offset = 0,
scale = 1,
spread = vector.new(250, 250, 250),
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
}
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_blackstone:soul_soil", "mcl_nether:soul_sand"},
sidelen = 16,
fill_ratio = 0.062,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_blackstone:soul_fire",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil", "mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.000212,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone .. "/schematics/mcl_blackstone_nether_fossil_1.mts",
size = vector.new(5, 8, 5),
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil", "mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.0002233,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone .. "/schematics/mcl_blackstone_nether_fossil_2.mts",
size = vector.new(5, 8, 5),
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil", "mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.000225,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone .. "/schematics/mcl_blackstone_nether_fossil_3.mts",
size = vector.new(5, 8, 5),
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_blackstone:soul_soil", "mcl_nether:soulsand"},
sidelen = 16,
fill_ratio = 0.00022323,
biomes = {"SoulsandValley"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_blackstone .. "/schematics/mcl_blackstone_nether_fossil_4.mts",
size = vector.new(5, 8, 5),
rotation = "random",
})

View File

@ -0,0 +1,129 @@
local mod_mcl_crimson = minetest.get_modpath("mcl_crimson")
vl_biomes.register_biome({
name = "WarpedForest",
node_filler = "mcl_nether:netherrack",
node_stone = "mcl_nether:netherrack",
node_top = "mcl_crimson:warped_nylium",
node_water = "air",
node_river_water = "air",
node_cave_liquid = "air",
y_min = vl_biomes.nether_min,
y_max = vl_biomes.nether_max + 80,
heat_point = 37,
humidity_point = 70,
_mcl_biome_type = "hot",
_mcl_grass_palette_index = 17,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 0,
_mcl_waterfogcolor = vl_biomes.default_waterfogcolor,
_mcl_skycolor = vl_biomes.nether_skycolor,
_mcl_fogcolor = "#1A051A"
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_nether:netherrack", "mcl_nether:glowstone", "mcl_blackstone:nether_gold", "mcl_nether:quartz_ore", "mcl_core:gravel", "mcl_nether:soul_sand", "mcl_nether:magma", "mcl_blackstone:blackstone"},
sidelen = 16,
fill_ratio = 10,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max,
y_max = vl_biomes.nether_deco_max,
decoration = "mcl_crimson:warped_nylium",
flags = "all_floors",
param2 = 0,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.02,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 10,
flags = "all_floors",
decoration = "mcl_crimson:warped_fungus",
})
--- Fix light for mushroom lights after generation
local function fix_light_8_gennotify(t, minp, maxp, blockseed)
for _, pos in ipairs(t) do
minetest.fix_light(vector.offset(pos, -8, -8, -8), vector.offset(pos, 8, 8, 8))
end
end
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree1",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.007,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 15,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/warped_fungus_1.mts",
size = vector.new(5, 11, 5),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree2",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.005,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 10,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/warped_fungus_2.mts",
size = vector.new(5, 6, 5),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
name = "mcl_biomes:warped_tree3",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.003,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
y_max = vl_biomes.nether_max - 14,
flags = "all_floors, place_center_x, place_center_z",
schematic = mod_mcl_crimson .. "/schematics/warped_fungus_3.mts",
size = vector.new(5, 12, 5),
rotation = "random",
gen_callback = fix_light_8_gennotify,
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium", "mcl_crimson:twisting_vines"},
sidelen = 16,
fill_ratio = 0.032,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors",
height = 2,
height_max = 8,
decoration = "mcl_crimson:twisting_vines",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:warped_nylium"},
sidelen = 16,
fill_ratio = 0.0812,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors",
max_height = 5,
decoration = "mcl_crimson:warped_roots",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_crimson:crimson_nylium"},
sidelen = 16,
fill_ratio = 0.052,
biomes = {"WarpedForest"},
y_min = vl_biomes.lava_nether_max + 1,
flags = "all_floors",
decoration = "mcl_crimson:nether_sprouts",
})

View File

@ -0,0 +1,36 @@
-- Plains
vl_biomes.register_biome({
name = "Plains",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 3,
y_max = vl_biomes.overworld_max,
humidity_point = 39,
heat_point = 58,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 0,
_mcl_foliage_palette_index = 1,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#78A7FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_filler = "mcl_core:sandstone",
depth_filler = 2,
y_min = 0,
y_max = 2,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -1,
},
})

View File

@ -0,0 +1,29 @@
-- Sunflower Plains
vl_biomes.register_biome({
name = "SunflowerPlains",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 4,
y_max = vl_biomes.overworld_max,
humidity_point = 28,
heat_point = 45,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 11,
_mcl_foliage_palette_index = 1,
_mcl_water_palette_index = 0,
_mcl_skycolor = "#78A7FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
node_riverbed = "mcl_core:dirt",
depth_riverbed = 2,
},
})

View File

@ -0,0 +1,65 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Savanna
vl_biomes.register_biome({
name = "Savanna",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 36,
heat_point = 79,
_mcl_biome_type = "hot",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 1,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#6EB1FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 3,
node_filler = "mcl_core:sandstone",
depth_filler = 2,
y_min = -1,
y_max = 0,
_mcl_foliage_palette_index = 1,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -2,
},
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
fill_ratio = 0.0004,
biomes = {"JungleEdge", "JungleEdgeM", "Savanna"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Acacia (many variants)
for a = 1, 7 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 16,
fill_ratio = 0.0002,
biomes = {"Savanna"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_acacia_" .. a .. ".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end

View File

@ -0,0 +1,45 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Savanna M aka Shattered Savanna aka Windswept Savanna
-- Changes to Savanna: Coarse Dirt. No sand beach. No oaks.
-- Otherwise identical to Savanna
vl_biomes.register_biome({
name = "SavannaM",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:coarse_dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 48,
heat_point = 100,
_mcl_biome_type = "hot",
_mcl_water_temp = "lukewarm",
_mcl_grass_palette_index = 23,
_mcl_foliage_palette_index = 3,
_mcl_water_palette_index = 2,
_mcl_skycolor = "#6EB1FF",
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
},
})
-- Acacia (many variants)
for a = 1, 7 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 16,
fill_ratio = 0.0002,
biomes = {"SavannaM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_acacia_" .. a .. ".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end

View File

@ -0,0 +1,101 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Ice Plains, aka ice flats, aka Snowy Plains
vl_biomes.register_biome({
name = "IcePlains",
node_dust = "mcl_core:snow",
node_top = "mcl_core:dirt_with_grass_snow",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_water_top = "mcl_core:ice",
depth_water_top = 2,
node_river_water = "mcl_core:ice",
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 24,
heat_point = 8,
_mcl_biome_type = "snowy",
_mcl_water_temp = "frozen",
_mcl_grass_palette_index = 10,
_mcl_foliage_palette_index = 2,
_mcl_water_palette_index = 5,
_mcl_skycolor = "#7FA1FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
_mcl_skycolor = "#7FA1FF", -- not default, but icy
},
})
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.0002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"IcePlains"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Rare spruce in Ice Plains
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block"},
sidelen = 16,
noise_params = {
offset = -0.00075,
scale = -0.0015,
spread = vector.new(250, 250, 250),
seed = 11,
octaves = 3,
persist = 0.7
},
biomes = {"IcePlains"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_spruce_5.mts",
flags = "place_center_x, place_center_z",
})
-- Place tall grass on snow in Ice Plains
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
priority = 1500,
place_on = {"group:grass_block"},
sidelen = 16,
noise_params = {
offset = -0.08,
scale = 0.09,
spread = vector.new(15, 15, 15),
seed = 420,
octaves = 3,
persist = 0.6,
},
biomes = {"IcePlains"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = {
size = vector.new(1, 2, 1),
data = {
{name = "mcl_core:dirt_with_grass", force_place = true, },
{name = "mcl_flowers:tallgrass", param2 = 10},
},
},
})

View File

@ -0,0 +1,75 @@
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
-- Ice Plains Spikes (rare) aka Ice Spikes
vl_biomes.register_biome({
name = "IcePlainsSpikes",
node_top = "mcl_core:snowblock",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_water_top = "mcl_core:ice",
depth_water_top = 1,
node_river_water = "mcl_core:ice",
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 24,
heat_point = -5,
_mcl_biome_type = "snowy",
_mcl_water_temp = "frozen",
_mcl_grass_palette_index = 2,
_mcl_foliage_palette_index = 2,
_mcl_water_palette_index = 5,
_mcl_skycolor = "#7FA1FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
_mcl_skycolor = "#7FA1FF", -- not default, but icy
},
})
-- FIXME: on slopes, they tend to float on one side. Use even larger spikes and a negative y_offset?
-- Large ice spike
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:snowblock", "mcl_core:snow", "group:grass_block_snow"},
sidelen = 80,
noise_params = {
offset = 0.00040,
scale = 0.001,
spread = vector.new(250, 250, 250),
seed = 1133,
octaves = 4,
persist = 0.67,
},
biomes = {"IcePlainsSpikes"},
y_min = 4,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_ice_spike_large.mts",
rotation = "random",
flags = "place_center_x, place_center_z",
})
-- Small ice spike
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:snowblock", "mcl_core:snow", "group:grass_block_snow"},
sidelen = 80,
noise_params = {
offset = 0.005,
scale = 0.001,
spread = vector.new(250, 250, 250),
seed = 1133,
octaves = 4,
persist = 0.67,
},
biomes = {"IcePlainsSpikes"},
y_min = 4,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_ice_spike_small.mts",
rotation = "random",
flags = "place_center_x, place_center_z",
})

View File

@ -0,0 +1,103 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Cold Taiga aka Snowy Taiga
vl_biomes.register_biome({
name = "ColdTaiga",
node_dust = "mcl_core:snow",
node_top = "mcl_core:dirt_with_grass_snow",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 2,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 3,
y_max = vl_biomes.overworld_max,
humidity_point = 58,
heat_point = 8,
_mcl_biome_type = "snowy",
_mcl_water_temp = "frozen",
_mcl_grass_palette_index = 3,
_mcl_foliage_palette_index = 2,
_mcl_water_palette_index = 5,
_mcl_skycolor = "#839EFF",
-- A cold beach-like biome, implemented as low part of Cold Taiga
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_water_top = "mcl_core:ice",
depth_water_top = 1,
node_filler = "mcl_core:sandstone",
depth_filler = 2,
y_min = 1,
y_max = 2,
_mcl_foliage_palette_index = 16,
_mcl_skycolor = "#7FA1FF", -- not default, but icy
},
-- Water part of the beach. Added to prevent snow being on the ice.
_beach_water = {
node_top = "mcl_core:sand",
depth_top = 2,
node_water_top = "mcl_core:ice",
depth_water_top = 1,
node_filler = "mcl_core:sandstone",
depth_filler = 2,
y_min = -4,
y_max = 0,
_mcl_foliage_palette_index = 16,
_mcl_skycolor = "#7FA1FF", -- not default, but icy
},
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
y_max = -5,
vertical_blend = 1,
_mcl_skycolor = "#7FA1FF", -- not default, but icy
},
})
-- Small lollipop spruce
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = 0.004,
scale = 0.0022,
spread = vector.new(250, 250, 250),
seed = 2500,
octaves = 3,
persist = 0.66
},
biomes = {"ColdTaiga"},
y_min = 2,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_spruce_lollipop.mts",
flags = "place_center_x, place_center_z",
})
-- Matchstick spruce: Very few leaves, tall trunk
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:podzol"},
sidelen = 80,
noise_params = {
offset = -0.025,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2566,
octaves = 5,
persist = 0.60,
},
biomes = {"ColdTaiga"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_spruce_matchstick.mts",
flags = "place_center_x, place_center_z",
})
vl_biomes.register_spruce_decoration(11000, 0.00150, "mcl_core_spruce_5.mts", {"ColdTaiga"})
vl_biomes.register_spruce_decoration(2500, 0.00325, "mcl_core_spruce_1.mts", {"ColdTaiga"})
vl_biomes.register_spruce_decoration(7000, 0.00425, "mcl_core_spruce_3.mts", {"ColdTaiga"})
vl_biomes.register_spruce_decoration(9000, 0.00325, "mcl_core_spruce_4.mts", {"ColdTaiga"})

View File

@ -0,0 +1,26 @@
-- Stone beach, aka Stony Shore
-- Just stone.
-- Not neccessarily a beach at all, only named so according to MC
vl_biomes.register_biome({
name = "StoneBeach",
node_riverbed = "mcl_core:sand",
depth_riverbed = 1,
y_min = -7,
y_max = vl_biomes.overworld_max,
humidity_point = 0,
heat_point = 8,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 9,
_mcl_foliage_palette_index = 11,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA2FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
y_min = vl_biomes.OCEAN_MIN,
y_max = -8,
vertical_blend = 2,
},
})

View File

@ -0,0 +1,96 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Swampland
vl_biomes.register_biome({
name = "Swampland",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = 23, -- Note: Limited in height!
humidity_point = 90,
heat_point = 50,
_mcl_biome_type = "medium",
_mcl_water_temp = "ocean",
_mcl_grass_palette_index = 28,
_mcl_foliage_palette_index = 5,
_mcl_water_palette_index = 1,
_mcl_waterfogcolor = "#617B64",
_mcl_skycolor = "#78A7FF",
_shore = {
node_top = "mcl_core:dirt",
depth_top = 1,
y_min = -5,
y_max = 0,
},
_ocean = {
node_top = "mcl_core:sand",
depth_top = 1,
node_filler = "mcl_core:sand",
depth_filler = 3,
y_max = -6,
vertical_blend = 1,
},
})
-- Swamp oak
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
sidelen = 80,
noise_params = {
offset = 0.0055,
scale = 0.0011,
spread = vector.new(250, 250, 250),
seed = 5005,
octaves = 5,
persist = 0.6,
},
biomes = {"Swampland", "Swampland_shore"},
y_min = 0,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_swamp.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Lily pad
local lily_schem = {
{name = "mcl_core:water_source"},
{name = "mcl_flowers:waterlily"},
}
-- Spawn them in shallow water at ocean level in Swampland.
-- Tweak lilydepth to change the maximum water depth
local lilydepth = 2
for d = 1, lilydepth do
local height = d + 2
local y = 1 - d
table.insert(lily_schem, 1, {name = "air", prob = 0})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
schematic = {
size = vector.new(1, height, 1),
data = lily_schem,
},
place_on = "mcl_core:dirt",
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.3,
spread = vector.new(100, 100, 100),
seed = 503,
octaves = 6,
persist = 0.7,
},
y_min = y,
y_max = y,
biomes = {"Swampland_shore"},
rotation = "random",
})
end

View File

@ -0,0 +1,106 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Taiga
vl_biomes.register_biome({
name = "Taiga",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 4,
y_max = vl_biomes.overworld_max,
humidity_point = 58,
heat_point = 22,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 12,
_mcl_foliage_palette_index = 10,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA3FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_filler = "mcl_core:sandstone",
depth_filler = 1,
y_min = 1,
y_max = 3,
_mcl_foliage_palette_index = 1,
},
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
},
})
-- Small lollipop spruce
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = 0.004,
scale = 0.0022,
spread = vector.new(250, 250, 250),
seed = 2500,
octaves = 3,
persist = 0.66
},
biomes = {"Taiga"},
y_min = 2,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_spruce_lollipop.mts",
flags = "place_center_x, place_center_z",
})
-- Matchstick spruce: Very few leaves, tall trunk
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:podzol"},
sidelen = 80,
noise_params = {
offset = -0.025,
scale = 0.025,
spread = vector.new(250, 250, 250),
seed = 2566,
octaves = 5,
persist = 0.60,
},
biomes = {"Taiga"},
y_min = 3,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_spruce_matchstick.mts",
flags = "place_center_x, place_center_z",
})
-- Common spruce
vl_biomes.register_spruce_decoration(11000, 0.00150, "mcl_core_spruce_5.mts", {"Taiga"})
vl_biomes.register_spruce_decoration(2500, 0.00325, "mcl_core_spruce_1.mts", {"Taiga"})
vl_biomes.register_spruce_decoration(7000, 0.00425, "mcl_core_spruce_3.mts", {"Taiga"})
vl_biomes.register_spruce_decoration(9000, 0.00325, "mcl_core_spruce_4.mts", {"Taiga"})
-- Mushrooms in Taiga
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"Taiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_red",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"Taiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_brown",
})

View File

@ -0,0 +1,138 @@
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
-- Mega Pine Taiga aka Old Growth Pine Taiga
vl_biomes.register_biome({
name = "MegaTaiga",
node_top = "mcl_core:podzol",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 76,
heat_point = 10,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 4,
_mcl_foliage_palette_index = 9,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7CA3FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
},
})
-- Random coarse dirt floor in Mega Taiga
minetest.register_ore({
ore_type = "sheet",
ore = "mcl_core:coarse_dirt",
wherein = {"mcl_core:podzol", "mcl_core:dirt"},
clust_scarcity = 1,
clust_num_ores = 12,
clust_size = 10,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_threshold = 0.2,
noise_params = {offset = 0, scale = 15, spread = vector.new(130, 130, 130), seed = 24, octaves = 3, persist = 0.70},
biomes = {"MegaTaiga"},
})
-- Mossy cobblestone boulder (3x3)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 80,
noise_params = {
offset = 0.00015,
scale = 0.001,
spread = vector.new(300, 300, 300),
seed = 775703,
octaves = 4,
persist = 0.63,
},
biomes = {"MegaTaiga"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_boulder.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Small mossy cobblestone boulder (2x2)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 80,
noise_params = {
offset = 0.001,
scale = 0.001,
spread = vector.new(300, 300, 300),
seed = 775704,
octaves = 4,
persist = 0.63,
},
biomes = {"MegaTaiga"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_boulder_small.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Huge spruce
vl_biomes.register_spruce_decoration(3000, 0.0008, "mcl_core_spruce_huge_up_1.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(4000, 0.0008, "mcl_core_spruce_huge_up_2.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(6000, 0.0008, "mcl_core_spruce_huge_up_3.mts", {"MegaTaiga"})
-- Common spruce
vl_biomes.register_spruce_decoration(2500, 0.00325, "mcl_core_spruce_1.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(7000, 0.00425, "mcl_core_spruce_3.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(9000, 0.00325, "mcl_core_spruce_4.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(9500, 0.00500, "mcl_core_spruce_tall.mts", {"MegaTaiga"})
vl_biomes.register_spruce_decoration(5000, 0.00250, "mcl_core_spruce_2.mts", {"MegaTaiga"})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt", "group:hardened_clay"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.003,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"MegaTaiga"},
decoration = "mcl_core:deadbush",
height = 1,
})
-- Mushrooms in Taiga
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"MegaTaiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_red",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"MegaTaiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_brown",
})

View File

@ -0,0 +1,123 @@
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
-- Mega Spruce Taiga aka Old Growth Spruce Taiga
vl_biomes.register_biome({
name = "MegaSpruceTaiga",
node_top = "mcl_core:podzol",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 3,
node_riverbed = "mcl_core:sand",
depth_riverbed = 2,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 100,
heat_point = 8,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 5,
_mcl_foliage_palette_index = 10,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA3FF",
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
},
})
-- Mossy cobblestone boulder (3x3)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 80,
noise_params = {
offset = 0.00015,
scale = 0.001,
spread = vector.new(300, 300, 300),
seed = 775703,
octaves = 4,
persist = 0.63,
},
biomes = {"MegaSpruceTaiga"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_boulder.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Small mossy cobblestone boulder (2x2)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:coarse_dirt"},
sidelen = 80,
noise_params = {
offset = 0.001,
scale = 0.001,
spread = vector.new(300, 300, 300),
seed = 775704,
octaves = 4,
persist = 0.63,
},
biomes = {"MegaSpruceTaiga"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_structures .. "/schematics/mcl_structures_boulder_small.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Huge spruce
vl_biomes.register_spruce_decoration(3000, 0.0030, "mcl_core_spruce_huge_1.mts", {"MegaSpruceTaiga"})
vl_biomes.register_spruce_decoration(4000, 0.0036, "mcl_core_spruce_huge_2.mts", {"MegaSpruceTaiga"})
vl_biomes.register_spruce_decoration(6000, 0.0036, "mcl_core_spruce_huge_3.mts", {"MegaSpruceTaiga"})
vl_biomes.register_spruce_decoration(6600, 0.0036, "mcl_core_spruce_huge_4.mts", {"MegaSpruceTaiga"})
-- Common spruce
vl_biomes.register_spruce_decoration(2500, 0.00325, "mcl_core_spruce_1.mts", {"MegaSpruceTaiga"})
vl_biomes.register_spruce_decoration(7000, 0.00425, "mcl_core_spruce_3.mts", {"MegaSpruceTaiga"})
vl_biomes.register_spruce_decoration(5000, 0.00250, "mcl_core_spruce_2.mts", {"MegaSpruceTaiga"})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
priority = 1500,
place_on = {"mcl_core:podzol", "mcl_core:dirt", "mcl_core:dirt_with_grass", "mcl_core:coarse_dirt", "group:hardened_clay"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = 0.003,
spread = vector.new(100, 100, 100),
seed = 1972,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = vl_biomes.overworld_max,
biomes = {"MegaSpruceTaiga"},
decoration = "mcl_core:deadbush",
height = 1,
})
-- Mushrooms in Taiga
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"MegaSpruceTaiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_red",
})
mcl_mapgen_core.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:podzol"},
sidelen = 80,
fill_ratio = 0.003,
biomes = {"MegaSpruceTaiga"},
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
decoration = "mcl_mushrooms:mushroom_brown",
})

View File

@ -0,0 +1,41 @@
local mg_name = minetest.get_mapgen_setting("mg_name")
-- Note: this currently has to go after all the extremehills (windswept hills) biomes in order to be able to register.
-- Alternatively, we could put a copy into each...
local stonelike = {"mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"}
-- Emeralds
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_core:stone_with_emerald",
wherein = stonelike,
clust_scarcity = 16384,
clust_num_ores = 1,
clust_size = 1,
y_min = mcl_worlds.layer_to_y(4),
y_max = mcl_worlds.layer_to_y(32),
biomes = {
"ExtremeHills", "ExtremeHills_beach", "ExtremeHills_ocean", "ExtremeHills_deep_ocean", "ExtremeHills_underground",
"ExtremeHills+", "ExtremeHills+_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills+_underground",
"ExtremeHillsM", "ExtremeHillsM_ocean", "ExtremeHillsM_deep_ocean", "ExtremeHillsM_underground",
},
})
-- Rarely replace stone with stone monster eggs.
-- In v6 this can happen anywhere, in other mapgens only in Extreme Hills.
local monster_egg_scarcity = (mg_name == "v6" and 28 or 26)^3
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_monster_eggs:monster_egg_stone",
wherein = "mcl_core:stone",
clust_scarcity = monster_egg_scarcity,
clust_num_ores = 3,
clust_size = 2,
y_min = vl_biomes.overworld_min,
y_max = mcl_worlds.layer_to_y(61),
biomes = {
"ExtremeHills", "ExtremeHills_beach", "ExtremeHills_ocean", "ExtremeHills_deep_ocean", "ExtremeHills_underground",
"ExtremeHills+", "ExtremeHills+_ocean", "ExtremeHills+_deep_ocean", "ExtremeHills+_underground",
"ExtremeHillsM", "ExtremeHillsM_ocean", "ExtremeHillsM_deep_ocean", "ExtremeHillsM_underground",
},
})

View File

@ -0,0 +1,89 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Extreme Hills aka Windswept Hills
-- Sparsely populated grasslands with little tallgras and trees.
vl_biomes.register_biome({
name = "ExtremeHills",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 4,
node_riverbed = "mcl_core:sand",
depth_riverbed = 4,
y_min = 4,
y_max = vl_biomes.overworld_max,
humidity_point = 10,
heat_point = 45,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 6,
_mcl_foliage_palette_index = 11,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA2FF",
_beach = {
node_top = "mcl_core:sand",
depth_top = 2,
node_filler = "mcl_core:sandstone",
depth_filler = 3,
y_min = -4,
y_max = 3,
_mcl_foliage_palette_index = 1,
},
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 4,
y_max = -5,
vertical_blend = 1,
},
})
-- Large oaks
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 80,
noise_params = {
offset = -0.0007,
scale = 0.001,
spread = vector.new(250, 250, 250),
seed = 3,
octaves = 3,
persist = 0.6
},
biomes = {"ExtremeHills"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_large_" .. i .. ".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"ExtremeHills"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Spruce
vl_biomes.register_spruce_decoration(11000, 0.000025, "mcl_core_spruce_5.mts", {"ExtremeHills"})
vl_biomes.register_spruce_decoration(2500, 0.00005, "mcl_core_spruce_1.mts", {"ExtremeHills"})
vl_biomes.register_spruce_decoration(7000, 0.00005, "mcl_core_spruce_3.mts", {"ExtremeHills"})
vl_biomes.register_spruce_decoration(9000, 0.00005, "mcl_core_spruce_4.mts", {"ExtremeHills"})

View File

@ -0,0 +1,136 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Extreme Hills+ aka Windswept Forest
-- This biome is near-identical to Extreme Hills on the surface but has snow-covered mountains with spruce/oak
-- forests above a certain height.
vl_biomes.register_biome({
name = "ExtremeHills+",
node_top = "mcl_core:dirt_with_grass",
depth_top = 1,
node_filler = "mcl_core:dirt",
depth_filler = 4,
node_riverbed = "mcl_core:sand",
depth_riverbed = 4,
y_min = 1,
y_max = 41,
humidity_point = 24,
heat_point = 25,
vertical_blend = 6,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 8,
_mcl_foliage_palette_index = 11,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA2FF",
_snowtop = {
node_dust = "mcl_core:snow",
node_top = "mcl_core:dirt_with_grass_snow",
depth_top = 1,
node_river_water = "mcl_core:ice",
y_min = 42,
y_max = vl_biomes.overworld_max,
},
_ocean = {
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 4,
},
})
-- Large oaks
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 80,
noise_params = {
offset = -0.0007,
scale = 0.001,
spread = vector.new(250, 250, 250),
seed = 3,
octaves = 3,
persist = 0.6
},
biomes = {"ExtremeHills+", "ExtremeHills+_snowtop"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_large_" .. i .. ".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"ExtremeHills+", "ExtremeHills+_snowtop"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt"},
sidelen = 16,
noise_params = {
offset = 0.006,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"ExtremeHills+", "ExtremeHills+_snowtop"},
y_min = 50,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Spruce
vl_biomes.register_spruce_decoration(11000, 0.001, "mcl_core_spruce_5.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50)
vl_biomes.register_spruce_decoration(2500, 0.002, "mcl_core_spruce_1.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50)
vl_biomes.register_spruce_decoration(7000, 0.003, "mcl_core_spruce_3.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50)
vl_biomes.register_spruce_decoration(9000, 0.002, "mcl_core_spruce_4.mts", {"ExtremeHills+", "ExtremeHills+_snowtop"}, 50)
-- Some tallgrass
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
priority = 1500,
place_on = {"group:grass_block"},
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.09,
spread = vector.new(15, 15, 15),
seed = 420,
octaves = 3,
persist = 0.6,
},
biomes = {"ExtremeHills+_snowtop"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = {
size = vector.new(1, 2, 1),
data = {
{name = "mcl_core:dirt_with_grass", force_place = true, },
{name = "mcl_flowers:tallgrass", param2 = 8},
},
},
})

View File

@ -0,0 +1,93 @@
local mod_mcl_core = minetest.get_modpath("mcl_core")
-- Extreme Hills M aka Windswept Gravelly Hills
-- Just gravel.
vl_biomes.register_biome({
name = "ExtremeHillsM",
node_top = "mcl_core:gravel",
depth_top = 1,
node_filler = "mcl_core:gravel",
depth_filler = 3,
node_riverbed = "mcl_core:gravel",
depth_riverbed = 3,
y_min = 1,
y_max = vl_biomes.overworld_max,
humidity_point = 0,
heat_point = 25,
_mcl_biome_type = "cold",
_mcl_water_temp = "cold",
_mcl_grass_palette_index = 7,
_mcl_foliage_palette_index = 11,
_mcl_water_palette_index = 4,
_mcl_skycolor = "#7DA2FF",
_ocean = {
node_riverbed = "mcl_core:sand",
depth_riverbed = 3,
},
})
-- Small dirt patches in Extreme Hills M
minetest.register_ore({
ore_type = "blob",
-- TODO: Should be grass block. But generating this as ore means gras blocks will spawn undeground. :-(
ore = "mcl_core:dirt",
wherein = {"mcl_core:gravel"},
clust_scarcity = 5000,
clust_num_ores = 12,
clust_size = 4,
y_min = vl_biomes.overworld_min,
y_max = vl_biomes.overworld_max,
noise_threshold = 0.2,
noise_params = {offset = 0, scale = 5, spread = vector.new(250, 250, 250), seed = 64, octaves = 3, persist = 0.60},
biomes = {"ExtremeHillsM"},
})
-- Large oaks
for i = 1, 4 do
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 80,
noise_params = {
offset = -0.0007,
scale = 0.001,
spread = vector.new(250, 250, 250),
seed = 3,
octaves = 3,
persist = 0.6
},
biomes = {"ExtremeHillsM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_large_" .. i .. ".mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
end
-- Small “classic” oak (many biomes)
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
place_on = {"group:grass_block", "mcl_core:dirt", },
sidelen = 16,
noise_params = {
offset = 0.0,
scale = 0.002,
spread = vector.new(250, 250, 250),
seed = 2,
octaves = 3,
persist = 0.7
},
biomes = {"ExtremeHillsM"},
y_min = 1,
y_max = vl_biomes.overworld_max,
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
flags = "place_center_x, place_center_z",
rotation = "random",
})
-- Spruce
vl_biomes.register_spruce_decoration(11000, 0.000025, "mcl_core_spruce_5.mts", {"ExtremeHillsM"})
vl_biomes.register_spruce_decoration(2500, 0.00005, "mcl_core_spruce_1.mts", {"ExtremeHillsM"})
vl_biomes.register_spruce_decoration(7000, 0.00005, "mcl_core_spruce_3.mts", {"ExtremeHillsM"})
vl_biomes.register_spruce_decoration(9000, 0.00005, "mcl_core_spruce_4.mts", {"ExtremeHillsM"})