mirror of
https://github.com/HybridDog/nether-pack.git
synced 2024-12-26 18:50:24 +01:00
use the weierstrass function to decorate the nether forest top (similar to http://a.pomf.se/niypzy.png)
This commit is contained in:
parent
21171ceb2c
commit
0d07fa3cd4
@ -7,4 +7,5 @@ http://i.imgur.com/pMZYqt9.png
|
|||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
— finish nether forest
|
— care about nether torches
|
||||||
|
— find out why the nether forests top is sometimes flat
|
||||||
|
@ -125,6 +125,36 @@ local function table_contains(t, v)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Weierstrass function stuff from https://github.com/slemonide/gen
|
||||||
|
local SIZE = 1000
|
||||||
|
local ssize = math.ceil(math.abs(SIZE))
|
||||||
|
local function do_ws_func(depth, a, x)
|
||||||
|
local n = x/(16*SIZE)
|
||||||
|
local y = 0
|
||||||
|
for k=1,depth do
|
||||||
|
y = y + SIZE*(math.sin(math.pi * k^a * n)/(math.pi * k^a))
|
||||||
|
end
|
||||||
|
return y
|
||||||
|
end
|
||||||
|
|
||||||
|
local chunksize = minetest.setting_get("chunksize") or 5
|
||||||
|
local ws_lists = {}
|
||||||
|
local function get_ws_list(a,x)
|
||||||
|
ws_lists[a] = ws_lists[a] or {}
|
||||||
|
local v = ws_lists[a][x]
|
||||||
|
if v then
|
||||||
|
return v
|
||||||
|
end
|
||||||
|
v = {}
|
||||||
|
for x=x,x + (chunksize*16 - 1) do
|
||||||
|
local y = do_ws_func(ssize, a, x)
|
||||||
|
v[x] = y
|
||||||
|
end
|
||||||
|
ws_lists[a][x] = v
|
||||||
|
return v
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function dif(z1, z2)
|
local function dif(z1, z2)
|
||||||
if z1 < 0
|
if z1 < 0
|
||||||
and z2 < 0 then
|
and z2 < 0 then
|
||||||
@ -367,10 +397,12 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
local forest_possible = maxp.y > f_h_min and minp.y < f_h_max
|
local forest_possible = maxp.y > f_h_min and minp.y < f_h_max
|
||||||
|
|
||||||
--local pmap_f_bottom = minetest.get_perlin_map(perlins.forest_bottom, map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z})
|
--local pmap_f_bottom = minetest.get_perlin_map(perlins.forest_bottom, map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z})
|
||||||
local perlin_f_bottom, pmap_f_top
|
local perlin_f_bottom, pmap_f_top, strassx, strassz
|
||||||
if forest_possible then
|
if forest_possible then
|
||||||
perlin_f_bottom = minetest.get_perlin(11, 3, 0.8, tmp2)
|
perlin_f_bottom = minetest.get_perlin(11, 3, 0.8, tmp2)
|
||||||
pmap_f_top = minetest.get_perlin_map(perlins.forest_top, map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z})
|
pmap_f_top = minetest.get_perlin_map(perlins.forest_top, map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z})
|
||||||
|
strassx = get_ws_list(2, minp.x)
|
||||||
|
strassz = get_ws_list(2, minp.z)
|
||||||
end
|
end
|
||||||
|
|
||||||
local num2, tab2
|
local num2, tab2
|
||||||
@ -449,8 +481,8 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
if not f_perlins[pstr] then
|
if not f_perlins[pstr] then
|
||||||
f_perlins[pstr] = math.floor(f_h_min+(math.abs(perlin_f_bottom:get2d({x=p.x, y=p.z})+1))*f_yscale_bottom+0.5)
|
f_perlins[pstr] = math.floor(f_h_min+(math.abs(perlin_f_bottom:get2d({x=p.x, y=p.z})+1))*f_yscale_bottom+0.5)
|
||||||
end
|
end
|
||||||
|
f_top = math.floor(f_h_max - (pmap_f_top[count]+1)*f_yscale_top + 0.5)
|
||||||
f_bottom = f_perlins[pstr]+math.random(0,f_bottom_scale-1)
|
f_bottom = f_perlins[pstr]+math.random(0,f_bottom_scale-1)
|
||||||
f_top = math.floor(f_h_max-(pmap_f_top[count]+1)*f_yscale_top+0.5)
|
|
||||||
is_forest = f_bottom < f_top
|
is_forest = f_bottom < f_top
|
||||||
f_h_dirt = f_bottom-pr:next(0,1)
|
f_h_dirt = f_bottom-pr:next(0,1)
|
||||||
end
|
end
|
||||||
@ -510,6 +542,18 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||||||
) then
|
) then
|
||||||
data[p_addpos] = c.air
|
data[p_addpos] = c.air
|
||||||
end
|
end
|
||||||
|
elseif is_forest
|
||||||
|
and y == f_top then
|
||||||
|
local sel = math.floor(strassx[x]+strassz[z]+0.5)%10
|
||||||
|
if sel <= 5 then
|
||||||
|
data[p_addpos] = return_nether_ore(d_p_addp, true)
|
||||||
|
elseif sel == 6 then
|
||||||
|
data[p_addpos] = c.netherrack_black
|
||||||
|
elseif sel == 7 then
|
||||||
|
data[p_addpos] = c.glowstone
|
||||||
|
else
|
||||||
|
data[p_addpos] = c.air
|
||||||
|
end
|
||||||
|
|
||||||
elseif y <= NETHER_BOTTOM then
|
elseif y <= NETHER_BOTTOM then
|
||||||
if y <= bottom then
|
if y <= bottom then
|
||||||
|
Loading…
Reference in New Issue
Block a user