Move spawnplayer function to init.lua. 'set lighting = 0' if not in singlenode mode
This commit is contained in:
parent
2c41bf50d4
commit
c65ce34226
@ -1,4 +1,4 @@
|
||||
watershed 0.7.0 by paramat
|
||||
watershed 0.7.1 by paramat
|
||||
For Minetest 0.4.13 and later
|
||||
Depends default stairs bucket
|
||||
Licenses: code WTFPL, textures CC BY-SA
|
||||
|
141
functions.lua
141
functions.lua
@ -210,147 +210,6 @@ function watershed_papyrus(x, y, z, area, data)
|
||||
end
|
||||
end
|
||||
|
||||
-- Singlenode option
|
||||
|
||||
local SINGLENODE = true
|
||||
|
||||
if SINGLENODE then
|
||||
-- Set mapgen parameters
|
||||
|
||||
minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"})
|
||||
|
||||
-- Spawn player function. Requires chunksize = 80 nodes (the default)
|
||||
|
||||
function spawnplayer(player)
|
||||
local TERCEN = -128
|
||||
local TERSCA = 512
|
||||
local XLSAMP = 0.1
|
||||
local BASAMP = 0.3
|
||||
local MIDAMP = 0.1
|
||||
local CANAMP = 0.4
|
||||
local ATANAMP = 1.1
|
||||
local BLENEXP = 2
|
||||
local xsp
|
||||
local ysp
|
||||
local zsp
|
||||
|
||||
local np_terrain = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=384, y=192, z=384},
|
||||
seed = 593,
|
||||
octaves = 5,
|
||||
persist = 0.67
|
||||
}
|
||||
local np_mid = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=768, y=768, z=1},
|
||||
seed = 85546,
|
||||
octaves = 5,
|
||||
persist = 0.5
|
||||
}
|
||||
local np_base = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=4096, y=4096, z=1},
|
||||
seed = 8890,
|
||||
octaves = 3,
|
||||
persist = 0.33
|
||||
}
|
||||
local np_xlscale = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=8192, y=8192, z=1},
|
||||
seed = -72,
|
||||
octaves = 3,
|
||||
persist = 0.33
|
||||
}
|
||||
|
||||
local nobj_terrain = nil
|
||||
local nobj_mid = nil
|
||||
local nobj_base = nil
|
||||
local nobj_xlscale = nil
|
||||
|
||||
for chunk = 1, 64 do
|
||||
print ("[watershed] searching for spawn "..chunk)
|
||||
local x0 = 80 * math.random(-32, 32) - 32
|
||||
local z0 = 80 * math.random(-32, 32) - 32
|
||||
local y0 = -32
|
||||
local x1 = x0 + 79
|
||||
local z1 = z0 + 79
|
||||
local y1 = 47
|
||||
local sidelen = 80
|
||||
local chulensxyz = {x = sidelen, y = sidelen + 2, z = sidelen}
|
||||
local chulensxz = {x = sidelen, y = sidelen, z = 1}
|
||||
local minposxyz = {x = x0, y = y0 - 1, z = z0}
|
||||
local minposxz = {x = x0, y = z0}
|
||||
|
||||
nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz)
|
||||
nobj_mid = nobj_mid or minetest.get_perlin_map(np_mid, chulensxz)
|
||||
nobj_base = nobj_base or minetest.get_perlin_map(np_base, chulensxz)
|
||||
nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np_xlscale, chulensxz)
|
||||
|
||||
local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz)
|
||||
local nvals_mid = nobj_mid:get2dMap_flat(minposxz)
|
||||
local nvals_base = nobj_base:get2dMap_flat(minposxz)
|
||||
local nvals_xlscale = nobj_xlscale:get2dMap_flat(minposxz)
|
||||
|
||||
local nixz = 1
|
||||
local nixyz = 1
|
||||
for z = z0, z1 do
|
||||
for y = y0, y1 do
|
||||
for x = x0, x1 do
|
||||
local n_absterrain = math.abs(nvals_terrain[nixyz])
|
||||
local n_absmid = math.abs(nvals_mid[nixz])
|
||||
local n_absbase = math.abs(nvals_base[nixz])
|
||||
local n_xlscale = nvals_xlscale[nixz]
|
||||
|
||||
local n_invbase = (1 - n_absbase)
|
||||
local terblen = (math.max(n_invbase, 0)) ^ BLENEXP
|
||||
local grad = math.atan((TERCEN - y) / TERSCA) * ATANAMP
|
||||
local densitybase = n_invbase * BASAMP + n_xlscale * XLSAMP + grad
|
||||
local densitymid = n_absmid * MIDAMP + densitybase
|
||||
local canexp = 0.5 + terblen * 0.5
|
||||
local canamp = terblen * CANAMP
|
||||
local density = n_absterrain ^ canexp * canamp * n_absmid + densitymid
|
||||
|
||||
if y >= 1 and density > -0.005 and density < 0 then
|
||||
ysp = y + 1
|
||||
xsp = x
|
||||
zsp = z
|
||||
break
|
||||
end
|
||||
nixz = nixz + 1
|
||||
nixyz = nixyz + 1
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
nixz = nixz - 80
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
nixz = nixz + 80
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
end
|
||||
print ("[watershed] spawn player (" .. xsp .. " " .. ysp .. " " .. zsp .. ")")
|
||||
player:setpos({x = xsp, y = ysp, z = zsp})
|
||||
end
|
||||
|
||||
minetest.register_on_newplayer(function(player)
|
||||
spawnplayer(player)
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
spawnplayer(player)
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
||||
-- ABM
|
||||
|
||||
|
112
init.lua
112
init.lua
@ -1,5 +1,6 @@
|
||||
-- Parameters
|
||||
|
||||
local SINGLENODE = true -- Use singlenode mapgen and spawnplayer function
|
||||
local YMIN = -33000 -- Approximate base of realm stone
|
||||
local YMAX = 33000 -- Approximate top of atmosphere / mountains / floatlands
|
||||
local TERCEN = -128 -- Terrain zero level, average seabed
|
||||
@ -777,6 +778,9 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
|
||||
vm:set_data(data)
|
||||
if not SINGLENODE then
|
||||
vm:set_lighting({day = 0, night = 0}) -- remove incorrect precalculated light
|
||||
end
|
||||
vm:calc_lighting()
|
||||
vm:write_to_map(data)
|
||||
vm:update_liquids()
|
||||
@ -784,3 +788,111 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local chugent = math.ceil((os.clock() - t1) * 1000)
|
||||
print ("[watershed] " .. chugent .. " ms")
|
||||
end)
|
||||
|
||||
|
||||
-- Singlenode option
|
||||
|
||||
if SINGLENODE then
|
||||
-- Set mapgen parameters
|
||||
|
||||
minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"})
|
||||
|
||||
|
||||
-- Spawn player function. Requires chunksize = 80 nodes (the default)
|
||||
|
||||
function spawnplayer(player)
|
||||
local xsp
|
||||
local ysp
|
||||
local zsp
|
||||
|
||||
local nobj_terrain = nil
|
||||
local nobj_mid = nil
|
||||
local nobj_base = nil
|
||||
local nobj_xlscale = nil
|
||||
|
||||
local nbuf_terrain
|
||||
local nbuf_mid
|
||||
local nbuf_base
|
||||
local nbuf_xlscale
|
||||
|
||||
for chunk = 1, 128 do
|
||||
print ("[watershed] searching for spawn "..chunk)
|
||||
local x0 = 80 * math.random(-32, 32) - 32
|
||||
local z0 = 80 * math.random(-32, 32) - 32
|
||||
local y0 = -32
|
||||
local x1 = x0 + 79
|
||||
local z1 = z0 + 79
|
||||
local y1 = 47
|
||||
local sidelen = 80
|
||||
local chulensxyz = {x = sidelen, y = sidelen + 2, z = sidelen}
|
||||
local chulensxz = {x = sidelen, y = sidelen, z = 1}
|
||||
local minposxyz = {x = x0, y = y0 - 1, z = z0}
|
||||
local minposxz = {x = x0, y = z0}
|
||||
|
||||
nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz)
|
||||
nobj_mid = nobj_mid or minetest.get_perlin_map(np_mid, chulensxz)
|
||||
nobj_base = nobj_base or minetest.get_perlin_map(np_base, chulensxz)
|
||||
nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np_xlscale, chulensxz)
|
||||
|
||||
local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz, nbuf_terrain)
|
||||
local nvals_mid = nobj_mid :get2dMap_flat(minposxz, nbuf_mid)
|
||||
local nvals_base = nobj_base :get2dMap_flat(minposxz, nbuf_base)
|
||||
local nvals_xlscale = nobj_xlscale:get2dMap_flat(minposxz, nbuf_xlscale)
|
||||
|
||||
local nixz = 1
|
||||
local nixyz = 1
|
||||
for z = z0, z1 do
|
||||
for y = y0, y1 do
|
||||
for x = x0, x1 do
|
||||
local n_absterrain = math.abs(nvals_terrain[nixyz])
|
||||
local n_absmid = math.abs(nvals_mid[nixz])
|
||||
local n_absbase = math.abs(nvals_base[nixz])
|
||||
local n_xlscale = nvals_xlscale[nixz]
|
||||
|
||||
local n_invbase = (1 - n_absbase)
|
||||
local terblen = (math.max(n_invbase, 0)) ^ BLENEXP
|
||||
local grad = math.atan((TERCEN - y) / TERSCA) * ATANAMP
|
||||
local densitybase = n_invbase * BASAMP + n_xlscale * XLSAMP +
|
||||
grad
|
||||
local densitymid = n_absmid * MIDAMP + densitybase
|
||||
local canexp = 0.5 + terblen * 0.5
|
||||
local canamp = terblen * CANAMP
|
||||
local density = n_absterrain ^ canexp * canamp * n_absmid +
|
||||
densitymid
|
||||
|
||||
if y >= 1 and density > -0.005 and density < 0 then
|
||||
ysp = y + 1
|
||||
xsp = x
|
||||
zsp = z
|
||||
break
|
||||
end
|
||||
nixz = nixz + 1
|
||||
nixyz = nixyz + 1
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
nixz = nixz - 80
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
nixz = nixz + 80
|
||||
end
|
||||
if ysp then
|
||||
break
|
||||
end
|
||||
end
|
||||
print ("[watershed] spawn player (" .. xsp .. " " .. ysp .. " " .. zsp .. ")")
|
||||
player:setpos({x = xsp, y = ysp, z = zsp})
|
||||
end
|
||||
|
||||
minetest.register_on_newplayer(function(player)
|
||||
spawnplayer(player)
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
spawnplayer(player)
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user