Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
minetest.register_on_mapgen_init(function(mgparams)
minetest.set_mapgen_params({mgname="singlenode", flags="nolight", flagmask="nolight"})
end)
minetest.register_on_generated(function(minp, maxp, seed)
local x1 = maxp.x
local y1 = maxp.y
local z1 = maxp.z
local x0 = minp.x
local y0 = minp.y
local z0 = minp.z
local sidelen = x1 - x0 + 1 -- chunk side length
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local area = VoxelArea:new{MinEdge=emin,MaxEdge=emax}
local data = vm:get_data()
local perlin1 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl1.SCAL1, y=perl1.VSCAL1, z=perl1.SCAL1}, seed=perl1.SEED1, octaves=perl1.OCTA1, persist=perl1.PERS1},
{x=sidelen, y=sidelen, z=sidelen}
)
local perlin3 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl3.SCAL3, y=perl3.SCAL3, z=perl3.SCAL3}, seed=perl3.SEED3, octaves=perl3.OCTA3, persist=perl3.PERS3},
{x=sidelen, y=sidelen, z=sidelen}
)
local perlin4 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl4.SCAL4, y=perl4.VSCAL4, z=perl4.SCAL4}, seed=perl4.SEED4, octaves=perl4.OCTA4, persist=perl4.PERS4},
{x=sidelen, y=sidelen, z=sidelen}
)
local perlin5 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl5.SCAL5, y=perl5.SCAL5, z=perl5.SCAL5}, seed=perl5.SEED5, octaves=perl5.OCTA5, persist=perl5.PERS5},
{x=sidelen, y=sidelen, z=sidelen}
)
local perlin6 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl6.SCAL6, y=perl6.VSCAL6, z=perl6.SCAL6}, seed=perl6.SEED6, octaves=perl6.OCTA6, persist=perl6.PERS6},
{x=sidelen, y=sidelen, z=sidelen}
)
local perlin7 = minetest.get_perlin_map(
{offset=0, scale=1, spread={x=perl7.SCAL7, y=perl7.VSCAL7, z=perl7.SCAL7}, seed=perl7.SEED7, octaves=perl7.OCTA7, persist=perl7.PERS7},
{x=sidelen, y=sidelen, z=sidelen}
)
local nvals1 = perlin1:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local nvals3 = perlin3:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local nvals4 = perlin4:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local nvals5 = perlin5:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local nvals6 = perlin6:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local nvals7 = perlin7:get3dMap_flat({x=minp.x, y=minp.y, z=minp.z})
local ni = 1
for z = z0, z1 do -- for each plane do
for y = y0, y1 do -- for each column do
for x = x0, x1 do -- for each node do
local vi = area:index(x, y, z) -- LVM index for node
local noise1abs = math.abs(nvals1[ni])
local noise4abs = math.abs(nvals4[ni])
local comet = false
if nvals6[ni] < -(ASCOT) or (nvals7[ni] < -(SASCOT) and nvals1[ni] < ASCOT) then
comet = true -- comet biome
end
if noise1abs > ASCOT or noise4abs > SASCOT then -- if below surface then
local noise1dep = noise1abs - ASCOT -- noise1dep zero at surface, positive beneath
if math.abs(nvals3[ni]) > FISTS + noise1dep * FISEXP then -- if no fissure then
local noise4dep = noise4abs - SASCOT -- noise4dep zero at surface, positive beneath
if not comet or (comet and (noise1dep > math.random() + 0.05 or noise4dep > math.random() + 0.05)) then
-- asteroid or asteroid materials in comet
if noise1dep >= STOT or noise4dep >= STOT then
-- stone/ores
if math.random(ORECHA) == 2 then
if nvals5[ni] > 0.6 then
data[vi] = nodeid.mercassium
elseif nvals5[ni] > 0.4 then
data[vi] = nodeid.cortenide
elseif nvals5[ni] > 0.2 then
data[vi] = nodeid.dilithium
elseif nvals5[ni] < -0.6 then
data[vi] = nodeid.tetraburnium
elseif nvals5[ni] < -0.4 then
data[vi] = nodeid.boridium
elseif nvals5[ni] < -0.2 then
data[vi] = nodeid.duranium
else
data[vi] = nodeid.tritanium
end
else
data[vi] = nodeid.stone
end
else
data[vi] = nodeid.dust
end
else -- comet materials
if noise1dep >= ICET or noise4dep >= ICET then
data[vi] = nodeid.waterice
else
data[vi] = nodeid.snode
end
end
end
end
ni = ni + 1
end
end
end
vm:set_data(data)
vm:calc_lighting()
vm:write_to_map(data)
end)
