Set 2d noise spread z = 1, chulensxz z = 1. Create noise objects once on first mapchunk generation
This commit is contained in:
parent
7f28c5b849
commit
2d786b8318
@ -1,4 +1,4 @@
|
||||
watershed 0.5.0 by paramat
|
||||
watershed 0.6.0 by paramat
|
||||
For latest stable Minetest back to 0.4.8
|
||||
Depends default stairs
|
||||
Licenses: code WTFPL, textures CC BY-SA
|
||||
|
88
init.lua
88
init.lua
@ -1,14 +1,10 @@
|
||||
-- watershed 0.5.0 by paramat
|
||||
-- watershed 0.6.0 by paramat
|
||||
-- For latest stable Minetest and back to 0.4.8
|
||||
-- Depends default bucket
|
||||
-- License: code WTFPL, textures CC BY-SA
|
||||
|
||||
-- New in 0.5.0:
|
||||
-- add 'update_liquids()' to make rivers flow
|
||||
-- liquid range 2
|
||||
-- double biome size
|
||||
-- more volcanos, 1 per kn on ridge
|
||||
-- regeneration by chat command '/regen'
|
||||
-- New in 0.6.0:
|
||||
|
||||
|
||||
-- Parameters
|
||||
|
||||
@ -63,6 +59,8 @@ local GOGCHA = 9 -- Golden grass
|
||||
local PAPCHA = 4 -- Papyrus
|
||||
local DUGCHA = 16 -- Dune grass
|
||||
|
||||
-- 3D noises
|
||||
|
||||
-- 3D noise for terrain
|
||||
|
||||
local np_terrain = {
|
||||
@ -129,12 +127,14 @@ local np_strata = {
|
||||
persist = 0.5
|
||||
}
|
||||
|
||||
-- 2D noises
|
||||
|
||||
-- 2D noise for mid terrain / streambed height
|
||||
|
||||
local np_mid = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=768, y=768, z=768},
|
||||
spread = {x=768, y=768, z=1},
|
||||
seed = 85546,
|
||||
octaves = 5,
|
||||
persist = 0.5
|
||||
@ -145,7 +145,7 @@ local np_mid = {
|
||||
local np_base = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=4096, y=4096, z=4096},
|
||||
spread = {x=4096, y=4096, z=1},
|
||||
seed = 8890,
|
||||
octaves = 3,
|
||||
persist = 0.33
|
||||
@ -156,7 +156,7 @@ local np_base = {
|
||||
local np_xlscale = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=8192, y=8192, z=8192},
|
||||
spread = {x=8192, y=8192, z=1},
|
||||
seed = -72,
|
||||
octaves = 3,
|
||||
persist = 0.33
|
||||
@ -167,17 +167,32 @@ local np_xlscale = {
|
||||
local np_magma = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=128, y=128, z=128},
|
||||
spread = {x=128, y=128, z=1},
|
||||
seed = -13,
|
||||
octaves = 2,
|
||||
persist = 0.5
|
||||
}
|
||||
|
||||
|
||||
-- Stuff
|
||||
|
||||
-- initialize 3D and 2D noise objects to nil
|
||||
local nobj_terrain = nil
|
||||
local nobj_fissure = nil
|
||||
local nobj_temp = nil
|
||||
local nobj_humid = nil
|
||||
local nobj_seam = nil
|
||||
local nobj_strata = nil
|
||||
|
||||
local nobj_mid = nil
|
||||
local nobj_base = nil
|
||||
local nobj_xlscale = nil
|
||||
local nobj_magma = nil
|
||||
|
||||
dofile(minetest.get_modpath("watershed").."/nodes.lua")
|
||||
dofile(minetest.get_modpath("watershed").."/functions.lua")
|
||||
|
||||
|
||||
-- Mapchunk generation function
|
||||
|
||||
function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
@ -225,23 +240,36 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
local c_wsicydirt = minetest.get_content_id("watershed:icydirt")
|
||||
-- perlinmap stuff
|
||||
local sidelen = x1 - x0 + 1 -- chunk sidelength
|
||||
local chulens = {x=sidelen, y=sidelen+2, z=sidelen} -- chunk dimensions, '+2' for overgeneration
|
||||
local chulensxyz = {x=sidelen, y=sidelen+2, z=sidelen} -- chunk dimensions, '+2' for overgeneration
|
||||
local chulensxz = {x=sidelen, y=sidelen, z=1} -- here x = map x, y = map z
|
||||
local minposxyz = {x=x0, y=y0-1, z=z0}
|
||||
local minposxz = {x=x0, y=z0}
|
||||
-- 3D and 2D perlinmaps
|
||||
local nvals_terrain = minetest.get_perlin_map(np_terrain, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_fissure = minetest.get_perlin_map(np_fissure, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_temp = minetest.get_perlin_map(np_temp, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_humid = minetest.get_perlin_map(np_humid, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_seam = minetest.get_perlin_map(np_seam, chulens):get3dMap_flat(minposxyz)
|
||||
local nvals_strata = minetest.get_perlin_map(np_strata, chulens):get3dMap_flat(minposxyz)
|
||||
local minposxz = {x=x0, y=z0} -- here x = map x, y = map z
|
||||
-- 3D and 2D noise objects created once on first mapchunk generation only
|
||||
nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz)
|
||||
nobj_fissure = nobj_fissure or minetest.get_perlin_map(np_fissure, chulensxyz)
|
||||
nobj_temp = nobj_temp or minetest.get_perlin_map(np_temp, chulensxyz)
|
||||
nobj_humid = nobj_humid or minetest.get_perlin_map(np_humid, chulensxyz)
|
||||
nobj_seam = nobj_seam or minetest.get_perlin_map(np_seam, chulensxyz)
|
||||
nobj_strata = nobj_strata or minetest.get_perlin_map(np_strata, chulensxyz)
|
||||
|
||||
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 nvals_xlscale = minetest.get_perlin_map(np_xlscale, chulens):get2dMap_flat(minposxz)
|
||||
local nvals_magma = minetest.get_perlin_map(np_magma, chulens):get2dMap_flat(minposxz)
|
||||
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)
|
||||
nobj_magma = nobj_magma or minetest.get_perlin_map(np_magma, chulensxz)
|
||||
-- 3D and 2D perlinmaps created per mapchunk
|
||||
local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz)
|
||||
local nvals_fissure = nobj_fissure:get3dMap_flat(minposxyz)
|
||||
local nvals_temp = nobj_temp:get3dMap_flat(minposxyz)
|
||||
local nvals_humid = nobj_humid:get3dMap_flat(minposxyz)
|
||||
local nvals_seam = nobj_seam:get3dMap_flat(minposxyz)
|
||||
local nvals_strata = nobj_strata:get3dMap_flat(minposxyz)
|
||||
|
||||
local viu = area:index(x0, y0-1, z0) -- ungenerated chunk below?
|
||||
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 nvals_magma = nobj_magma:get2dMap_flat(minposxz)
|
||||
-- ungenerated chunk below?
|
||||
local viu = area:index(x0, y0-1, z0)
|
||||
local ungen = data[viu] == c_ignore
|
||||
|
||||
-- mapgen loop
|
||||
@ -359,7 +387,8 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
end
|
||||
stable[si] = 0
|
||||
under[si] = 0
|
||||
elseif densitybase >= tlava - math.min(0.6 + density * 6, 0.6) and density < tstone then -- obsidian
|
||||
elseif densitybase >= tlava - math.min(0.6 + density * 6, 0.6)
|
||||
and density < tstone then -- obsidian
|
||||
data[vi] = c_obsidian
|
||||
stable[si] = 1
|
||||
under[si] = 0
|
||||
@ -463,8 +492,9 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
stable[si] = 0
|
||||
under[si] = 0
|
||||
end
|
||||
elseif y >= YWAT - bergdep and y <= YWAT + bergdep / 8 and n_temp < ICETET -- icesheet
|
||||
and density < tstone and math.abs(n_fissure) > 0.01 then
|
||||
elseif y >= YWAT - bergdep and y <= YWAT + bergdep / 8 -- icesheet
|
||||
and n_temp < ICETET and density < tstone
|
||||
and math.abs(n_fissure) > 0.01 then
|
||||
data[vi] = c_ice
|
||||
under[si] = 12
|
||||
stable[si] = 0
|
||||
@ -627,6 +657,7 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Regenerate chunk by chat command. Dependant on chunksize = 5.
|
||||
|
||||
minetest.register_chatcommand("regen",{
|
||||
@ -671,6 +702,7 @@ minetest.register_chatcommand("regen",{
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- On generated function
|
||||
|
||||
minetest.register_on_generated(function(minp, maxp, seed)
|
||||
|
Loading…
Reference in New Issue
Block a user