moonrealm/mapgen.lua

212 lines
4.5 KiB
Lua

-- Clear stuff
minetest.clear_registered_biomes()
minetest.clear_registered_ores()
minetest.clear_registered_decorations()
-- Set mapgen settings
minetest.set_mapgen_setting("mg_name", "v7", true)
minetest.set_mapgen_setting("water_level", -15, true)
minetest.set_mapgen_setting("mg_flags", "caves,nodungeons,light,nodecorations", true)
-- Register biome
minetest.register_biome({
name = "moon",
--node_dust = "",
node_top = "moonrealm:dust",
depth_top = 1,
node_filler = "moonrealm:dust",
depth_filler = 2,
node_stone = "moonrealm:stone",
--node_water_top = "",
--depth_water_top = ,
node_water = "moonrealm:dust",
--node_river_water = "",
--node_riverbed = "",
--depth_riverbed = ,
y_min = -31000,
y_max = 31000,
heat_point = 50,
humidity_point = 50,
})
-- Register ores
-- Iron
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:ironore",
wherein = "moonrealm:stone",
clust_scarcity = 7 * 7 * 7,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = 0,
})
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:ironore",
wherein = "moonrealm:stone",
clust_scarcity = 24 * 24 * 24,
clust_num_ores = 27,
clust_size = 6,
y_min = -31000,
y_max = -64,
})
-- Copper
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:copperore",
wherein = "moonrealm:stone",
clust_scarcity = 12 * 12 * 12,
clust_num_ores = 4,
clust_size = 3,
y_min = -63,
y_max = -16,
})
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:copperore",
wherein = "moonrealm:stone",
clust_scarcity = 9 * 9 * 9,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -64,
})
-- Gold
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:goldore",
wherein = "moonrealm:stone",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 3,
clust_size = 2,
y_min = -255,
y_max = -64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:goldore",
wherein = "moonrealm:stone",
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Mese block
minetest.register_ore({
ore_type = "scatter",
ore = "default:mese",
wherein = "moonrealm:stone",
clust_scarcity = 18 * 18 * 18,
clust_num_ores = 3,
clust_size = 2,
y_min = -255,
y_max = -64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:mese",
wherein = "moonrealm:stone",
clust_scarcity = 14 * 14 * 14,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Diamond
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:diamondore",
wherein = "moonrealm:stone",
clust_scarcity = 17 * 17 * 17,
clust_num_ores = 4,
clust_size = 3,
y_min = -255,
y_max = -128,
})
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:diamondore",
wherein = "moonrealm:stone",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 4,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Water ice
minetest.register_ore({
ore_type = "scatter",
ore = "moonrealm:waterice",
wherein = "moonrealm:dust",
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 1,
clust_size = 1,
y_min = -31000,
y_max = 0,
})
-- Localise data buffer
local dbuf = {}
-- On generated function
-- Convert air nodes to mod vacuum nodes
minetest.register_on_generated(function(minp, maxp, seed)
local x0 = minp.x
local y0 = minp.y
local z0 = minp.z
local x1 = maxp.x
local y1 = maxp.y
local z1 = maxp.z
local c_air = minetest.CONTENT_AIR
local c_vacuum = minetest.get_content_id("moonrealm:vacuum")
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax}
local data = vm:get_data(dbuf)
for z = z0, z1 do
for y = y0 - 1, y1 + 1 do
local vi = area:index(x0, y, z)
for x = x0, x1 do
if data[vi] == c_air then
data[vi] = c_vacuum
end
vi = vi + 1
end
end
end
vm:set_data(data)
vm:write_to_map(data)
end)