Overgeneration
This commit is contained in:
parent
4b84ba825d
commit
8d923ca0d6
@ -1,4 +1,4 @@
|
||||
riverdev 0.1.3 by paramat
|
||||
riverdev 0.1.4 by paramat
|
||||
For latest stable Minetest back to 0.4.8
|
||||
Depends default
|
||||
Licenses: code WTFPL
|
62
init.lua
62
init.lua
@ -1,13 +1,8 @@
|
||||
-- riverdev 0.1.3 by paramat
|
||||
-- riverdev 0.1.4 by paramat
|
||||
-- For latest stable Minetest and back to 0.4.8
|
||||
-- Depends default
|
||||
-- License: code WTFPL
|
||||
|
||||
-- thin dirt with altitude
|
||||
-- dirt and grass
|
||||
-- fine detail back to 24n
|
||||
-- Add mixwater
|
||||
|
||||
-- Parameters
|
||||
|
||||
local YMIN = -33000
|
||||
@ -277,35 +272,25 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local c_mixwater = minetest.get_content_id("riverdev:mixwater")
|
||||
|
||||
local sidelen = x1 - x0 + 1
|
||||
local chulens = {x=sidelen, y=sidelen, z=sidelen}
|
||||
local minposxyz = {x=x0, y=y0, z=z0}
|
||||
local chulens = {x=sidelen, y=sidelen+2, z=sidelen}
|
||||
local minposxyz = {x=x0, y=y0-1, z=z0}
|
||||
local minposxz = {x=x0, y=z0}
|
||||
|
||||
local nvals_terrain = minetest.get_perlin_map(np_terrain, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_mid = minetest.get_perlin_map(np_mid, chulens):get2dMap_flat(minposxz)
|
||||
local nvals_base = minetest.get_perlin_map(np_base, chulens):get2dMap_flat(minposxz)
|
||||
|
||||
local ungen = false
|
||||
if minetest.get_node({x=x0, y=y0-1, z=z0}).name == "ignore" then
|
||||
ungen = true
|
||||
end
|
||||
|
||||
local nixyz = 1
|
||||
local nixz = 1
|
||||
local stable = {}
|
||||
local under = {}
|
||||
for z = z0, z1 do
|
||||
for x = x0, x1 do
|
||||
local si = x - x0 + 1
|
||||
under[si] = 0
|
||||
local nodename = minetest.get_node({x=x,y=y0-1,z=z}).name
|
||||
if nodename == "air"
|
||||
or nodename == "default:water_source"
|
||||
or nodename == "riverdev:freshwater"
|
||||
or nodename == "riverdev:freshwaterflow"
|
||||
or nodename == "riverdev:mixwater"
|
||||
or nodename == "riverdev:mixwaterflow" then
|
||||
stable[si] = 0
|
||||
else
|
||||
stable[si] = 2
|
||||
end
|
||||
end
|
||||
for y = y0, y1 do
|
||||
for y = y0 - 1, y1 + 1 do
|
||||
local vi = area:index(x0, y, z)
|
||||
local viu = area:index(x0, y-1, z)
|
||||
for x = x0, x1 do
|
||||
@ -326,6 +311,28 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local tstream = TSTREAM * (1 - n_absmid)
|
||||
local tssand = TSSAND * (1 - n_absmid)
|
||||
|
||||
if y == y0 - 1 then -- overgeneration, initialise tables
|
||||
under[si] = 0
|
||||
if ungen then
|
||||
if density >= 0 then
|
||||
stable[si] = 2
|
||||
else
|
||||
stable[si] = 0
|
||||
end
|
||||
else
|
||||
local nodename = minetest.get_node({x=x,y=y0-1,z=z}).name
|
||||
if nodename == "air"
|
||||
or nodename == "default:water_source"
|
||||
or nodename == "riverdev:freshwater"
|
||||
or nodename == "riverdev:freshwaterflow"
|
||||
or nodename == "riverdev:mixwater"
|
||||
or nodename == "riverdev:mixwaterflow" then
|
||||
stable[si] = 0
|
||||
else
|
||||
stable[si] = 2
|
||||
end
|
||||
end
|
||||
elseif y >= y0 and y <= y1 then -- chunk generation
|
||||
if density >= tstone then -- stone
|
||||
data[vi] = c_stone
|
||||
stable[si] = stable[si] + 1
|
||||
@ -366,6 +373,13 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
stable[si] = 0
|
||||
under[si] = 0
|
||||
end
|
||||
elseif y == y1 + 1 then -- overgeneration, detect surface, add surface nodes
|
||||
if density < 0 and under[si] ~= 0 then
|
||||
if under[si] == 1 then
|
||||
data[viu] = c_grass
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
nixyz = nixyz + 1
|
||||
nixz = nixz + 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user