Return the surface world.
This commit is contained in:
parent
0ad60d974b
commit
6f25d3c388
2 changed files with 178 additions and 202 deletions
99
init.lua
99
init.lua
|
@ -10,64 +10,45 @@ if not mobs or not mobs.mod then
|
|||
end
|
||||
|
||||
|
||||
--fun_caves.ores = {}
|
||||
|
||||
minetest.register_on_mapgen_init(function(mgparams)
|
||||
minetest.set_mapgen_params({mgname="singlenode", flags="nolight"})
|
||||
--minetest.set_mapgen_params({mgname="singlenode", flags="nolight"})
|
||||
minetest.set_mapgen_params({flags="nocaves,nodungeons"})
|
||||
|
||||
--local ores = {}
|
||||
--for id, ore_table in pairs(minetest.registered_ores) do
|
||||
-- local ore = table.copy(ore_table)
|
||||
-- local ore2 = table.copy(ore_table)
|
||||
-- table.insert(fun_caves.ores, ore2)
|
||||
-- ore.y_min = -31000
|
||||
-- ore.y_max = 31000
|
||||
-- table.insert(ores, ore)
|
||||
-- print(dump(ore))
|
||||
--end
|
||||
--minetest.clear_registered_ores()
|
||||
end)
|
||||
|
||||
|
||||
fun_caves.ores = {}
|
||||
if default then
|
||||
if default.register_ores then
|
||||
default.register_ores()
|
||||
end
|
||||
if default.register_blobs then
|
||||
default.register_blobs()
|
||||
end
|
||||
if default.register_biomes then
|
||||
default.register_biomes()
|
||||
end
|
||||
if default.register_decorations then
|
||||
default.register_decorations()
|
||||
end
|
||||
if flowers.register_decorations then
|
||||
flowers.register_decorations()
|
||||
end
|
||||
|
||||
local ores = {}
|
||||
for id, ore_table in pairs(minetest.registered_ores) do
|
||||
local ore = table.copy(ore_table)
|
||||
local ore2 = table.copy(ore_table)
|
||||
table.insert(fun_caves.ores, ore2)
|
||||
ore.y_min = -31000
|
||||
ore.y_max = 31000
|
||||
table.insert(ores, ore)
|
||||
end
|
||||
minetest.clear_registered_ores()
|
||||
|
||||
for _, ore in pairs(ores) do
|
||||
minetest.register_ore(ore)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function fun_caves.set_ores(biome)
|
||||
local ores = fun_caves.ores
|
||||
|
||||
--print("generating ores based on biome: "..biome)
|
||||
local y_factor = (math.abs(biome) - 0.4) * -2000
|
||||
--print("y_factor: "..y_factor)
|
||||
|
||||
minetest.clear_registered_ores()
|
||||
for id, ore_table in pairs(ores) do
|
||||
local ore = table.copy(ore_table)
|
||||
if ore.y_max >= y_factor then
|
||||
--print("using ore: "..ore.ore..", y_max: "..ore.y_max)
|
||||
ore.y_min = -31000
|
||||
ore.y_max = 31000
|
||||
minetest.register_ore(ore)
|
||||
end
|
||||
end
|
||||
end
|
||||
--function fun_caves.set_ores(biome, y)
|
||||
-- local ores = fun_caves.ores
|
||||
--
|
||||
-- --print("generating ores based on biome: "..biome)
|
||||
-- local y_factor = (math.abs(biome) - 0.4) * -2000
|
||||
-- --print("y_factor: "..y_factor)
|
||||
--
|
||||
-- minetest.clear_registered_ores()
|
||||
-- for id, ore_table in pairs(ores) do
|
||||
-- local ore = table.copy(ore_table)
|
||||
-- if ore.y_max >= y_factor and y <= ore.y_max then
|
||||
-- --if ore.y_max >= y_factor then
|
||||
-- --print("using ore: "..ore.ore..", y_max: "..ore.y_max)
|
||||
-- ore.y_min = -31000
|
||||
-- ore.y_max = 31000
|
||||
-- minetest.register_ore(ore)
|
||||
-- end
|
||||
-- end
|
||||
--end
|
||||
|
||||
|
||||
-- Check if the table contains an element.
|
||||
|
@ -130,12 +111,12 @@ dofile(fun_caves.path .. "/mapgen.lua")
|
|||
dofile(fun_caves.path .. "/mobs.lua")
|
||||
|
||||
|
||||
minetest.register_on_newplayer(fun_caves.respawn)
|
||||
minetest.register_on_respawnplayer(fun_caves.respawn)
|
||||
--minetest.register_on_newplayer(fun_caves.respawn)
|
||||
--minetest.register_on_respawnplayer(fun_caves.respawn)
|
||||
|
||||
-- Inserting helps to ensure that fun_caves operates first.
|
||||
table.insert(minetest.registered_on_generateds, 1, fun_caves.generate)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
player:set_sky("#000000", "plain", {})
|
||||
end)
|
||||
--minetest.register_on_joinplayer(function(player)
|
||||
-- player:set_sky("#000000", "plain", {})
|
||||
--end)
|
||||
|
|
29
mapgen.lua
29
mapgen.lua
|
@ -11,7 +11,7 @@ local node = fun_caves.node
|
|||
local data = {}
|
||||
local p2data = {} -- vm rotation data buffer
|
||||
local lightmap = {}
|
||||
local vm, emin, emax, area, csize
|
||||
local vm, emin, emax, area, noise_area, csize
|
||||
local div_sz_x, div_sz_z, minp, maxp, terrain, cave
|
||||
|
||||
if fun_caves.world then
|
||||
|
@ -162,8 +162,10 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
vm:get_data(data)
|
||||
--p2data = vm:get_param2_data()
|
||||
local heightmap = minetest.get_mapgen_object("heightmap")
|
||||
area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
|
||||
csize = vector.add(vector.subtract(maxp, minp), 1)
|
||||
noise_area = VoxelArea:new({MinEdge={x=0,y=0,z=0}, MaxEdge=vector.subtract(csize, 1)})
|
||||
|
||||
-- Deal with memory issues. This, of course, is supposed to be automatic.
|
||||
local mem = math.floor(collectgarbage("count")/1024)
|
||||
|
@ -188,24 +190,19 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
for x = minp.x, maxp.x do
|
||||
index = index + 1
|
||||
local dx = x - minp.x
|
||||
index3d = dz * csize.y * csize.x + dx + 1
|
||||
index3d = noise_area:index(dx, 0, dz)
|
||||
local ivm = area:index(x, minp.y, z)
|
||||
|
||||
for y = minp.y, maxp.y do
|
||||
local dy = y - minp.y
|
||||
|
||||
local n1 = cave_2[index3d]
|
||||
local n2 = cave_1[index3d]
|
||||
|
||||
if n1 * n2 > 0.05 then
|
||||
if y <= heightmap[index] - 10 or (y <= heightmap[index] and data[ivm] == node("default:stone")) then
|
||||
if cave_1[index3d] * cave_2[index3d] > 0.05 then
|
||||
data[ivm] = node("air")
|
||||
else
|
||||
data[ivm] = node("default:stone")
|
||||
end
|
||||
|
||||
local biome_val = biome_n[index3d]
|
||||
biome_avg = biome_avg + biome_val
|
||||
biome_ct = biome_ct + 1
|
||||
end
|
||||
|
||||
ivm = ivm + area.ystride
|
||||
index3d = index3d + csize.x
|
||||
|
@ -213,13 +210,6 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
end
|
||||
end
|
||||
|
||||
vm:set_data(data)
|
||||
biome_avg = biome_avg / biome_ct
|
||||
fun_caves.set_ores(biome_avg)
|
||||
minetest.generate_ores(vm, minp, maxp)
|
||||
vm:get_data(data)
|
||||
|
||||
local noise_area = VoxelArea:new({MinEdge={x=0,y=0,z=0}, MaxEdge=vector.subtract(csize, 1)})
|
||||
local index = 0
|
||||
local index3d = 0
|
||||
for z = minp.z, maxp.z do
|
||||
|
@ -232,6 +222,7 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
local ivm = area:index(x, maxp.y, z)
|
||||
|
||||
for y = maxp.y, minp.y, -1 do
|
||||
if y <= heightmap[index] - 20 then
|
||||
local ivm_below = ivm - area.ystride
|
||||
local ivm_above = ivm + area.ystride
|
||||
local dy = y - minp.y
|
||||
|
@ -240,6 +231,9 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
local stone_type = node("default:stone")
|
||||
local stone_depth = 1
|
||||
local biome_val = biome_n[index3d]
|
||||
if y > heightmap[index] - 500 then
|
||||
biome_val = biome_val / math.max(1, math.log(500 - (heightmap[index] - y)))
|
||||
end
|
||||
-------------------
|
||||
--biome_val = 0.3
|
||||
-------------------
|
||||
|
@ -368,6 +362,7 @@ function fun_caves.generate(p_minp, p_maxp, seed)
|
|||
air_count = air_count + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ivm = ivm - area.ystride
|
||||
index3d = index3d - csize.x
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue