Allow to use Minetest's original flat mapgen again

This commit is contained in:
Wuzzy 2019-02-09 02:42:11 +01:00
parent 3ba4aabbcf
commit 3ec7914962
5 changed files with 57 additions and 45 deletions

@ -11,7 +11,10 @@ mcl_vars.inventory_header = mcl_vars.gui_slots .. mcl_vars.gui_bg
-- Mapgen variables -- Mapgen variables
local mg_name = minetest.get_mapgen_setting("mg_name") local mg_name = minetest.get_mapgen_setting("mg_name")
local minecraft_height_limit = 256 local minecraft_height_limit = 256
if mg_name ~= "flat" then local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
if not superflat then
-- Normal mode
--[[ Realm stacking (h is for height) --[[ Realm stacking (h is for height)
- Overworld (h>=256) - Overworld (h>=256)
- Void (h>=1000) - Void (h>=1000)
@ -32,17 +35,13 @@ if mg_name ~= "flat" then
mcl_vars.mg_bedrock_is_rough = true mcl_vars.mg_bedrock_is_rough = true
else else
-- Classic superflat
local ground = minetest.get_mapgen_setting("mgflat_ground_level") local ground = minetest.get_mapgen_setting("mgflat_ground_level")
ground = tonumber(ground) ground = tonumber(ground)
if not ground then if not ground then
ground = 8 ground = 8
end end
-- 1 perfectly flat bedrock layer mcl_vars.mg_overworld_min = ground - 3
if minetest.get_mapgen_setting("mcl_superflat_classic") == "false" then
mcl_vars.mg_overworld_min = -30912
else
mcl_vars.mg_overworld_min = ground - 3
end
mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min
@ -58,14 +57,24 @@ mcl_vars.mg_nether_min = -29067 -- Carefully chosen to be at a mapchunk border
mcl_vars.mg_nether_max = mcl_vars.mg_nether_min + 128 mcl_vars.mg_nether_max = mcl_vars.mg_nether_min + 128
mcl_vars.mg_bedrock_nether_bottom_min = mcl_vars.mg_nether_min mcl_vars.mg_bedrock_nether_bottom_min = mcl_vars.mg_nether_min
mcl_vars.mg_bedrock_nether_top_max = mcl_vars.mg_nether_max mcl_vars.mg_bedrock_nether_top_max = mcl_vars.mg_nether_max
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31 if not superflat then
if mg_name ~= "flat" then
mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min + 4 mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min + 4
mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - 4 mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - 4
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31
else else
-- Thin bedrock in flat mapgen -- Thin bedrock in classic superflat mapgen
mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min
mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 2
end
if mg_name == "flat" then
if superflat then
mcl_vars.mg_flat_nether_floor = mcl_vars.mg_bedrock_nether_bottom_max + 4
mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_bedrock_nether_bottom_max + 52
else
mcl_vars.mg_flat_nether_floor = mcl_vars.mg_lava_nether_max + 4
mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_lava_nether_max + 52
end
end end
-- The End (surface at ca. Y = -27000) -- The End (surface at ca. Y = -27000)

@ -13,6 +13,7 @@ local TELEPORT_DELAY = 3 -- seconds before teleporting in Nether portal
local TELEPORT_COOLOFF = 4 -- after object was teleported, for this many seconds it won't teleported again local TELEPORT_COOLOFF = 4 -- after object was teleported, for this many seconds it won't teleported again
local mg_name = minetest.get_mapgen_setting("mg_name") local mg_name = minetest.get_mapgen_setting("mg_name")
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
-- 3D noise -- 3D noise
local np_cave = { local np_cave = {
@ -187,7 +188,7 @@ end
local function find_nether_target_y(target_x, target_z) local function find_nether_target_y(target_x, target_z)
if mg_name == "flat" then if mg_name == "flat" then
return mcl_vars.mg_bedrock_nether_bottom_max + 5 return mcl_vars.mg_flat_nether_floor + 1
end end
local start_y = math.random(mcl_vars.mg_lava_nether_max + 1, mcl_vars.mg_bedrock_nether_top_min - 5) -- Search start local start_y = math.random(mcl_vars.mg_lava_nether_max + 1, mcl_vars.mg_bedrock_nether_top_min - 5) -- Search start
if not nobj_cave then if not nobj_cave then
@ -330,8 +331,15 @@ function mcl_portals.light_nether_portal(pos)
local target = {x = p1.x, y = p1.y, z = p1.z} local target = {x = p1.x, y = p1.y, z = p1.z}
target.x = target.x + 1 target.x = target.x + 1
if target.y < mcl_vars.mg_nether_max and target.y > mcl_vars.mg_nether_min then if target.y < mcl_vars.mg_nether_max and target.y > mcl_vars.mg_nether_min then
if mg_name == "flat" then if superflat then
target.y = mcl_vars.mg_bedrock_overworld_max + 5 target.y = mcl_vars.mg_bedrock_overworld_max + 5
elseif mg_name == "flat" then
local ground = minetest.get_mapgen_setting("mgflat_ground_level")
ground = tonumber(ground)
if not ground then
ground = 8
end
target.y = ground + 2
else else
target.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96) target.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96)
end end

@ -2,6 +2,7 @@ local mg_name = minetest.get_mapgen_setting("mg_name")
-- Some mapgen settings -- Some mapgen settings
local imitate = minetest.settings:get("mcl_imitation_mode") local imitate = minetest.settings:get("mcl_imitation_mode")
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
local generate_fallen_logs = false local generate_fallen_logs = false
@ -3209,7 +3210,7 @@ end
-- Detect mapgen to select functions -- Detect mapgen to select functions
-- --
if mg_name ~= "singlenode" then if mg_name ~= "singlenode" then
if mg_name ~= "flat" then if not superflat then
if mg_name ~= "v6" then if mg_name ~= "v6" then
register_biomes() register_biomes()
register_biomelike_ores() register_biomelike_ores()
@ -3219,7 +3220,9 @@ if mg_name ~= "singlenode" then
register_decorations() register_decorations()
end end
else else
-- Implementation of Minecraft's Superflat mapgen, classic style -- 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_biomes()
minetest.clear_registered_decorations() minetest.clear_registered_decorations()
minetest.clear_registered_schematics() minetest.clear_registered_schematics()

@ -44,6 +44,7 @@ minetest.register_alias("mapgen_stair_sandstone_block", "mcl_stairs:stair_sandst
minetest.register_alias("mapgen_stair_desert_stone", "mcl_stairs:stair_sandstone") minetest.register_alias("mapgen_stair_desert_stone", "mcl_stairs:stair_sandstone")
local mg_name = minetest.get_mapgen_setting("mg_name") local mg_name = minetest.get_mapgen_setting("mg_name")
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
local WITCH_HUT_HEIGHT = 3 -- Exact Y level to spawn witch huts at. This height refers to the height of the floor local WITCH_HUT_HEIGHT = 3 -- Exact Y level to spawn witch huts at. This height refers to the height of the floor
@ -550,8 +551,7 @@ minetest.register_ore({
y_max = mcl_worlds.layer_to_y(32), y_max = mcl_worlds.layer_to_y(32),
}) })
if mg_name ~= "flat" then if not superflat then
-- Water and lava springs (single blocks of lava/water source) -- Water and lava springs (single blocks of lava/water source)
-- Water appears at nearly every height, but not near the bottom -- Water appears at nearly every height, but not near the bottom
minetest.register_ore({ minetest.register_ore({
@ -622,13 +622,8 @@ minetest.register_ore({
y_min = mcl_worlds.layer_to_y(62), y_min = mcl_worlds.layer_to_y(62),
y_max = mcl_worlds.layer_to_y(127), y_max = mcl_worlds.layer_to_y(127),
}) })
end end
local function register_mgv6_decorations() local function register_mgv6_decorations()
-- Cacti -- Cacti
@ -951,20 +946,10 @@ end
if mg_name == "v6" then if mg_name == "v6" then
register_mgv6_decorations() register_mgv6_decorations()
minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true) minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true)
elseif mg_name == "flat" then elseif superflat then
local classic = minetest.get_mapgen_setting("mcl_superflat_classic") -- Enforce superflat-like mapgen: No hills, lakes or caves
if classic == nil then minetest.set_mapgen_setting("mg_flags", "nocaves,nodungeons,nodecorations,light", true)
classic = minetest.settings:get_bool("mcl_superflat_classic") minetest.set_mapgen_setting("mgflat_spflags", "nolakes,nohills", true)
minetest.set_mapgen_setting("mcl_superflat_classic", "true", true)
end
if classic ~= "false" then
-- Enforce superflat-like mapgen: No hills, lakes or caves
minetest.set_mapgen_setting("mg_flags", "nocaves,nodungeons,nodecorations,light", true)
minetest.set_mapgen_setting("mgflat_spflags", "nolakes,nohills", true)
else
-- If superflat mode is disabled, mapgen is way more liberal
minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,nodecorations,light", true)
end
else else
minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true) minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,decorations,light", true)
end end
@ -1731,7 +1716,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
-- Flat Nether -- Flat Nether
if mg_name == "flat" then if mg_name == "flat" then
lvm_used = set_layers(c_air, nil, mcl_vars.mg_bedrock_nether_bottom_max + 4, mcl_vars.mg_bedrock_nether_bottom_max + 52, minp, maxp, lvm_used) lvm_used = set_layers(c_air, nil, mcl_vars.mg_flat_nether_floor, mcl_vars.mg_flat_nether_ceiling, minp, maxp, lvm_used)
end end
-- Big lava seas by replacing air below a certain height -- Big lava seas by replacing air below a certain height

@ -95,17 +95,24 @@ flame_sound (Flame sound) bool true
# Feedback is appreciated. # Feedback is appreciated.
craftguide_progressive_mode (Enable recipe book progressive mode) bool false craftguide_progressive_mode (Enable recipe book progressive mode) bool false
# If enabled, the “flat” map generator generates a “classic” superflat map:
# Completely flat, 1 layer of grass blocks on top of 2 layers of dirt on
# top of a final layer of bedrock.
# Note if this is enabled, the setting “mgflat_flags” is ignored. To
# customize the “flat” map generator, you must disable this setting.
# Warning: Disabling this setting is currently EXPERIMENTAL! The generated map
# may not be that pretty.
mcl_superflat_classic (Classic superflat map generation) bool true
# Mobs difficulty. This is a number that will affect the initial and maximum # Mobs difficulty. This is a number that will affect the initial and maximum
# health and the amount of damage that mobs deal. Health and damage will # health and the amount of damage that mobs deal. Health and damage will
# be multiplied with this number. # be multiplied with this number.
# This feature is not finished yet! # This feature is not finished yet!
mob_difficulty (Mob difficulty factor) float 1.0 0.0 mob_difficulty (Mob difficulty factor) float 1.0 0.0
# If enabled, the “flat” map generator generates a Classic Superflat world:
# Completely flat, 1 layer of grass blocks on top of 2 layers of dirt on
# top of a final layer of bedrock. No caves, trees or plants.
# Also, if enabled, the setting “mgflat_flags” is ignored.
# If disabled, Minetest's default flat map generator is used, that is, trees,
# caves, and a deeper underground can be generated.
#
# Caution: Change this setting with care!
# If you change this setting, then play on an existing flat world
# that started with a different setting (e.g. you changed from superflat
# from “enabled” to “disabled”), there will be continuity errors when players
# reach new areas. Most importantly, the void is much higher in Superflat than
# in “normal” Flat.
# But creating new flat worlds after changing this setting should be safe.
mcl_superflat_classic (Classic superflat map generation) bool true