Compare commits

...

4 Commits

Author SHA1 Message Date
kno10 b0481c2df5 polishing 2024-10-24 22:44:22 +02:00
kno10 6577f54736 use mcl_util function 2024-10-24 17:10:23 +02:00
kno10 59f1c25296 template specialization for param2 2024-10-24 17:09:49 +02:00
kno10 ca5f2b51c6 Split biomes into separate files. 2024-10-24 12:42:44 +02:00
65 changed files with 6120 additions and 6013 deletions

View File

@ -11,20 +11,6 @@ mcl_flowers.registered_simple_flowers = {}
local smallflowerlongdesc = S("This is a small flower. Small flowers are mainly used for dye production and can also be potted.")
local plant_usage_help = S("It can only be placed on a block on which it would also survive.")
local get_palette_color_from_pos = function(pos)
local biome_data = minetest.get_biome_data(pos)
local index = 0
if biome_data then
local biome = biome_data.biome
local biome_name = minetest.get_biome_name(biome)
local reg_biome = minetest.registered_biomes[biome_name]
if reg_biome then
index = reg_biome._mcl_grass_palette_index
end
end
return index
end
-- on_place function for flowers
local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, node, itemstack)
local below = {x=pos.x, y=pos.y-1, z=pos.z}
@ -32,13 +18,7 @@ local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos,
if not soil_node then return false end
local has_palette = minetest.registered_nodes[itemstack:get_name()].palette ~= nil
local colorize
if has_palette then
colorize = get_palette_color_from_pos(pos)
end
if not colorize then
colorize = 0
end
local colorize = has_palette and mcl_util.get_palette_indexes_from_pos(pos).grass_palette_index or 0
--[[ Placement requirements:
* Dirt or grass block
@ -47,10 +27,7 @@ local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos,
]]
local light_night = minetest.get_node_light(pos, 0.0)
local light_day = minetest.get_node_light(pos, 0.5)
local light_ok = false
if (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX) then
light_ok = true
end
local light_ok = (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX)
if itemstack:get_name() == "mcl_flowers:wither_rose" and ( minetest.get_item_group(soil_node.name, "grass_block") > 0 or soil_node.name == "mcl_core:dirt" or soil_node.name == "mcl_core:coarse_dirt" or soil_node.name == "mcl_mud:mud" or soil_node.name == "mcl_moss:moss" or soil_node.name == "mcl_nether:netherrack" or minetest.get_item_group(soil_node.name, "soul_block") > 0 ) then
return true,colorize
end
@ -359,10 +336,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
-- * Only with light level >= 8
-- * Only if two enough space
if (floor.name == "mcl_core:dirt" or minetest.get_item_group(floor.name, "grass_block") == 1 or (not is_flower and (floor.name == "mcl_core:coarse_dirt" or floor.name == "mcl_core:podzol" or floor.name == "mcl_core:podzol_snow"))) and bottom_buildable and top_buildable and light_ok then
local param2
if grass_color then
param2 = get_palette_color_from_pos(bottom)
end
local param2 = grass_color and mcl_util.get_palette_indexes_from_pos(bottom).grass_palette_index
-- Success! We can now place the flower
minetest.sound_play(minetest.registered_nodes[itemstring].sounds.place, {pos = bottom, gain=1}, true)
minetest.set_node(bottom, {name=itemstring, param2=param2})

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -148,16 +148,39 @@ end
local pending_decorations = {}
local gennotify_map = {}
function mcl_mapgen_core.register_decoration(def, callback)
def = table.copy(def) -- defensive deep copy, needed for water lily
if def.gen_callback and not def.name then error("gen_callback requires a named decoration.") end
if callback then error("Callbacks have been redesigned.") end
-- customize foliage colors
if (def._mcl_foliage_palette_index or 0) > 0 then
if type(def.schematic) ~= "string" then error("Can currently only be used with file schematics.") end
-- Load the schema and apply foliage palette
local schem = minetest.read_schematic(def.schematic, {})
schem.name = def.schematic -- preserve the file name
local cache = {}
for _, node in ipairs(schem.data) do
local kind = cache[node.name]
if kind == nil then
local ndef = minetest.registered_nodes[node.name]
kind = ndef and (ndef.groups.foliage_palette and "color")
or (ndef.groups.foliage_palette_wallmounted and "colorwallmounted")
or false
cache[node.name] = kind
end
if kind == "color" then
node.param2 = def._mcl_foliage_palette_index
elseif kind == "colorwallmounted" then
node.param2 = def._mcl_foliage_palette_index * 8 + (node.param2 % 8)
end
end
def.schematic = schem
end
if pending_decorations == nil then
minetest.log("warning", "Decoration registered after mapgen core initialization: "..tostring(def.name))
minetest.register_decoration(def)
if def.gen_callback then
def.deco_id = minetest.get_decoration_id(def.name)
if not def.deco_id then
error("Failed to get the decoration id for "..tostring(key))
error("Failed to get the decoration id for "..tostring(def.name))
else
minetest.set_gen_notify({decoration = true}, {def.deco_id})
gennotify_map["decoration#" .. def.deco_id] = def
@ -177,6 +200,10 @@ local function sort_decorations()
local sc = string.split(def.schematic, "/")
name = string.format("%s:%04d", sc[#sc], i)
end
if not name and type(def.schematic) == "table" and def.schematic.name then
local sc = string.split(def.schematic.name, "/")
name = string.format("%s:%04d", sc[#sc], i)
end
if not name and type(def.schematic) == "table" and def.schematic.data then
name = ""
for _, v in ipairs(def.schematic.data) do
@ -193,15 +220,19 @@ local function sort_decorations()
table.sort(keys)
for _, key in ipairs(keys) do
local def = map[key]
if def.name and minetest.get_decoration_id(def.name) then
minetest.log("warning", "Decoration ID not unique: "..def.name)
end
local deco_id = minetest.register_decoration(def)
if not deco_id then
error("Failed to register decoration"..tostring(key))
error("Failed to register decoration "..tostring(def.name).." - name not unique?")
end
if def.gen_callback then
if def.name then
deco_id = minetest.get_decoration_id(def.name)
if not deco_id then
error("Failed to get the decoration id for "..tostring(key))
else
error("Failed to register decoration "..tostring(def.name).." - name not unique?")
end
if def.gen_callback then
minetest.set_gen_notify({decoration = true}, {deco_id})
gennotify_map["decoration#" .. deco_id] = def
end

View File

@ -285,6 +285,7 @@ local function set_water_palette(minp,maxp,data2,area,nodes)
local biomemap = minetest.get_mapgen_object("biomemap")
if not biomemap then return end
local aream = VoxelArea(vector.new(minp.x, 0, minp.z), vector.new(maxp.x, 0, maxp.z))
-- FIXME: this relies on the voxelmanip already being written.
local nodes = minetest.find_nodes_in_area(minp, maxp, nodes)
local lvm_used = false
for n=1, #nodes do
@ -303,6 +304,7 @@ local function set_water_palette(minp,maxp,data2,area,nodes)
return lvm_used
end
--[[
local function set_seagrass_param2(minp,maxp,data2,area,nodes)
local nodes = minetest.find_nodes_in_area(minp, maxp, nodes)
local lvm_used = false
@ -313,6 +315,7 @@ local function set_seagrass_param2(minp,maxp,data2,area,nodes)
end
return lvm_used
end
]]
-- Below the bedrock, generate air/void
local function world_structure(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
@ -367,17 +370,19 @@ local function world_structure(vm, data, data2, emin, emax, area, minp, maxp, bl
return lvm_used, lvm_used, deco, ores
end
--[[ replaced with decoration hack to replace grass nodes
local function block_fixes_grass(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
-- Set param2 (=color) of nodes which use the grass colour palette.
return minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min and
set_grass_palette(minp,maxp,data2,area,{"group:grass_palette"})
end
end]]
--[[ replaced with schematic specialization per biome
local function block_fixes_foliage(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
-- Set param2 (=color) of nodes which use the foliage colour palette.
return minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min and
set_foliage_palette(minp,maxp,data2,area,{"group:foliage_palette", "group:foliage_palette_wallmounted"})
end
end]]
local function block_fixes_water(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
-- Set param2 (=color) of nodes which use the water colour palette.
@ -385,11 +390,13 @@ local function block_fixes_water(vm, data, data2, emin, emax, area, minp, maxp,
set_water_palette(minp,maxp,data2,area,{"group:water_palette"})
end
--[[ no longer necessary, we generate them with param2=3
local function block_fixes_seagrass(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
-- Set param2 of seagrass to 3.
return minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min and
set_seagrass_param2(minp, maxp, data2, area, {"group:seagrass"})
end
]]
-- End block fixes:
local function end_basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
@ -412,10 +419,10 @@ mcl_mapgen_core.register_generator("world_structure", world_structure, nil, 1, t
mcl_mapgen_core.register_generator("end_fixes", end_basic, nil, 9999, true)
if mg_name ~= "v6" and mg_name ~= "singlenode" then
mcl_mapgen_core.register_generator("block_fixes_grass", block_fixes_grass, nil, 9999, true)
mcl_mapgen_core.register_generator("block_fixes_foliage", block_fixes_foliage, nil, 9999, true)
-- replaced with decoration hack: mcl_mapgen_core.register_generator("block_fixes_grass", block_fixes_grass, nil, 9999, true)
-- replaced with schema specialization: mcl_mapgen_core.register_generator("block_fixes_foliage", block_fixes_foliage, nil, 9999, true)
mcl_mapgen_core.register_generator("block_fixes_water", block_fixes_water, nil, 9999, true)
mcl_mapgen_core.register_generator("block_fixes_seagrass", block_fixes_seagrass, nil, 9999, true)
-- replaced with using param2=3 during generation mcl_mapgen_core.register_generator("block_fixes_seagrass", block_fixes_seagrass, nil, 9999, true)
end
if mg_name == "v6" then
@ -423,6 +430,7 @@ if mg_name == "v6" then
end
-- still needed?
--[[
minetest.register_lbm({
label = "Fix grass palette indexes", -- This LBM fixes any incorrect grass palette indexes.
name = "mcl_mapgen_core:fix_grass_palette_indexes",
@ -435,8 +443,9 @@ minetest.register_lbm({
minetest.swap_node(pos, node)
end
end
})
})]]
--[[ FIXME: not yet replaced
minetest.register_lbm({
label = "Fix foliage palette indexes", -- Set correct palette indexes of foliage in old mapblocks.
name = "mcl_mapgen_core:fix_foliage_palette_indexes",
@ -490,8 +499,10 @@ minetest.register_lbm({
end
end
})
]]--
--[[ No longer necessary? Ugly?
-- Can we get rid of this ugly hack?
--[[
-- We go outside x and y for where trees are placed next to a biome that has already been generated.
-- We go above maxp.y because trees can often get placed close to the top of a generated area and folliage may not
-- be coloured correctly.

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,112 @@
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",
_mcl_foliage_palette_index = 4,
})

View File

@ -0,0 +1,188 @@
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",
_mcl_foliage_palette_index = 4,
})

View File

@ -0,0 +1,69 @@
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",
_mcl_foliage_palette_index = 12,
})
-- 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,60 @@
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",
_mcl_foliage_palette_index = 13,
})
-- 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,88 @@
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_foliage_palette_index = 12,
})
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",
_mcl_foliage_palette_index = 12,
})
-- 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,85 @@
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_foliage_palette_index = 13,
})
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",
_mcl_foliage_palette_index = 13,
})
-- 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,70 @@
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_foliage_palette_index = 8,
})
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,
_mcl_foliage_palette_index = 8,
})

View File

@ -0,0 +1,71 @@
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_foliage_palette_index = 8,
})
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,
_mcl_foliage_palette_index = 8,
})

View File

@ -0,0 +1,108 @@
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",
_mcl_foliage_palette_index = 7,
})
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,167 @@
-- 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 = table.copy(vl_biomes.by_water_temp.warm)
for _, v in ipairs(vl_biomes.by_water_temp.lukewarm) do table.insert(warm_oceans, v) end
--minetest.log("action", "Warm oceans: "..dump(warm_oceans,""))
-- 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",
spawn_by = "mcl_core:water_source",
check_offset = 1,
num_spawn_by = 12,
})
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",
spawn_by = "mcl_core:water_source",
check_offset = 1,
num_spawn_by = 12,
})
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,
spawn_by = "mcl_core:water_source",
check_offset = 1,
num_spawn_by = 12,
})
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",
spawn_by = "mcl_core:water_source",
check_offset = 1,
num_spawn_by = 12,
name = "CORAl",
gen_callback = function(pos) minetest.log("action", "CORAl at ".. dump(pos, "")) end
})

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,146 @@
-- Large flowers
local function register_large_flower(name, biomes, seed, offset)
local ndef = minetest.registered_nodes["mcl_flowers:"..name]
local has_param2 = ndef and ndef.groups.grass_palette
local tdef = minetest.registered_nodes["mcl_flowers:"..name]
local thas_param2 = tdef and tdef.groups.grass_palette
if has_param2 then
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
local tparam2 = thas_param2 and param2 or nil
mcl_mapgen_core.register_decoration({
deco_type = "schematic",
schematic = {
size = vector.new(1, 2, 1),
data = {
{name = "mcl_flowers:" .. name, param2 = param2 },
{name = "mcl_flowers:" .. name .. "_top", param2 = tparam2 },
},
},
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[b]},
})
end
else
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
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)
local ndef = minetest.registered_nodes["mcl_flowers:"..name]
local has_param2 = ndef and ndef.groups.grass_palette
if has_param2 then
for b = 1, #biomes do
local param2 = minetest.registered_biomes[biomes[b]]._mcl_grass_palette_index
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[b]},
decoration = "mcl_flowers:" .. name,
param2 = param2
})
end
else
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
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,50 @@
-- Sugar canes
for _, biome in ipairs(vl_biomes.overworld_biomes) do
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", "mclx_core:river_water_source", "group:frosted_ice"},
num_spawn_by = 1,
biomes = {biome},
param2 = biome._mcl_foliage_palette_index
})
end
-- additional reeds in swamps
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,
param2 = 5 -- Swampland foliage palette index
})

View File

@ -0,0 +1,174 @@
-- TODO: move to mcl_ocean with a late registration (when biomes are registered)?
local function register_seagrass_decoration(offset, scale, biomes)
local surfaces = {"mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel", "mcl_core:redsand"}
local nodes = {"mcl_ocean:seagrass_dirt", "mcl_ocean:seagrass_sand", "mcl_ocean:seagrass_gravel", "mcl_ocean:seagrass_redsand"}
for s = 1, #surfaces do
mcl_mapgen_core.register_decoration({
name = "Seagrass on "..surfaces[s],
deco_type = "simple",
priority = 1500,
place_on = {surfaces[s]},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(100, 100, 100),
seed = 16,
octaves = 3,
persist = 0.6,
},
biomes = biomes,
y_min = vl_biomes.DEEP_OCEAN_MIN,
y_max = 0,
decoration = nodes[s],
--param2 = 3, -- always use meshoption 3
param2 = 0,
param2_max = 3,
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(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",
})
local function register_kelp_decoration(offset, scale, biomes)
local surfaces = {"mcl_core:dirt", "mcl_core:sand", "mcl_core:gravel"}
local nodes = {"mcl_ocean:kelp_dirt", "mcl_ocean:kelp_sand", "mcl_ocean:kelp_gravel"}
for s = 1, #surfaces do
mcl_mapgen_core.register_decoration({
name = "Kelp on "..surfaces[s],
deco_type = "simple",
priority = 1500,
place_on = {surfaces[s]},
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = vector.new(100, 100, 100),
seed = 32,
octaves = 3,
persist = 0.6,
},
biomes = biomes,
y_min = vl_biomes.DEEP_OCEAN_MIN,
y_max = -6,
decoration = nodes[s],
param2 = 16,
param2_max = 96, -- height * 16
place_offset_y = -1,
flags = "force_placement",
})
end
end
register_kelp_decoration(-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,174 @@
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",
_mcl_foliage_palette_index = 7,
})
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_foliage_palette_index = 7,
})
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,
_mcl_foliage_palette_index = 7,
})
-- 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",
_mcl_foliage_palette_index = 7,
})
-- 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_foliage_palette_index = 7,
})
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,
_mcl_foliage_palette_index = 7,
})

View File

@ -0,0 +1,103 @@
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_foliage_palette_index = 7,
})
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,
_mcl_foliage_palette_index = 7,
})
-- 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",
_mcl_foliage_palette_index = 7,
})

View File

@ -0,0 +1,385 @@
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 = {}
vl_biomes.overworld_biomes = {}
-- TODO: also add a list of nether and end biomes
-- Fix the grass color via decoration mechanism,
-- by replacing node_top with node_top and param2 set
-- TODO: this can be removed when param2 support to biomes is added
-- <https://github.com/minetest/minetest/issues/15319>
vl_biomes.fix_grass_color = function(def)
if (def._mcl_grass_palette_index or 0) == 0 then return end -- not necessary
-- for now, only support node_top.
local name = def.node_top
local ndef = minetest.registered_nodes[name]
if ndef and (ndef.groups.grass_palette or 0) ~= 0 and ndef.paramtype2 == "color" then -- no mixed types
local param2 = def._mcl_grass_palette_index
mcl_mapgen_core.register_decoration({
name = "Set "..name.." param2 in "..def.name,
priority = 10, -- run early to not modify other decorations
deco_type = "simple",
place_on = {name},
biomes = { def.name },
y_min = def.y_min or vl_biomes.overworld_min,
y_max = def.y_max or vl_biomes.overworld_max,
fill_ratio = 10, -- everything
decoration = name,
param2 = param2,
flags = "force_placement",
place_offset_y = -1, -- replace the node itself
})
end
end
-- 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 and def._mcl_water_temp then odef._mcl_water_temp = def._mcl_water_temp 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 vl_biomes.by_water_temp[temp] == nil then vl_biomes.by_water_temp[temp] = {} end
table.insert(vl_biomes.by_water_temp[temp], sdef.name)
end
end
minetest.register_biome(def)
if is_overworld and def.y_max > 0 then table.insert(vl_biomes.overworld_biomes, def.name) end
vl_biomes.fix_grass_color(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)
if is_overworld and sdef.y_max > 0 then -- omit _ocean
table.insert(vl_biomes.overworld_biomes, sdef.name)
end
vl_biomes.fix_grass_color(sdef) -- usually a no-op
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",
-- not supported by spruceleaves: _mcl_foliage_palette_index = foliage_color,
})
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,181 @@
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",
_mcl_foliage_palette_index = 12,
})
-- 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",
_mcl_foliage_palette_index = 12,
})
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_foliage_palette_index = 12,
})
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_foliage_palette_index = 12,
})
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_foliage_palette_index = 12,
})
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",
_mcl_foliage_palette_index = 12,
})
-- 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_foliage_palette_index = 12,
})
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",
_mcl_foliage_palette_index = 12,
})
-- 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,96 @@
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_foliage_palette_index = 13,
})
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_foliage_palette_index = 13,
})
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",
_mcl_foliage_palette_index = 13,
})
-- 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,119 @@
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",
_mcl_foliage_palette_index = 12,
})
-- 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",
_mcl_foliage_palette_index = 12,
})
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_foliage_palette_index = 12,
})
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",
_mcl_foliage_palette_index = 12,
})
-- 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,116 @@
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_foliage_palette_index = 13,
})
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_foliage_palette_index = 13,
})
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",
_mcl_foliage_palette_index = 13,
})
-- 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,213 @@
-- 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_foliage_palette_index = 6,
})
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_foliage_palette_index = 6,
})
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_foliage_palette_index = 6,
})
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_foliage_palette_index = 6,
})
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_foliage_palette_index = 6,
})
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_foliage_palette_index = 6,
})
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,67 @@
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 = {"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",
_mcl_foliage_palette_index = 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 = {"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",
_mcl_foliage_palette_index = 3,
})
end

View File

@ -0,0 +1,46 @@
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",
_mcl_foliage_palette_index = 3,
})
end

View File

@ -0,0 +1,104 @@
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",
_mcl_foliage_palette_index = 2,
})
-- 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",
-- not supported by spruce leaves _mcl_foliage_palette_index = 2,
})
-- 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, param2 = 10 },
{name = "mcl_flowers:tallgrass", param2 = 10},
},
},
place_y_offset = -1,
})

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,104 @@
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",
-- not supported by spruce leaves _mcl_foliage_palette_index = 2,
})
-- 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",
-- not supported by spruce leaves _mcl_foliage_palette_index = 2,
})
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,97 @@
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",
_mcl_foliage_palette_index = 5,
})
-- 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 = table.copy(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,108 @@
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",
-- not supported by spruce leaves _mcl_foliage_palette_index = 10,
})
-- 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",
-- not supported by spruce leaves _mcl_foliage_palette_index = 10,
})
-- 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,137 @@
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,92 @@
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",
_mcl_foliage_palette_index = 11,
})
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",
_mcl_foliage_palette_index = 11,
})
-- 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,139 @@
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",
_mcl_foliage_palette_index = 11,
})
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_foliage_palette_index = 11,
})
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",
_mcl_foliage_palette_index = 11,
})
-- 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, param2 = 8 },
{name = "mcl_flowers:tallgrass", param2 = 8},
},
},
})

View File

@ -0,0 +1,95 @@
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",
_mcl_foliage_palette_index = 11,
})
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",
_mcl_foliage_palette_index = 11,
})
-- 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"})