Finish initial cavegen design

main
Bram van den Heuvel 2024-09-12 18:52:27 +02:00
parent 7f47fb7b81
commit 66a5c55ba7
5 changed files with 987 additions and 0 deletions

865
init.lua Normal file
View File

@ -0,0 +1,865 @@
-- CONSTANTS
local modname = minetest.get_current_modname()
local ORE_COAL = {
name = "coal",
mined = "mcl_core:coal_lump",
molten = "mcl_core:coal_lump",
pick_level = 1,
xp = 1,
fortune = true,
}
local ORE_DIAMOND = {
name = "diamond",
mined = "mcl_core:diamond",
molten = "mcl_core:diamond",
pick_level = 4,
xp = 4,
fortune = true,
}
local ORE_IRON = {
name = "iron",
mined = "mcl_raw_ores:raw_iron",
molten = "mcl_core:iron_ingot",
pick_level = 3,
xp = 0,
fortune = true,
}
local ORE_OSMIUM = {
name = "osmium",
mined = "ns_vl_caves:raw_osmium",
molten = "ns_vl_caves:osmium_ingot",
pick_level = 4,
xp = 8,
}
local ORE_URANIUM = {
name = "uranium",
mined = "ns_vl_caves:raw_uranium",
molten = "ns_vl_caves:uranium_ingot",
pick_level = 4,
xp = 4,
fortune = true,
extra_params = { light_source = 7 },
}
local STONE_MIN = -100
local DEEPSLATE_MAX = STONE_MIN - 1
local DEEPSLATE_MIN = -1000
local LEAGUESCHIST_MAX = DEEPSLATE_MIN - 1
local LEAGUESCHIST_MIN = -2000
local BANDGNEISS_MAX = LEAGUESCHIST_MIN - 1
local BANDGNEISS_MIN = -3000
local WORLD_DEPTH = BANDGNEISS_MIN
-- Does that sound ominous? It better does! We're overwriting this!
local OLD_REGISTER_BIOME = minetest.register_biome
local internal = {}
-- Run once on initialization
function internal.init()
-- Set the world's depth
internal.overworld_depth_to(WORLD_DEPTH)
-- Add custom caves
minetest.register_mapgen_script(
minetest.get_modpath(minetest.get_current_modname()) .. "/mapgen.lua"
)
-- Remove massive v7 caves
internal.stop_v7_caverns()
-- Overwrite register_biome so underground biomes are separated
internal.overwrite_register_biome()
-- Define new ores
internal.register_ore({
name = "Uranium",
hardness = 6,
extra_params = { light_source = minetest.LIGHT_MAX },
extra_raw_params = { light_source = 7 },
})
internal.register_ore({ name = "Osmium", hardness = 9 })
-- Define new deepslate layer nodes
internal.register_stone({
name = "Leagueschist",
description = "Leagueschist is a type of stone that can be found very far down underground.",
hardness = 6,
ores = { ORE_COAL, ORE_IRON, ORE_DIAMOND, ORE_URANIUM },
})
internal.register_stone({
name = "Bandgneiss",
description = "Bandgneiss is a hard compressed type of stone that can be found extremely far down underground.",
hardness = 9,
ores = { ORE_DIAMOND, ORE_URANIUM, ORE_OSMIUM },
})
-- Register tungsten
internal.register_tungsten()
-- Register lava to spawn more frequently the deeper you go
internal.register_lava_pockets()
-- Spawn ores in the world
internal.spawn_coal_ore()
internal.spawn_iron_ore()
internal.spawn_diamond_ore()
internal.spawn_uranium_ore()
internal.spawn_osmium_ore()
end
-- Create a deepcopy of a table
function internal.deepcopy(t)
local new_t = {}
for key, value in pairs(t) do
if type(value) == "table" then
new_t[key] = internal.deepcopy(value)
else
new_t[key] = value
end
end
return new_t
end
-- Merge the second input table into the first
function internal.merge(t1, t2)
for k, v in pairs(t2) do
t1[k] = v
end
return t1
end
-- Generate a node name
function internal.node_name(prefix, name, suffix)
if prefix ~= "" then
prefix = prefix .. "_"
end
if suffix ~= "" then
suffix = "_" .. suffix
end
return modname .. ":" .. prefix .. name:lower() .. suffix
end
-- Register lava to spawn more frequently the deeper you go
function internal.register_lava_pockets()
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_core:lava_source",
wherein = internal.node_name("", "leagueschist", ""),
clust_scarcity = 9000,
clust_num_ores = 1,
clust_size = 1,
y_min = LEAGUESCHIST_MIN,
y_max = LEAGUESCHIST_MAX,
})
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_core:lava_source",
wherein = internal.node_name("", "bandgneiss", ""),
clust_scarcity = 4000,
clust_num_ores = 1,
clust_size = 1,
y_min = BANDGNEISS_MIN,
y_max = BANDGNEISS_MAX,
})
end
-- {
-- -- Material name. Required.
-- name = "Iron",
--
-- -- Time required to cook raw item to ingot. Defaults to 10. Optional.
-- cooktime = 10,
--
-- -- VoxeLibre blast resistance of a block. Optional.
-- -- For reference:
-- -- - Iron has a resistance of 6
-- -- - Diamond has a resistance of 6
-- blast_resistance = 6,
--
-- -- VoxeLibre hardness - how long it takes to break. Optional.
-- -- For reference:
-- -- - Iron has a hardness of 5
-- -- - Diamond has a hardness of 5
-- hardness = 3,
--
-- -- Extra params given to the full ingot block. Optional.
-- extra_params = { stack_max = 16 },
--
-- -- Extra params given to the raw ore block. Optional.
-- extra_raw_params = { sounds = {} },
-- }
function internal.register_ore(def)
def.cooktime = def.cooktime or 10
def.blast_resistance = def.blast_resistance or 6
def.hardness = def.hardness or 5
def.extra_params = def.extra_params or {}
def.extra_raw_params = def.extra_raw_params or {}
assert(type(def.name) == "string")
assert(type(def.cooktime) == "number")
assert(type(def.blast_resistance) == "number")
assert(type(def.hardness) == "number")
assert(type(def.extra_params) == "table")
assert(type(def.extra_raw_params) == "table")
local raw_node = internal.node_name("raw", def.name, "")
local ingot_node = internal.node_name("", def.name, "ingot")
local block_node = internal.node_name("", def.name, "block")
local rblock_node = internal.node_name("raw", def.name, "block")
minetest.register_craftitem(raw_node, {
description = def.name .. " ingot",
_doc_items_longdesc = "Raw version of " .. def.name .. ". It needs to melt before it can be used.",
inventory_image = "ns_vl_caves_raw_" .. def.name:lower() .. ".png",
stack_max = 64,
groups = { craftitem = 1, blast_furnace_smeltable = 1 },
})
minetest.register_craftitem(ingot_node, {
description = def.name .. " ingot",
_doc_items_longdesc = "Molten version of " .. def.name .. " in a pure form.",
inventory_image = "ns_vl_caves_" .. def.name:lower() .. "_ingot.png",
stack_max = 64,
groups = { craftitem = 1 },
})
minetest.register_node(rblock_node,
internal.merge(
{
description = "Raw " .. def.name:lower() .. " block",
_doc_items_longdesc = "Full block of raw " .. def.name:lower() .. ".",
tiles = { "ns_vl_caves_raw_" .. def.name:lower() .. "_block.png" },
is_ground_content = false,
stack_max = 64,
groups = { pickaxey = 2, building_block = 1 },
sounds = mcl_sounds.node_sound_metal_defaults(),
_mcl_blast_resistance = def.blast_resistance,
_mcl_hardness = def.hardness,
},
def.extra_raw_params
)
)
minetest.register_node(block_node,
internal.merge(
{
description = def.name .. " block",
_doc_items_longdesc = "Full block of molten " .. def.name:lower() .. ".",
tiles = { "ns_vl_caves_" .. def.name:lower() .. "_block.png" },
is_ground_content = false,
stack_max = 64,
groups = { pickaxey = 2, building_block = 1 },
sounds = mcl_sounds.node_sound_metal_defaults(),
_mcl_blast_resistance = def.blast_resistance,
_mcl_hardness = def.hardness,
},
def.extra_params
)
)
minetest.register_craft({
type = "cooking",
output = ingot_node,
recipe = raw_node,
cooktime = def.cooktime,
})
minetest.register_craft({
output = block_node,
recipe = {
{ingot_node, ingot_node, ingot_node},
{ingot_node, ingot_node, ingot_node},
{ingot_node, ingot_node, ingot_node},
}
})
minetest.register_craft({
output = ingot_node .. " 9",
recipe = {
{block_node},
}
})
minetest.register_craft({
output = rblock_node,
recipe = {
{raw_node, raw_node, raw_node},
{raw_node, raw_node, raw_node},
{raw_node, raw_node, raw_node},
}
})
minetest.register_craft({
output = raw_node .. " 9",
recipe = {
{rblock_node},
}
})
end
-- Register a new deepslate-like stone type.
-- {
-- -- Name of the deepslate type. Required.
-- name = "deepslate",
--
-- -- Longer description about the node.
-- description = "Deepslate is a cool underground block!"
--
-- -- VoxeLibre blast resistance of a block. Optional.
-- -- For reference:
-- -- - Stone has a resistance of 6
-- -- - Deepslate has a resistance of 6
-- blast_resistance = 6,
--
-- -- VoxeLibre hardness - how long it takes to break. Optional.
-- -- For reference:
-- -- - Stone has a hardness of 1.5
-- -- - Deepslate has a hardness of 3
-- hardness = 3,
--
-- -- Ores that the stone can contain. Optional.
-- ores = {
-- { name = "iron"
-- , mined = "mcl_raw_ores:raw_iron" -- Optional
-- , molten = "mcl_core:iron_ingot" -- Optional
-- , pick_level = 2 -- Optional
-- , xp = 1 -- Optional
-- , fortune = true -- Optional
-- }
-- }
-- }
function internal.register_stone(def)
-- Fill optional values
def.blast_resistance = def.blast_resistance or 6
def.hardness = def.hardness or 3
def.ores = def.ores or {}
def.fortune = def.fortune or false
-- Clean stone definition
assert(type(def.name) == "string")
assert(def.description == nil or type(def.description) == "string")
assert(type(def.blast_resistance) == "number")
assert(type(def.hardness) == "number")
assert(type(def.ores) == "table")
assert(type(def.fortune) == "boolean")
local std_node = internal.node_name("", def.name, "")
local cobbled = internal.node_name("cobbled", def.name, "")
-- Standard block
minetest.register_node(std_node, {
description = def.name,
_doc_items_longdesc = def.description,
tiles = { "ns_vl_caves_" .. def.name:lower() .. ".png" },
is_ground_content = true,
stack_max = 64,
groups = { pickaxey = 1, stone = 1, building_block = 1, material_stone = 1 },
drop = cobbled,
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = def.blast_resistance,
_mcl_hardness = def.hardness,
_mcl_silk_touch_drop = true,
})
-- Cobbled block
minetest.register_node(cobbled, {
description = "Cobbled " .. def.name:lower(),
_doc_items_longdesc = "Cobbled " .. def.name:lower() .. " is a stone variant that functions similar to cobblestone or blackstone.",
tiles = { "ns_vl_caves_cobbled_" .. def.name:lower() .. ".png" },
is_ground_content = true,
stack_max = 64,
groups = { pickaxey = 1, stone = 1, building_block = 1, material_stone = 1 },
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = def.blast_resistance,
_mcl_hardness = 2 * def.hardness / 3,
})
-- Ore blocks
for _, ore in pairs(def.ores) do
ore.extra_params = ore.extra_params or {}
assert(type(ore.name) == "string")
assert(ore.mined == nil or type(ore.mined) == "string")
assert(ore.molten == nil or type(ore.molten) == "string")
assert(ore.pick_level == nil or type(ore.pick_level) == "number")
assert(ore.xp == nil or type(ore.xp) == "number")
assert(type(ore.extra_params) == "table")
local ore_name = internal.node_name("", def.name:lower(), "with_" .. ore.name:lower())
local fortune
if ore.fortune then
fortune = mcl_core.fortune_drop_ore
end
minetest.register_node(ore_name, internal.merge(
{
description = def.name .. " with " .. ore.name:lower() .. " ore",
_doc_items_longdesc = def.name .. " with " .. ore.name:lower() .. " ore is a variant of " .. ore.name .. " ore that can generate underground.",
tiles = { "ns_vl_caves_" .. def.name:lower() .. "_with_" .. ore.name:lower() .. ".png" },
is_ground_content = true,
stack_max = 64,
groups = { pickaxey = ore.pick_level, stone = 1, building_block = 1, material_stone = 1, blast_furnace_smeltable = 1 },
drop = ore.mined,
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = def.blast_resistance / 2,
_mcl_hardness = 2 * def.hardness,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = fortune,
},
ore.extra_params
))
if ore.molten then
minetest.register_craft({
type = "cooking",
output = ore.molten,
recipe = ore_name,
cooktime = 10,
})
end
end
end
function internal.register_tungsten()
local node_name = internal.node_name("", "tungsten", "")
minetest.register_node(node_name, {
description = "Tungsten",
_doc_items_longdesc = "Tungsten is a heavy type of stone that is built from large compressions of heavy particles.",
tiles = { "ns_vl_caves_tungsten.png" },
is_ground_content = true,
stack_max = 64,
groups = { pickaxey = 2, stone = 1, building_block = 1, material_stone = 1 },
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = 10,
_mcl_hardness = 7,
})
minetest.register_ore({
ore_type = "blob",
ore = node_name,
wherein = {
internal.node_name("", "leagueschist", ""),
internal.node_name("", "bandgneiss", "")
},
clust_scarcity = 10*10*10,
clust_num_ores = 58,
clust_size = 7,
y_min = BANDGNEISS_MIN,
y_max = LEAGUESCHIST_MAX,
noise_params = {
offset = 0,
scale = 1,
spread = {x=250, y=250, z=250},
seed = 12345,
octaves = 3,
persist = 0.6,
lacunarity = 2,
flags = "defaults",
}
})
end
-- Lower the world depth
function internal.overworld_depth_to(h)
local oldh = mcl_vars.mg_overworld_min
local diff = h - mcl_vars.mg_overworld_min
-- Lower barriers below the overworld
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_max + diff
mcl_vars.mg_overworld_min = mcl_vars.mg_overworld_min + diff
mcl_vars.mg_end_max = mcl_vars.mg_end_max + diff
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_realm_barrier_overworld_end_max + diff
mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_realm_barrier_overworld_end_min + diff
-- Lower other variables
mcl_vars.mg_lava_overworld_max = mcl_vars.mg_lava_overworld_max + diff
-- -- DEBUG: Find potentially missing variables
-- for k, v in pairs(mcl_vars) do
-- if type(v) == "number" and h < v and v < oldh + 20 then
-- minetest.debug(k .. " = " .. tostring(v))
-- end
-- end
return oldh
end
-- The mcl_biomes mod is written in a way where it's nearly impossible to
-- influence from the outside. For this reason, this function is a hardcoded
-- method of getting in the way of the biome definitions, creating underground
-- biomes that allow for different layers of stone, and more.
function internal.overwrite_register_biome()
minetest.register_biome = function(def)
if def.y_min == WORLD_DEPTH then
local slate_def = internal.deepcopy(def)
local schist_def = internal.deepcopy(def)
local gneiss_def = internal.deepcopy(def)
def.y_min = STONE_MIN
slate_def.name = slate_def.name .. "_deepslate"
slate_def.y_max = DEEPSLATE_MAX
slate_def.y_min = DEEPSLATE_MIN
slate_def.node_stone = "mcl_deepslate:deepslate"
slate_def.vertical_blend = 8
schist_def.name = schist_def.name .. "_deepschist"
schist_def.y_max = LEAGUESCHIST_MAX
schist_def.y_min = LEAGUESCHIST_MIN
schist_def.node_stone = internal.node_name("", "leagueschist", "")
schist_def.vertical_blend = 8
gneiss_def.name = gneiss_def.name .. "_deepgneiss"
gneiss_def.y_max = BANDGNEISS_MAX
gneiss_def.y_min = BANDGNEISS_MIN
gneiss_def.node_stone = internal.node_name("", "bandgneiss", "")
gneiss_def.vertical_blend = 8
OLD_REGISTER_BIOME(def)
OLD_REGISTER_BIOME(slate_def)
OLD_REGISTER_BIOME(schist_def)
OLD_REGISTER_BIOME(gneiss_def)
else
return OLD_REGISTER_BIOME(def)
end
end
end
function internal.spawn_coal_ore()
local deepslate = "mcl_deepslate:deepslate"
local deepslate_ore = "mcl_deepslate:deepslate_with_coal"
local leagueschist = internal.node_name("", "leagueschist", "")
local leagueschist_ore = internal.node_name("", "leagueschist", "with_coal")
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 525*3,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 510*3,
clust_num_ores = 8,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 500*3,
clust_num_ores = 12,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 525*3,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 510*3,
clust_num_ores = 8,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 500*3,
clust_num_ores = 12,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
end
function internal.spawn_diamond_ore()
local deepslate = "mcl_deepslate:deepslate"
local deepslate_ore = "mcl_deepslate:deepslate_with_diamond"
local leagueschist = internal.node_name("", "leagueschist", "")
local leagueschist_ore = internal.node_name("", "leagueschist", "with_diamond")
local bandgneiss = internal.node_name("", "bandgneiss", "")
local bandgneiss_ore = internal.node_name("", "bandgneiss", "with_diamond")
-- DEEPSLATE
-- Rare spawn
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 20000,
clust_num_ores = 1,
clust_size = 1,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 20000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
-- LEAGUESCHIST
-- Common spawn
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 10000,
clust_num_ores = 4,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 5000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 10000,
clust_num_ores = 8,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
-- BANDGNEISS
-- Rare spawn
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 20000,
clust_num_ores = 1,
clust_size = 1,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 20000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
end
function internal.spawn_iron_ore()
local deepslate = "mcl_deepslate:deepslate"
local deepslate_ore = "mcl_deepslate:deepslate_with_iron"
local leagueschist = internal.node_name("", "leagueschist", "")
local leagueschist_ore = internal.node_name("", "leagueschist", "with_iron")
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 830,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = deepslate_ore,
wherein = deepslate,
clust_scarcity = 1660,
clust_num_ores = 4,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 830,
clust_num_ores = 5,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 1660,
clust_num_ores = 4,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 770,
clust_num_ores = 3,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
end
function internal.spawn_osmium_ore()
local bandgneiss = internal.node_name("", "bandgneiss", "")
local bandgneiss_ore = internal.node_name("", "bandgneiss", "with_osmium")
-- Rare spawn
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 20000,
clust_num_ores = 1,
clust_size = 1,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 20000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
end
function internal.spawn_uranium_ore()
local leagueschist = internal.node_name("", "leagueschist", "")
local leagueschist_ore = internal.node_name("", "leagueschist", "with_uranium")
local bandgneiss = internal.node_name("", "bandgneiss", "")
local bandgneiss_ore = internal.node_name("", "bandgneiss", "with_uranium")
-- LEAGUESCHIST
-- Rare spawn
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 20000,
clust_num_ores = 1,
clust_size = 1,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = leagueschist_ore,
wherein = leagueschist,
clust_scarcity = 20000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
-- BANDGNEISS
-- Common spawn
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 10000,
clust_num_ores = 4,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 5000,
clust_num_ores = 2,
clust_size = 2,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
minetest.register_ore({
ore_type = "scatter",
ore = bandgneiss_ore,
wherein = bandgneiss,
clust_scarcity = 10000,
clust_num_ores = 8,
clust_size = 3,
y_min = mcl_vars.mg_overworld_min,
y_max = mcl_vars.mg_overworld_max,
})
end
-- Prevent v7 from spawning large caves underground
function internal.stop_v7_caverns()
local s = minetest.get_mapgen_setting("mgv7_spflags")
if s then
s = s:gsub(", nocaverns", "")
s = s:gsub(", caverns" , "")
s = s:gsub("nocaverns, ", "")
s = s:gsub("caverns, " , "")
s = s:gsub("nocaverns" , "")
s = s:gsub("caverns" , "")
if s == "" then
minetest.set_mapgen_setting("mgv7_spflags", "nocaverns", true)
else
minetest.set_mapgen_setting("mgv7_spflags", s .. ", nocaverns", true)
end
end
end
-- Run main function
internal.init()

122
mapgen.lua Normal file
View File

@ -0,0 +1,122 @@
local WORLD_DEPTH = -3000
function ns_cavegen.cave_vastness(pos)
if pos.y > -5 or pos.y < WORLD_DEPTH then
return 0
end
local y = math.abs(pos.y)
-- Sinusoid shape increase
local amplitude = math.sqrt(y / math.abs(WORLD_DEPTH)) / 2
local period = 1000 / (2 * math.pi)
local offset = 250
local sinusoid_shape = amplitude * (math.sin((y - offset) / period) + 1)
-- Slow increase
local slow_increase = y / math.abs(WORLD_DEPTH)
return 0.2 * slow_increase + 0.8 * sinusoid_shape
end
-- SHAPES
ns_cavegen.register_shape({
name = "ns_vl_caves:bubbles_many",
noise_params = {
offset = 0,
scale = 0.8,
spread = { x = 30, y = 30, z = 30 },
seed = 364802,
octaves = 1,
persistence = 0.2,
lacunarity = 1.0,
flags = "eased",
},
connectivity_point = 44,
verticality_point = 37,
})
ns_cavegen.register_shape({
name = "ns_vl_caves:bubbles",
noise_params = {
offset = 0.2,
scale = 0.6,
spread = { x = 100, y = 100, z = 100 },
seed = 248039,
octaves = 2,
persistence = 0.6,
lacunarity = 2.0,
flags = "eased"
},
connectivity_point = 10,
verticality_point = 20,
})
ns_cavegen.register_shape({
name = "ns_vl_caves:cliffs",
noise_params = {
offset = -0.3,
scale = 0.7,
spread = { x = 40, y = 300, z = 10 },
seed = 1012434,
octaves = 3,
persistence = 0.3,
lacunarity = 3.0,
flags = "eased",
},
connectivity_point = 18,
verticality_point = 96,
})
ns_cavegen.register_shape({
name = "ns_vl_caves:horizontal_spaghetti",
noise_params = {
offset = -0.3,
scale = 0.7,
spread = { x = 300, y = 10, z = 40 },
seed = 73405,
octaves = 3,
persistence = 0.3,
lacunarity = 3.0,
flags = "eased",
},
connectivity_point = 83,
verticality_point = 5,
})
ns_cavegen.register_shape({
name = "ns_vl_caves:sideways_spaghetti",
noise_params = {
offset = -0.3,
scale = 0.7,
spread = { x = 10, y = 40, z = 300 },
seed = 73405,
octaves = 3,
persistence = 0.3,
lacunarity = 3.0,
flags = "eased",
},
connectivity_point = 82,
verticality_point = 4,
})
-- BIOMES
-- ns_cavegen.register_biome({
-- name = "ns_vl_caves:light_floor",
-- -- node_floor = "mcl_crimson:shroomlight",
-- node_dust = "mcl_core:light_14",
-- node_wall = "mcl_nether:glowstone",
-- node_roof = "mcl_crimson:shroomlight",
-- heat_point = 42,
-- humidity_point = 33,
-- })
-- ns_cavegen.register_biome({
-- name = "ns_vl_caves:dark_floor",
-- node_floor = "mcl_core:cobble",
-- node_wall = "mcl_core:cobble",
-- heat_point = 73,
-- humidity_point = 23,
-- })

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B