From 73957c46b279200222f524356b9e9cf28841fc08 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 23 Feb 2017 00:15:47 +0100 Subject: [PATCH] Partially re-implement Superflat --- mods/CORE/mcl_init/init.lua | 15 +++++++-- mods/MAPGEN/mcl_biomes/init.lua | 23 ++++++++++++-- mods/MAPGEN/mcl_mapgen_core/init.lua | 47 +++++++++++++++++----------- 3 files changed, 62 insertions(+), 23 deletions(-) diff --git a/mods/CORE/mcl_init/init.lua b/mods/CORE/mcl_init/init.lua index 01bcc8442..6c2a414e2 100644 --- a/mods/CORE/mcl_init/init.lua +++ b/mods/CORE/mcl_init/init.lua @@ -8,8 +8,19 @@ mcl_vars.gui_bg_img = "" mcl_vars.inventory_header = mcl_vars.gui_slots .. mcl_vars.gui_bg -mcl_vars.bedrock_overworld_min = -62 -mcl_vars.bedrock_overworld_max = -58 +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name ~= "flat" then + -- 1 flat bedrock layer with 4 rough layers above + mcl_vars.bedrock_overworld_min = -62 + mcl_vars.bedrock_overworld_max = mcl_vars.bedrock_overworld_min + 4 + mcl_vars.bedrock_is_rough = true +else + -- 1 perfectly flat bedrock layer + local ground = minetest.get_mapgen_setting("mgflat_ground_level") + mcl_vars.bedrock_overworld_min = ground - 3 + mcl_vars.bedrock_overworld_max = mcl_vars.bedrock_overworld_min + mcl_vars.bedrock_is_rough = false +end -- Set default stack sizes minetest.nodedef_default.stack_max = 64 diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 7342122e9..fc06e4589 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -1,11 +1,25 @@ -- --- Register biomes +-- Register biomes for mapgens other than v6 -- EXPERIMENTAL! -- --- All mapgens except mgv6 and singlenode +local function register_classic_superflat_biome() + -- 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 = 2, + y_min = 1, + y_max = 31000, + heat_point = 50, + humidity_point = 50, + }) +end +-- All mapgens except mgv6, flat and singlenode local function register_biomes() minetest.register_biome({ @@ -227,7 +241,10 @@ end -- Detect mapgen to select functions -- local mg_name = minetest.get_mapgen_setting("mg_name") -if mg_name ~= "v6" then +if mg_name ~= "v6" and mg_name ~= "flat" then register_biomes() register_decorations() +elseif mg_name == "flat" then + -- Implementation of Minecraft's Superflat mapgen, classic style + register_classic_superflat_biome() end diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 629385009..c6bafcfc2 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -466,7 +466,7 @@ minetest.register_on_generated(function(minp, maxp, seed) end) --- Generate 5 layers of bedrock, with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer +-- Generate bedrock layer or layers local BEDROCK_MIN = mcl_vars.bedrock_overworld_min local BEDROCK_MAX = mcl_vars.bedrock_overworld_max @@ -486,23 +486,34 @@ minetest.register_on_generated(function(minp, maxp) for z = minp.z, maxp.z do local p_pos = area:index(x, y, z) local setdata = nil - if y == BEDROCK_MAX then - -- 50% bedrock chance - if math.random(1,2) == 1 then setdata = c_bedrock end - elseif y == BEDROCK_MAX -1 then - -- 66.666...% - if math.random(1,3) <= 2 then setdata = c_bedrock end - elseif y == BEDROCK_MAX -2 then - -- 75% - if math.random(1,4) <= 3 then setdata = c_bedrock end - elseif y == BEDROCK_MAX -3 then - -- 90% - if math.random(1,10) <= 9 then setdata = c_bedrock end - elseif y == BEDROCK_MAX -4 then - -- 100% - setdata = c_bedrock - elseif y < BEDROCK_MIN then - setdata = c_void + if mcl_vars.bedrock_is_rough then + -- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer + -- This code assumes a bedrock height of 5 layers. + if y == BEDROCK_MAX then + -- 50% bedrock chance + if math.random(1,2) == 1 then setdata = c_bedrock end + elseif y == BEDROCK_MAX -1 then + -- 66.666...% + if math.random(1,3) <= 2 then setdata = c_bedrock end + elseif y == BEDROCK_MAX -2 then + -- 75% + if math.random(1,4) <= 3 then setdata = c_bedrock end + elseif y == BEDROCK_MAX -3 then + -- 90% + if math.random(1,10) <= 9 then setdata = c_bedrock end + elseif y == BEDROCK_MAX -4 then + -- 100% + setdata = c_bedrock + elseif y < BEDROCK_MIN then + setdata = c_void + end + else + -- Perfectly flat bedrock layer(s) + if y >= BEDROCK_MIN and y <= BEDROCK_MAX then + setdata = c_bedrock + elseif y < BEDROCK_MIN then + setdata = c_void + end end if setdata then data[p_pos] = setdata