Aaron Suen ba95b0989a Mapgen: lava and water springs.
Rarity values may need to be adjusted.
2020-03-21 09:05:53 -04:00

64 lines
2.2 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local math, minetest, nodecore, pairs
= math, minetest, nodecore, pairs
local math_floor, math_random
= math.floor, math.random
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
minetest.register_ore({
name = "gravel",
ore_type = "blob",
ore = modname .. ":gravel",
wherein = modname .. ":stone",
clust_size = 5,
clust_scarcity = 8 * 8 * 8,
random_factor = 0,
noise_params = {
offset = 0,
scale = 3,
spread = {x = 10, y = 25, z = 10},
seed = 34654,
octaves = 3,
persist = 0.5,
flags = "eased",
},
noise_threshold = 1.2
})
local c_air = minetest.get_content_id("air")
local c_stones = {}
for _, n in pairs(minetest.registered_nodes[modname .. ":stone"].strata) do
c_stones[minetest.get_content_id(n)] = true
end
local function regspring(label, node, rarity)
local c_node = minetest.get_content_id(node)
nodecore.register_mapgen_shared({
label = label,
func = function(minp, maxp, area, data)
local rawqty = math_random() * (maxp.x - minp.x + 1)
* (maxp.z - minp.z + 1) * (maxp.y - minp.y + 1) / rarity
local qty = math_floor(rawqty)
if math_random() < (rawqty - qty) then qty = qty + 1 end
for _ = 1, qty do
local x = math_floor(math_random() * (maxp.x - minp.x + 1)) + minp.x
local y = math_floor(math_random() * (maxp.y - minp.y + 1)) + minp.y
local z = math_floor(math_random() * (maxp.z - minp.z + 1)) + minp.z
if c_stones[data[area:index(x, y, z)]]
and (x < maxp.x and data[area:index(x + 1, y, z)] == c_air
or x > minp.x and data[area:index(x - 1, y, z)] == c_air
or y < maxp.y and data[area:index(x, y + 1, z)] == c_air
or y > minp.y and data[area:index(x, y - 1, z)] == c_air
or z < maxp.z and data[area:index(x, y, z + 1)] == c_air
or z > minp.z and data[area:index(x, y, z - 1)] == c_air)
then data[area:index(x, y, z)] = c_node end
end
end
})
end
local baserarity = 32 * 32 * 32
regspring("water spring", modname .. ":water_source", baserarity)
regspring("lava spring", modname .. ":lava_source", baserarity * 8)