forked from mtcontrib/nether-pack
93 lines
2.1 KiB
Lua
93 lines
2.1 KiB
Lua
|
--V2
|
||
|
local function get_random(a, b, seed)
|
||
|
return PseudoRandom(math.abs(a+b*5)+seed)
|
||
|
end
|
||
|
|
||
|
local r_chs = {}
|
||
|
|
||
|
function nether_weird_noise(minp, fct, s, seed, range)
|
||
|
if not r_chs[s] then
|
||
|
r_chs[s] = math.floor(s/3+0.5)
|
||
|
end
|
||
|
local r_ch = r_chs[s]
|
||
|
local maxp = vector.add(minp, 16)
|
||
|
|
||
|
local tab,n = {},1
|
||
|
local sm = range or (s+r_ch)*2
|
||
|
for z = -sm, 16+sm do
|
||
|
local pz = z+minp.z
|
||
|
if pz%s == 0 then
|
||
|
for x = -sm, 16+sm do
|
||
|
local px = x+minp.x
|
||
|
if px%s == 0 then
|
||
|
local pr = get_random(px, pz, seed)
|
||
|
tab[n] = {x=px+pr:next(-r_ch, r_ch), y=0, z=pz+pr:next(-r_ch, r_ch)}
|
||
|
n = n+1
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local tab2,n = {},1
|
||
|
for z = minp.z, maxp.z do
|
||
|
for x = minp.x, maxp.x do
|
||
|
local h = sm
|
||
|
for _,i in ipairs(tab) do
|
||
|
--local dist = vector.distance(i, {x=x, y=0, z=z})
|
||
|
h = math.min(h, fct(x, i.x, z, i.z))
|
||
|
end
|
||
|
tab2[n] = {x=x, y=maxp.y-h, z=z}
|
||
|
n = n+1
|
||
|
end
|
||
|
end
|
||
|
return tab2
|
||
|
end
|
||
|
|
||
|
--[[
|
||
|
local function dif(z1, z2)
|
||
|
if z1 < 0
|
||
|
and z2 < 0 then
|
||
|
z1,z2 = -z1,-z2
|
||
|
end
|
||
|
return math.abs(z1-z2)
|
||
|
end
|
||
|
|
||
|
local function pymg(x1, x2, z1, z2)
|
||
|
return math.max(dif(x1, x2), dif(z1, z2))
|
||
|
end
|
||
|
|
||
|
local function romg(x1, x2, z1, z2)
|
||
|
return math.hypot(dif(x1, x2), dif(z1, z2))
|
||
|
end
|
||
|
|
||
|
local function py2mg(x1, x2, z1, z2)
|
||
|
return dif(x1, x2) + dif(z1, z2)
|
||
|
end
|
||
|
|
||
|
minetest.register_node("ac:wmg", {
|
||
|
description = "wmg",
|
||
|
tiles = {"ac_block.png"},
|
||
|
groups = {snappy=1,bendy=2,cracky=1},
|
||
|
sounds = default_stone_sounds,
|
||
|
on_construct = function(pos)
|
||
|
local minp = vector.chunkcorner(pos)
|
||
|
for _,p in ipairs(weird_noise(minp, pymg, 20, 8, 4)) do
|
||
|
local p2 = {x=p.x, y=p.y+1, z=p.z}
|
||
|
if p.y <= minp.y+7 then
|
||
|
local p2 = {x=p.x, y=minp.y+6, z=p.z}
|
||
|
local p3 = {x=p.x, y=p2.y+1, z=p.z}
|
||
|
if minetest.get_node(p2).name ~= "default:desert_stone" then
|
||
|
minetest.set_node(p2, {name="default:desert_stone"})
|
||
|
end
|
||
|
if minetest.get_node(p3).name ~= "default:desert_sand" then
|
||
|
minetest.set_node(p3, {name="default:desert_sand"})
|
||
|
end
|
||
|
else
|
||
|
if minetest.get_node(p).name ~= "default:desert_stone" then
|
||
|
minetest.set_node(p, {name="default:desert_stone"})
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end,
|
||
|
})]]
|