forked from Mineclonia/Mineclonia
mcl_mapgen_core: Put all mapgen code into single on_generated
This fixes some mapgen race conditions
This commit is contained in:
parent
06256f068b
commit
24abe81409
|
@ -969,12 +969,8 @@ end
|
||||||
local perlin_structures
|
local perlin_structures
|
||||||
local perlin_vines, perlin_vines_fine, perlin_vines_upwards, perlin_vines_length, perlin_vines_density
|
local perlin_vines, perlin_vines_fine, perlin_vines_upwards, perlin_vines_length, perlin_vines_density
|
||||||
|
|
||||||
-- Generate clay and structures
|
-- TODO: Try to use more efficient clay generating code
|
||||||
-- TODO: Try to use more efficient structure generating code
|
local function generate_clay(minp, maxp, seed)
|
||||||
minetest.register_on_generated(function(minp, maxp, seed)
|
|
||||||
local chunk_has_desert_well = false
|
|
||||||
local chunk_has_desert_temple = false
|
|
||||||
local chunk_has_igloo = false
|
|
||||||
if maxp.y >= 2 and minp.y <= 0 then
|
if maxp.y >= 2 and minp.y <= 0 then
|
||||||
-- Generate clay
|
-- Generate clay
|
||||||
-- Assume X and Z lengths are equal
|
-- Assume X and Z lengths are equal
|
||||||
|
@ -1012,9 +1008,16 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
-- TODO: Try to use more efficient structure generating code
|
||||||
|
local function generate_structures(minp, maxp, seed, biomemap)
|
||||||
|
local chunk_has_desert_well = false
|
||||||
|
local chunk_has_desert_temple = false
|
||||||
|
local chunk_has_igloo = false
|
||||||
local struct_min, struct_max = -3, 64
|
local struct_min, struct_max = -3, 64
|
||||||
if maxp.y >= struct_min and minp.y <= struct_max then
|
if maxp.y >= struct_min and minp.y <= struct_max then
|
||||||
local biomemap = minetest.get_mapgen_object("biomemap")
|
|
||||||
-- Generate structures
|
-- Generate structures
|
||||||
|
|
||||||
perlin_structures = perlin_structures or minetest.get_perlin(329, 3, 0.6, 100)
|
perlin_structures = perlin_structures or minetest.get_perlin(329, 3, 0.6, 100)
|
||||||
|
@ -1243,7 +1246,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end
|
||||||
|
|
||||||
-- Buffer for LuaVoxelManip
|
-- Buffer for LuaVoxelManip
|
||||||
local lvm_buffer = {}
|
local lvm_buffer = {}
|
||||||
|
@ -1252,7 +1255,7 @@ local lvm_buffer = {}
|
||||||
-- * Cocoa at jungle trees
|
-- * Cocoa at jungle trees
|
||||||
-- * Jungle tree vines
|
-- * Jungle tree vines
|
||||||
-- * Oak vines in swamplands
|
-- * Oak vines in swamplands
|
||||||
local function generate_tree_decorations(minp, maxp, biomemap)
|
local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
||||||
if maxp.y < 0 then
|
if maxp.y < 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -1415,7 +1418,7 @@ end
|
||||||
local pr_shroom = PseudoRandom(os.time()-24359)
|
local pr_shroom = PseudoRandom(os.time()-24359)
|
||||||
-- Generate mushrooms in caves manually.
|
-- Generate mushrooms in caves manually.
|
||||||
-- Minetest's API does not support decorations in caves yet. :-(
|
-- Minetest's API does not support decorations in caves yet. :-(
|
||||||
local generate_underground_mushrooms = function(minp, maxp)
|
local generate_underground_mushrooms = function(minp, maxp, seed)
|
||||||
-- Generate rare underground mushrooms
|
-- Generate rare underground mushrooms
|
||||||
-- TODO: Make them appear in groups, use Perlin noise
|
-- TODO: Make them appear in groups, use Perlin noise
|
||||||
local min, max = mcl_vars.mg_lava_overworld_max + 4, 0
|
local min, max = mcl_vars.mg_lava_overworld_max + 4, 0
|
||||||
|
@ -1442,7 +1445,7 @@ end
|
||||||
local pr_nether = PseudoRandom(os.time()+667)
|
local pr_nether = PseudoRandom(os.time()+667)
|
||||||
-- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart
|
-- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart
|
||||||
-- Minetest's API does not support decorations in caves yet. :-(
|
-- Minetest's API does not support decorations in caves yet. :-(
|
||||||
local generate_nether_decorations = function(minp, maxp)
|
local generate_nether_decorations = function(minp, maxp, seed)
|
||||||
if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then
|
if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -1526,7 +1529,7 @@ local c_snow_block = minetest.get_content_id("mcl_core:snowblock")
|
||||||
local c_air = minetest.get_content_id("air")
|
local c_air = minetest.get_content_id("air")
|
||||||
|
|
||||||
-- Below the bedrock, generate air/void
|
-- Below the bedrock, generate air/void
|
||||||
minetest.register_on_generated(function(minp, maxp)
|
minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||||
local data = vm:get_data(lvm_buffer)
|
local data = vm:get_data(lvm_buffer)
|
||||||
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
|
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
|
||||||
|
@ -1762,9 +1765,11 @@ minetest.register_on_generated(function(minp, maxp)
|
||||||
local biomemap = minetest.get_mapgen_object("biomemap")
|
local biomemap = minetest.get_mapgen_object("biomemap")
|
||||||
|
|
||||||
-- Generate special decorations
|
-- Generate special decorations
|
||||||
generate_underground_mushrooms(minp, maxp)
|
generate_clay(minp, maxp, seed)
|
||||||
generate_tree_decorations(minp, maxp, biomemap)
|
generate_underground_mushrooms(minp, maxp, seed)
|
||||||
generate_nether_decorations(minp, maxp)
|
generate_tree_decorations(minp, maxp, seed, biomemap)
|
||||||
|
generate_nether_decorations(minp, maxp, seed)
|
||||||
|
generate_structures(minp, maxp, seed, biomemap)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue