glowtest/glowtest/glowtest/mapgen.lua

140 lines
8.9 KiB
Lua

local MAXALT = 23
local MINSPA = 2
local MAXSPA = 11
local NORMPLANT = 16
local RAREPLANT = 25
local LOWALT = -10
local SEEDDIFF = 104
local OCTAVES = 3
local PERSISTENCE = 0.5
local SCALE = 200
local NOISEH = -0.6
local NOISEL = -1.2
local GREINT = 23
local GRECHA = 13
local ONGEN = true
local REMOVE_TREES = true
local DEBUG = true
local colchamin = MINSPA ^ 2
local factor = (MAXSPA ^ 2 - colchamin) * 4
local nav = (NOISEH + NOISEL) / 2
local nra = NOISEH - NOISEL
if ONGEN then
minetest.register_on_generated(function(minp, maxp, seed)
if minp.y == -32 then
local perlin = minetest.env:get_perlin(SEEDDIFF, OCTAVES, PERSISTENCE, SCALE)
local x0 = minp.x
local z0 = minp.z
local x1 = maxp.x
local z1 = maxp.z
local xl = x1 - x0
local zl = z1 - z0
if not (perlin:get2d({x=x0, y=z0}) > NOISEL and perlin:get2d({x=x0, y=z0}) < NOISEH)
and not (perlin:get2d({x=x0, y=z1}) > NOISEL and perlin:get2d({x=x0, y=z1}) < NOISEH)
and not (perlin:get2d({x=x1, y=z0}) > NOISEL and perlin:get2d({x=x1, y=z0}) < NOISEH)
and not (perlin:get2d({x=x1, y=z1}) > NOISEL and perlin:get2d({x=x1, y=z1}) < NOISEH)
and not (perlin:get2d({x=x0, y=z0+(zl/2)}) > NOISEL and perlin:get2d({x=x0, y=z0+(zl/2)}) < NOISEH)
and not (perlin:get2d({x=x1, y=z0+(zl/2)}) > NOISEL and perlin:get2d({x=x1, y=z0+(zl/2)}) < NOISEH)
and not (perlin:get2d({x=x0+(xl/2), y=z0}) > NOISEL and perlin:get2d({x=x0+(xl/2), y=z0}) < NOISEH)
and not (perlin:get2d({x=x0+(xl/2), y=z1}) > NOISEL and perlin:get2d({x=x0+(xl/2), y=z1}) < NOISEH)
and not (perlin:get2d({x=x0+(xl/2), y=z0+(zl/2)}) > NOISEL and perlin:get2d({x=x0+(xl/2), y=z0+(zl/2)}) < NOISEH) then
return
end
if REMOVE_TREES == true then
local trees = minetest.env:find_nodes_in_area(minp, maxp, {"default:leaves","default:tree","default:apple"})
for i,v in pairs(trees) do
minetest.env:remove_node(v)
end
--if DEBUG then
-- print ("[glowtest] Trees Removed ("..minp.x.." "..minp.y.." "..minp.z..")")
--end
end
for i = 0, xl do
for j = 0, zl do
local x = x0 + i
local z = z0 + j
local noise = perlin:get2d({x = x, y = z})
if noise > NOISEL and noise < NOISEH then
local colcha = colchamin + math.floor(factor * (math.abs(noise - nav) / nra) ^ 2)
if math.random(1,colcha) == 1 then
local ground_y = nil
for y=maxp.y,minp.y,-1 do
local nodename = minetest.env:get_node({x=x,y=y,z=z}).name
if nodename ~= "air" and nodename ~= "default:water_source" then
ground_y = y
break
end
end
if ground_y and ground_y <= MAXALT then
local nodename = minetest.env:get_node({x=x,y=ground_y,z=z}).name
local junnear = minetest.env:find_node_near({x=x,y=ground_y,z=z}, MINSPA, "default:jungletree")
local defnear = minetest.env:find_node_near({x=x,y=ground_y,z=z}, MINSPA, "default:tree")
if nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 16 then
glowtest_sgreentree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 2 then
glowtest_mgreentree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 3 then
glowtest_lgreentree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 4 then
glowtest_sbluetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 5 then
glowtest_mbluetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 6 then
glowtest_lbluetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 7 then
glowtest_spinktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 8 then
glowtest_mpinktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 9 then
glowtest_lpinktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 10 then
glowtest_syellowtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 11 then
glowtest_myellowtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 12 then
glowtest_lyellowtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 13 then
glowtest_swhitetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 14 then
glowtest_mwhitetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(NORMPLANT) == 15 then
glowtest_lwhitetree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 16 then
glowtest_sredtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 2 then
glowtest_mredtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 3 then
glowtest_lredtree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 4 then
glowtest_sblacktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 5 then
glowtest_mblacktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:desert_sand" and math.random(NORMPLANT) == 6 then
glowtest_lblacktree({x=x,y=ground_y+1,z=z})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(RAREPLANT) == 1 then
minetest.add_node({x=x,y=ground_y+1,z=z},{name="glowtest:blue_crystal_1"})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(RAREPLANT) == 2 then
minetest.add_node({x=x,y=ground_y+1,z=z},{name="glowtest:green_crystal_1"})
elseif nodename == "default:desert_sand" and math.random(RAREPLANT) == 3 then
minetest.add_node({x=x,y=ground_y+1,z=z},{name="glowtest:red_crystal_1"})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(RAREPLANT) == 4 then
minetest.add_node({x=x,y=ground_y+1,z=z},{name="glowtest:yellow_crystal_1"})
elseif nodename == "default:dirt_with_grass" and junnear == nil and defnear == nil and math.random(RAREPLANT) == 5 then
minetest.add_node({x=x,y=ground_y+1,z=z},{name="glowtest:pink_crystal_1"})
end
end
end
end
end
end
end
end)
end