Add Noodle, Isosurface and Blob caves
This commit is contained in:
parent
76a248ae14
commit
ab7a6b6efe
140
init.lua
140
init.lua
|
@ -57,7 +57,7 @@ luamap.register_noise("surface_3d", {
|
|||
spread = {x=32, y=32, z=32},
|
||||
seed = 7195270625,
|
||||
octaves = 4,
|
||||
persist = 0.4,
|
||||
persist = 0.5,
|
||||
lacunarity = 2,
|
||||
flags = "eased",
|
||||
},
|
||||
|
@ -65,6 +65,92 @@ luamap.register_noise("surface_3d", {
|
|||
ymax = 512,
|
||||
})
|
||||
|
||||
luamap.register_noise("caves_blob", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=16, y=12, z=16},
|
||||
seed = 1100581792,
|
||||
octaves = 4,
|
||||
persist = 0.4,
|
||||
lacunarity = 2,
|
||||
flags = "eased",
|
||||
},
|
||||
ymax = 32,
|
||||
})
|
||||
|
||||
luamap.register_noise("caves_blob_large", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=48, y=32, z=48},
|
||||
seed = 8796758322,
|
||||
octaves = 5,
|
||||
persist = 0.35,
|
||||
lacunarity = 2,
|
||||
flags = "",
|
||||
},
|
||||
ymax = -256,
|
||||
})
|
||||
|
||||
luamap.register_noise("caves_sheet", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=192, y=192, z=192},
|
||||
seed = 968236844,
|
||||
octaves = 6,
|
||||
persist = 0.45,
|
||||
lacunarity = 2,
|
||||
flags = "",
|
||||
},
|
||||
ymax = 32
|
||||
})
|
||||
luamap.register_noise("caves_sheet2", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=32, y=24, z=32},
|
||||
seed = 14137677187,
|
||||
octaves = 5,
|
||||
persist = 0.2,
|
||||
lacunarity = 2,
|
||||
flags = "",
|
||||
},
|
||||
ymax = 32
|
||||
})
|
||||
|
||||
luamap.register_noise("caves_noodle1", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=64, y=80, z=64},
|
||||
seed = 6579241763,
|
||||
octaves = 6,
|
||||
persist = 0.25,
|
||||
lacunarity = 2,
|
||||
flags = "",
|
||||
},
|
||||
})
|
||||
luamap.register_noise("caves_noodle2", {
|
||||
type = "3d",
|
||||
np_vals = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=80, y=64, z=80},
|
||||
seed = 8175385003,
|
||||
octaves = 6,
|
||||
persist = 0.25,
|
||||
lacunarity = 2,
|
||||
flags = "",
|
||||
},
|
||||
})
|
||||
|
||||
luamap.register_noise("shaper", {
|
||||
type = "2d",
|
||||
np_vals = {
|
||||
|
@ -120,6 +206,7 @@ luamap.register_noise("ridge_depth", {
|
|||
},
|
||||
})
|
||||
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
local c_sandstone = minetest.get_content_id("default:sandstone")
|
||||
local c_water = minetest.get_content_id("default:water_source")
|
||||
|
@ -131,10 +218,11 @@ local old_logic = luamap.logic
|
|||
function luamap.logic(noise_vals,x,y,z,seed,original_content)
|
||||
-- get any terrain defined in another mod
|
||||
local content = old_logic(noise_vals,x,y,z,seed,original_content)
|
||||
|
||||
|
||||
if y < water_level then
|
||||
content = c_water
|
||||
end
|
||||
local empty_content = content
|
||||
|
||||
local terrain_height = 8
|
||||
for i = 1, #recip_factors do
|
||||
|
@ -171,21 +259,59 @@ function luamap.logic(noise_vals,x,y,z,seed,original_content)
|
|||
if noise_vals.surface_3d > density_3d then
|
||||
content = c_stone
|
||||
end
|
||||
else
|
||||
elseif y >= water_level - 256 then
|
||||
-- interpolate between 3d effect and 2d solid ground
|
||||
if noise_vals.surface_3d > density_3d - luamap.remap(terrain_height - y, 8, 32, 0, 1.5) then
|
||||
content = c_stone
|
||||
end
|
||||
else
|
||||
content = c_stone
|
||||
end
|
||||
end
|
||||
|
||||
if y < water_level - 256 then
|
||||
content = c_stone
|
||||
end
|
||||
|
||||
-- if y == math.floor(terrain_height) and content == c_stone then
|
||||
-- content = c_sandstone
|
||||
-- end
|
||||
|
||||
-- caves test
|
||||
local caves_blob = false
|
||||
local caves_bloodle_factor = 0
|
||||
local caves_blob_threshold = luamap.remap(y, -1024, 64, -0.85, -1.02)
|
||||
if noise_vals.caves_blob < caves_blob_threshold then
|
||||
caves_blob = true
|
||||
else
|
||||
-- noodles near blobs try to connect better
|
||||
caves_bloodle_factor = caves_bloodle_factor + luamap.remap(noise_vals.caves_blob - caves_blob_threshold, 0, 1, 0.01, 0)
|
||||
end
|
||||
|
||||
local caves_blob_large = false
|
||||
local caves_blob_large_threshold = luamap.remap(y, -2048, -256, -0.5, -0.9)
|
||||
if noise_vals.caves_blob_large < caves_blob_large_threshold then
|
||||
caves_blob_large = true
|
||||
else
|
||||
caves_bloodle_factor = caves_bloodle_factor + luamap.remap(noise_vals.caves_blob_large - caves_blob_threshold, 0, 1, 0.012, 0)
|
||||
end
|
||||
|
||||
local caves_sheet = noise_vals.caves_sheet2 > -0.2
|
||||
local caves_sheet_margin = luamap.remap(y, -1024, 32, 0.014, 0.010)
|
||||
local caves_sheet_offset = luamap.remap(y, -3072, 32, -0.3, 0.2)
|
||||
|
||||
local caves_noodle_margin = luamap.remap(y, -1024, 128, 0.026, 0.019) + caves_bloodle_factor
|
||||
local caves_noodle_offset = luamap.remap(y, -2048, 128, -0.15, 0.2)
|
||||
local caves_noodle = math.abs(noise_vals.caves_noodle1 - caves_noodle_offset) < caves_noodle_margin and
|
||||
math.abs(noise_vals.caves_noodle2 - caves_noodle_offset) < caves_noodle_margin
|
||||
|
||||
if content == c_stone then
|
||||
if caves_blob then
|
||||
content = c_air
|
||||
elseif caves_blob_large then
|
||||
content = c_air
|
||||
elseif caves_noodle then
|
||||
content = c_air
|
||||
elseif caves_sheet and math.abs(noise_vals.caves_sheet - caves_sheet_offset) < caves_sheet_margin then
|
||||
content = c_air
|
||||
end
|
||||
end
|
||||
|
||||
return content
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue