underch/worldgen.lua

648 lines
34 KiB
Lua

-- used blocks
local c_air = minetest.get_content_id("air")
local c_stone = minetest.get_content_id("default:stone")
local c_water = minetest.get_content_id("default:water_source")
local c_lava = minetest.get_content_id("default:lava_source")
local c_dirt = minetest.get_content_id("default:dirt")
local c_cobble = minetest.get_content_id("default:cobble")
local c_mossycobble = minetest.get_content_id("default:mossycobble")
local c_cobblestair = nil
if underch.have_stairs then
c_cobblestair = minetest.get_content_id("stairs:stair_cobble")
end
local c_coalblock = minetest.get_content_id("default:coalblock")
local c_dust = minetest.get_content_id("underch:dust")
local c_coal_dust = minetest.get_content_id("underch:coal_dust")
local c_ruby_dust = minetest.get_content_id("underch:ruby_dust")
local c_coal_dense_ore = minetest.get_content_id("underch:coal_dense_ore")
local c_iron_dense_ore = minetest.get_content_id("underch:iron_dense_ore")
local c_copper_dense_ore = minetest.get_content_id("underch:copper_dense_ore")
local c_gold_dense_ore = minetest.get_content_id("underch:gold_dense_ore")
local c_coal_diamond = minetest.get_content_id("underch:coal_diamond")
local c_vindesite_quartz_ore = minetest.get_content_id("underch:vindesite_quartz_ore")
local c_burner = minetest.get_content_id("underch:burner")
local c_black_slime = minetest.get_content_id("underch:dynamic_black_slime")
local c_black_slimy_block = minetest.get_content_id("underch:dynamic_black_slimy_block")
local c_green_slime = minetest.get_content_id("underch:dynamic_green_slime")
local c_green_slimy_block = minetest.get_content_id("underch:dynamic_green_slimy_block")
local c_red_slime = minetest.get_content_id("underch:dynamic_red_slime")
local c_red_slimy_block = minetest.get_content_id("underch:dynamic_red_slimy_block")
local c_purple_slime = minetest.get_content_id("underch:dynamic_purple_slime")
local c_purple_slimy_block = minetest.get_content_id("underch:dynamic_purple_slimy_block")
local c_brown_mushroom = minetest.get_content_id("flowers:mushroom_brown")
local c_red_mushroom = minetest.get_content_id("flowers:mushroom_red")
local c_black_mushroom = minetest.get_content_id("underch:black_mushroom")
local c_orange_mushroom = minetest.get_content_id("underch:orange_mushroom")
local c_green_mushroom = minetest.get_content_id("underch:green_mushroom")
local c_burning_mushroom = minetest.get_content_id("underch:burning_mushroom")
local c_dark_tuber = minetest.get_content_id("underch:dark_tuber")
local c_dark_sichamine = minetest.get_content_id("underch:dark_sichamine")
local c_weedy_sichamine = minetest.get_content_id("underch:weedy_sichamine")
local c_sichamine_lamp = minetest.get_content_id("underch:sichamine_lamp")
local c_mossy_dirt = minetest.get_content_id("underch:mossy_dirt")
local c_torchberries = minetest.get_content_id("underch:torchberries")
local c_moss = minetest.get_content_id("underch:moss")
local c_dry_moss = minetest.get_content_id("underch:dry_moss")
local c_underground_bush = minetest.get_content_id("underch:underground_bush")
local c_dead_bush = minetest.get_content_id("underch:dead_bush")
local c_mould = minetest.get_content_id("underch:mould")
local c_underground_vine = minetest.get_content_id("underch:underground_vine")
local c_amethyst_ore = minetest.get_content_id("underch:amethyst_ore")
local c_amethyst_crystal = minetest.get_content_id("underch:amethyst_crystal")
local c_emerald_ore = minetest.get_content_id("underch:emerald_ore")
local c_emerald_crystal = minetest.get_content_id("underch:emerald_crystal")
local c_ruby_ore = minetest.get_content_id("underch:ruby_ore")
local c_ruby_crystal = minetest.get_content_id("underch:ruby_crystal")
local c_saphire_ore = minetest.get_content_id("underch:saphire_ore")
local c_saphire_crystal = minetest.get_content_id("underch:saphire_crystal")
local c_aquamarine_ore = minetest.get_content_id("underch:aquamarine_ore")
local c_aquamarine_crystal = minetest.get_content_id("underch:aquamarine_crystal")
local c_quartz_ore = minetest.get_content_id("underch:quartz_ore")
local c_quartz_crystal = minetest.get_content_id("underch:quartz_crystal")
local c_mese_crystal = minetest.get_content_id("underch:mese_crystal")
local c_fire = minetest.get_content_id("fire:permanent_flame")
local c_fiery_dust = minetest.get_content_id("underch:fiery_dust")
local c_fiery_vine = minetest.get_content_id("underch:fiery_vine")
local c_lava_crack = minetest.get_content_id("underch:lava_crack")
local c_quartz_block = minetest.get_content_id("underch:quartz_block")
local c_aquamarine_block = minetest.get_content_id("underch:aquamarine_block")
local c_amethyst_block = minetest.get_content_id("underch:amethyst_block")
local c_malachite = minetest.get_content_id("underch:malachite")
local c_shinestone = minetest.get_content_id("underch:shinestone")
local c_basalt = minetest.get_content_id("underch:basalt")
local c_obsidian = minetest.get_content_id("default:obsidian")
local c_obscurite = minetest.get_content_id("underch:obscurite")
local c_dynamic_malachite = minetest.get_content_id("underch:dynamic_malachite")
local c_dynamic_shinestone = minetest.get_content_id("underch:dynamic_shinestone")
local c_dynamic_basalt = minetest.get_content_id("underch:dynamic_basalt")
local c_dynamic_obsidian = minetest.get_content_id("underch:dynamic_obsidian")
local c_dynamic_lava_crack = minetest.get_content_id("underch:dynamic_lava_crack")
local c_dynamic_underground_bush = minetest.get_content_id("underch:dynamic_underground_bush")
local c_dynamic_vindesite = minetest.get_content_id("underch:dynamic_vindesite")
local c_dynamic_dark_vindesite = minetest.get_content_id("underch:dynamic_dark_vindesite")
local c_dynamic_mossy_dirt = minetest.get_content_id("underch:dynamic_mossy_dirt")
local c_dynamic_jungle = minetest.get_content_id("underch:dynamic_jungle")
local c_dynamic_jungleg = minetest.get_content_id("underch:dynamic_jungleg")
local c_dynamic_sticks = minetest.get_content_id("underch:dynamic_sticks")
local c_dynamic_fire = minetest.get_content_id("underch:dynamic_fire")
local c_dynamic_fs = minetest.get_content_id("underch:dynamic_fs")
local c_dynamic_fo = minetest.get_content_id("underch:dynamic_fo")
local c_dynamic_fp = minetest.get_content_id("underch:dynamic_fp")
local c_dynamic_fa = minetest.get_content_id("underch:dynamic_fa")
--[[local c_amphibolite = minetest.get_content_id("underch:amphibolite")
local c_andesite = minetest.get_content_id("underch:andesite")
local c_aplite = minetest.get_content_id("underch:aplite")
local c_basalt = minetest.get_content_id("underch:basalt")
local c_dark_vindesite = minetest.get_content_id("underch:dark_vindesite")
local c_diorite = minetest.get_content_id("underch:diorite")
local c_dolomite = minetest.get_content_id("underch:dolomite")
local c_gabbro = minetest.get_content_id("underch:gabbro")
local c_gneiss = minetest.get_content_id("underch:gneiss")
local c_granite = minetest.get_content_id("underch:granite")
local c_green_slimestone = minetest.get_content_id("underch:green_slimestone")
local c_hektorite = minetest.get_content_id("underch:hektorite")
local c_limestone = minetest.get_content_id("underch:limestone")
local c_marble = minetest.get_content_id("underch:marble")
local c_pegmatite = minetest.get_content_id("underch:pegmatite")
local c_peridotite = minetest.get_content_id("underch:peridotite")
local c_phonolite = minetest.get_content_id("underch:phonolite")
local c_phylite = minetest.get_content_id("underch:phylite")
local c_purple_slimestone = minetest.get_content_id("underch:purple_slimestone")
local c_basalt = minetest.get_content_id("underch:basalt")
local c_quartzite = minetest.get_content_id("underch:quartzite")
local c_basalt = minetest.get_content_id("underch:basalt")
local c_red_slimestone = minetest.get_content_id("underch:red_slimestone")
local c_schist = minetest.get_content_id("underch:schist")
local c_sichamine = minetest.get_content_id("underch:sichamine")
local c_slate = minetest.get_content_id("underch:slate")
local c_vindesite = minetest.get_content_id("underch:vindesite")--]]
function underch.use_stone(vi, data, id)
underch.functions.replace(vi, data, c_stone, underch.stone.defs[id].base)
underch.functions.replace(vi, data, c_cobble, underch.stone.defs[id].cobble)
underch.functions.replace(vi, data, c_mossycobble, underch.stone.defs[id].mossy)
underch.functions.replace(vi, data, c_cobblestair, underch.stone.defs[id].stair)
end
-- Biome definitions
underch.biomegen = {
--dolomite
[1] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "dolomite")
end,
--limestone
[2] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "limestone")
end,
--schist
[3] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "schist")
end,
--andesite
[4] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "andesite")
end,
--phylite
[5] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phylite")
end,
--quartzite
[6] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "quartzite")
end,
--amphibolite
[7] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "amphibolite")
end,
--slate
[8] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "slate")
end,
--gneiss
[9] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "gneiss")
end,
--phonolite
[10] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phonolite")
end,
--aplite
[11] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "aplite")
end,
--basalt
[12] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "basalt")
end,
--diorite
[13] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "diorite")
end,
--pegmatite
[14] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "pegmatite")
end,
--granite
[15] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "granite")
end,
--gabbro
[16] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "gabbro")
end,
--cave
[17] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "dolomite")
underch.functions.ore(vi, data, underch.stone.defs["dolomite"].base, c_water, 1/2000)
end,
--dust
[18] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "limestone")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dust, 1, underch.stone.defs["limestone"].base)
end,
--coal
[19] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "amphibolite")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_coal_dust, 1/9, underch.stone.defs["amphibolite"].base)
--underch.functions.ore(vi, data, underch.stone.defs["amphibolite"].base, c_coal_dust, 1/9)
underch.functions.ore(vi, data, underch.stone.defs["amphibolite"].base, c_coal_dense_ore, 1/201)
end,
--vindesite
[20] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "vindesite")
underch.functions.ore(vi, data, underch.stone.defs["vindesite"].base, c_vindesite_quartz_ore, 1/50)
underch.functions.on_floor(x, y, z, vi, area, data, underch.stone.defs["vindesite"].base, c_air, c_black_mushroom, 1/18)
end,
--fungi
[21] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phylite")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_brown_mushroom, 1/18, underch.stone.defs["phylite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_red_mushroom, 1/18, underch.stone.defs["phylite"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_mould, 1/9, lastlayer, underch.stone.defs["phylite"].base)
underch.functions.ore(vi, data, underch.stone.defs["phylite"].base, c_water, 1/2000)
end,
--torchberries
[22] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phonolite")
underch.functions.on_roof(x, y, z, vi, area, data, c_stone, c_air, c_torchberries, 1/30, lastlayer, underch.stone.defs["phonolite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_brown_mushroom, 1/18, underch.stone.defs["phonolite"].base)
underch.functions.ore(vi, data, underch.stone.defs["phonolite"].base, c_water, 1/2000)
end,
--tubers
[23] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "schist")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_black_mushroom, 1/18, underch.stone.defs["schist"].base)
underch.functions.on_floor_rr(x, y, z, vi, area, data, p2data, c_stone, c_air, c_dark_tuber, 1/50, underch.stone.defs["schist"].base)
underch.functions.ore(vi, data, underch.stone.defs["schist"].base, c_coal_dense_ore, 1/201)
underch.functions.ore(vi, data, underch.stone.defs["schist"].base, c_water, 1/2000)
end,
--black slime
[24] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "slate")
underch.functions.ore(vi, data, underch.stone.defs["slate"].base, c_black_slimy_block, 1/1000)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_black_slime, 1/300, underch.stone.defs["slate"].base)
end,
--quartz
[25] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "diorite")
underch.functions.ore(vi, data, underch.stone.defs["diorite"].base, c_quartz_ore, 1/50)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_quartz_crystal, 1/50, lastlayer, underch.stone.defs["diorite"].base)
underch.functions.ore(vi, data, underch.stone.defs["diorite"].base, c_water, 1/2000)
end,
--emerald
[26] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phonolite")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_green_mushroom, 1/18, underch.stone.defs["phonolite"].base)
underch.functions.ore(vi, data, underch.stone.defs["phonolite"].base, c_emerald_ore, 1/201)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_emerald_crystal, 1/201, lastlayer, underch.stone.defs["phonolite"].base)
end,
--moss
[27] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "basalt")
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_moss, 1/3, lastlayer, underch.stone.defs["basalt"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_dirt, c_air, c_moss, 1/3, lastlayer)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_brown_mushroom, 1/18, underch.stone.defs["basalt"].base)
underch.functions.ore(vi, data, underch.stone.defs["basalt"].cobble, underch.stone.defs["basalt"].mossy, 3/4)
underch.functions.ore(vi, data, underch.stone.defs["basalt"].base, c_water, 1/2000)
end,
--green slime
[28] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "green_slimestone")
underch.functions.ore(vi, data, underch.stone.defs["green_slimestone"].base, c_green_slimy_block, 1/1000)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_green_slime, 1/300, underch.stone.defs["green_slimestone"].base)
end,
--sichamine
[29] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "sichamine")
--underch.functions.ore(vi, data, c_sichamine, c_weedy_sichamine, 1/3)
underch.functions.ore(vi, data, underch.stone.defs["sichamine"].base, c_sichamine_lamp, 1/25)
if y < 0 then
underch.functions.replace(vi, data, c_air, c_water)
end
end,
--sichamine shadow
[30] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "sichamine")
--underch.functions.ore(vi, data, c_sichamine, c_weedy_sichamine, 1/3)
underch.functions.ore(vi, data, underch.stone.defs["sichamine"].base, c_dark_sichamine, 1/9)
if y < 0 then
underch.functions.replace(vi, data, c_air, c_water)
end
end,
--torchberries + jungle
[31] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "granite")
underch.functions.on_roof(x, y, z, vi, area, data, c_stone, c_air, c_torchberries, 1/30, lastlayer, underch.stone.defs["granite"].base)
underch.functions.ore(vi, data, underch.stone.defs["granite"].base, c_dynamic_mossy_dirt, 1/100)
end,
--jungle
[32] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "andesite")
underch.functions.ore(vi, data, underch.stone.defs["andesite"].base, c_dynamic_jungle, 1/100)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_mould, 1/9, lastlayer, underch.stone.defs["andesite"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_underground_vine, 1/15, lastlayer, underch.stone.defs["andesite"].base)
underch.functions.ore(vi, data, underch.stone.defs["andesite"].base, c_water, 1/2000)
end,
--lava springs
[33] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "marble")
underch.functions.ore(vi, data, underch.stone.defs["marble"].base, c_lava, 1/2000)
end,
--flames
[34] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phonolite")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_fire, 1/300, underch.stone.defs["phonolite"].base)
--underch.functions.ore(vi, data, underch.stone.defs["phonolite"].base, c_fiery_dust, 1/9)
--underch.functions.on_floor(x, y, z, vi, area, data, c_fiery_dust, c_air, c_fire, 2/3)
end,
--fiery vines
[35] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "schist")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_fs, 1/300, underch.stone.defs["schist"].base)
--underch.functions.ore(vi, data, underch.stone.defs["schist"].base, c_fiery_dust, 1/9)
--underch.functions.ore(vi, data, underch.stone.defs["schist"].base, c_coal_dust, 1/9)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_coal_dust, 1/9, underch.stone.defs["schist"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_fiery_vine, 1/15, lastlayer, underch.stone.defs["schist"].base)
end,
--darkness
[36] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "dark_vindesite")
underch.functions.ore(vi, data, underch.stone.defs["dark_vindesite"].base, c_burner, 1/15)
underch.functions.on_floor(x, y, z, vi, area, data, underch.stone.defs["dark_vindesite"].base, c_air, c_black_mushroom, 1/18)
end,
--fungi 2
[37] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "phylite")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_brown_mushroom, 1/40, underch.stone.defs["phylite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_red_mushroom, 1/40, underch.stone.defs["phylite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_black_mushroom, 1/20, underch.stone.defs["phylite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_green_mushroom, 1/20, underch.stone.defs["phylite"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_mould, 1/9, lastlayer, underch.stone.defs["phylite"].base)
underch.functions.ore(vi, data, underch.stone.defs["phylite"].base, c_water, 1/2000)
end,
--omphyrite
[38] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "omphyrite")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_fo, 1/300, underch.stone.defs["omphyrite"].base)
--underch.functions.ore(vi, data, underch.stone.defs["omphyrite"].base, c_fiery_dust, 1/13)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_burning_mushroom, 1/18, underch.stone.defs["omphyrite"].base)
end,
--fiery fungi
[39] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "pegmatite")
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_fp, 1/300, underch.stone.defs["pegmatite"].base)
--underch.functions.ore(vi, data, c_stone, c_fiery_dust, 1/23)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_fiery_vine, 1/15, lastlayer, underch.stone.defs["pegmatite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_burning_mushroom, 1/18, underch.stone.defs["pegmatite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_orange_mushroom, 1/18, underch.stone.defs["pegmatite"].base)
end,
--purple slime
[40] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "purple_slimestone")
underch.functions.ore(vi, data, underch.stone.defs["purple_slimestone"].base, c_purple_slimy_block, 1/300)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_purple_slime, 1/300, underch.stone.defs["purple_slimestone"].base)
end,
--mese + saphire
[41] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "gneiss")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_green_mushroom, 1/18, underch.stone.defs["gneiss"].base)
underch.functions.ore(vi, data, underch.stone.defs["gneiss"].base, c_saphire_ore, 1/201)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_saphire_crystal, 1/201, lastlayer, underch.stone.defs["gneiss"].base)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_mese_crystal, 1/201, lastlayer, underch.stone.defs["gneiss"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_underground_vine, 1/15, lastlayer, underch.stone.defs["gneiss"].base)
underch.functions.ore(vi, data, underch.stone.defs["gneiss"].base, c_water, 1/2000)
end,
--ruby
[42] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "granite")
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_orange_mushroom, 1/18, underch.stone.defs["granite"].base)
underch.functions.ore(vi, data, underch.stone.defs["granite"].base, c_ruby_ore, 1/201)
underch.functions.in_floor(x, y, z, vi, area, data, c_air, c_stone, c_ruby_dust, 1/450, underch.stone.defs["granite"].base)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_ruby_crystal, 1/201, lastlayer, underch.stone.defs["granite"].base)
underch.functions.ore(vi, data, underch.stone.defs["granite"].base, c_water, 1/2000)
end,
--sticks
[43] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "basalt")
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_dry_moss, 1/3, lastlayer, underch.stone.defs["basalt"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_dirt, c_air, c_dry_moss, 1/3, lastlayer)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_orange_mushroom, 1/18, underch.stone.defs["basalt"].base)
underch.functions.ore(vi, data, underch.stone.defs["basalt"].base, c_dynamic_sticks, 1/200)
end,
--red slime
[44] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "red_slimestone")
underch.functions.ore(vi, data, underch.stone.defs["red_slimestone"].base, c_red_slimy_block, 1/300)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_red_slime, 1/300, underch.stone.defs["red_slimestone"].base)
end,
--hot water
[45] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "sichamine")
underch.functions.ore(vi, data, underch.stone.defs["sichamine"].base, c_sichamine_lamp, 1/25)
underch.functions.ore(vi, data, underch.stone.defs["sichamine"].base, c_hektorite, 1/50)
underch.functions.ore(vi, data, underch.stone.defs["sichamine"].base, c_lava_crack, 1/50)
underch.functions.replace(vi, data, c_air, c_water)
end,
--aquamarine + amethyst
[46] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "diorite")
underch.functions.ore(vi, data, underch.stone.defs["diorite"].base, c_aquamarine_ore, 1/50)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_aquamarine_crystal, 1/50, lastlayer, underch.stone.defs["diorite"].base)
underch.functions.ore(vi, data, underch.stone.defs["diorite"].base, c_amethyst_ore, 1/50)
underch.functions.on_wall_f(x, y, z, vi, area, data, p2data, c_stone, c_air, c_amethyst_crystal, 1/50, lastlayer, underch.stone.defs["diorite"].base)
underch.functions.ore(vi, data, underch.stone.defs["diorite"].base, c_water, 1/2000)
end,
--fiery vines + jungle
[47] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "andesite")
underch.functions.ore(vi, data, underch.stone.defs["andesite"].base, c_dynamic_jungle, 1/100)
--underch.functions.ore(vi, data, underch.stone.defs["andesite"].base, c_fiery_dust, 1/9)
underch.functions.in_floor(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_fa, 1/300, underch.stone.defs["andesite"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_fiery_vine, 1/15, lastlayer, underch.stone.defs["andesite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_red_mushroom, 1/27, underch.stone.defs["andesite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_brown_mushroom, 1/27, underch.stone.defs["andesite"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_orange_mushroom, 1/27, underch.stone.defs["andesite"].base)
end,
--lava + jungle
[48] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "gabbro")
underch.functions.ore(vi, data, underch.stone.defs["gabbro"].base, c_dynamic_jungleg, 1/100)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_burning_mushroom, 1/18, underch.stone.defs["gabbro"].base)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_orange_mushroom, 1/18, underch.stone.defs["gabbro"].base)
underch.functions.on_wall_w(x, y, z, vi, area, data, p2data, c_stone, c_air, c_underground_vine, 1/15, lastlayer, underch.stone.defs["gabbro"].base)
underch.functions.ore(vi, data, underch.stone.defs["gabbro"].base, c_lava, 1/5000)
end,
--lava cracks
[49] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "omphyrite")
underch.functions.ore(vi, data, underch.stone.defs["omphyrite"].base, c_lava_crack, 1/18)
underch.functions.ore(vi, data, underch.stone.defs["omphyrite"].base, c_lava, 1/1000)
end,
--diamonds
[50] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "afualite")
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_coalblock, 1/18)
underch.functions.ore(vi, data, c_coalblock, c_coal_diamond, 1/72)
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_lava, 1/1000)
end,
--vindesite + lava
[51] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "afualite")
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_dynamic_vindesite, 1/300)
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_dynamic_dark_vindesite, 1/300)
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_lava, 1/1000)
end,
--copper
[52] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "gneiss")
underch.functions.ore(vi, data, underch.stone.defs["gneiss"].base, c_copper_dense_ore, 1/201)
underch.functions.ore(vi, data, underch.stone.defs["gneiss"].base, c_lava, 1/1000)
end,
--hektorite + lava
[53] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "hektorite")
underch.functions.ore(vi, data, c_hektorite, c_lava, 1/1000)
end,
--gold
[54] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "basalt")
underch.functions.ore(vi, data, underch.stone.defs["basalt"].base, c_gold_dense_ore, 1/407)
underch.functions.ore(vi, data, underch.stone.defs["basalt"].base, c_lava, 1/1000)
end,
--quartz + water
[55] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.functions.replace(vi, data, c_stone, c_quartz_block)
underch.functions.ore(vi, data, c_quartz_block, c_aquamarine_block, 1/4)
underch.functions.ore(vi, data, c_quartz_block, c_amethyst_block, 1/3)
underch.functions.ore(vi, data, c_quartz_block, c_sichamine_lamp, 1/25)
underch.functions.replace(vi, data, c_air, c_water)
underch.use_stone(vi, data, "sichamine")
end,
--iron
[56] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "granite")
underch.functions.ore(vi, data, underch.stone.defs["granite"].base, c_iron_dense_ore, 1/207)
underch.functions.ore(vi, data, underch.stone.defs["granite"].base, c_lava, 1/1000)
end,
--malachite
[57] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "peridotite")
underch.functions.ore(vi, data, underch.stone.defs["peridotite"].base, c_dynamic_malachite, 1/300)
underch.functions.on_floor(x, y, z, vi, area, data, c_stone, c_air, c_burning_mushroom, 1/18, underch.stone.defs["peridotite"].base)
underch.functions.ore(vi, data, underch.stone.defs["peridotite"].base, c_lava, 1/1000)
end,
--shinestone
[58] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "hektorite")
underch.functions.on_roof(x, y, z, vi, area, data, c_stone, c_air, c_dynamic_shinestone, 1/50, lastlayer, underch.stone.defs["hektorite"].base)
underch.functions.ore(vi, data, underch.stone.defs["hektorite"].base, c_lava, 1/300)
end,
--obsidian
[59] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "afualite")
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_dynamic_obsidian, 1/20)
underch.functions.ore(vi, data, underch.stone.defs["afualite"].base, c_lava, 1/300)
end,
--lava
[60] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "emutite")
underch.functions.replace(vi, data, c_air, c_lava)
end,
--basalt
[61] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.use_stone(vi, data, "peridotite")
underch.functions.ore(vi, data, underch.stone.defs["peridotite"].base, c_dynamic_basalt, 1/200)
underch.functions.ore(vi, data, underch.stone.defs["peridotite"].base, c_lava, 1/300)
end,
--obscurite
[62] = function(x, y, z, vi, data, p2data, area, lastlayer)
underch.functions.replace(vi, data, c_stone, c_obscurite)
underch.functions.replace(vi, data, c_cobble, c_obscurite)
underch.functions.replace(vi, data, c_air, c_lava)
underch.use_stone(vi, data, "emutite")
end,
}
local np_darkness = {
offset = 0,
scale = 1,
spread = {x=200, y=200, z=200},
seed = 6830,
octaves = 3,
persist = 0.5
}
local np_water = {
offset = 0,
scale = 1,
spread = {x=200, y=200, z=200},
seed = 6831,
octaves = 3,
persist = 0.5
}
local np_pressure = {
offset = 0,
scale = 1,
spread = {x=200, y=200, z=200},
seed = 6832,
octaves = 3,
persist = 0.5
}
minetest.register_on_generated(function(minp, maxp, seed)
--easy reference to commonly used values
--local t1 = os.clock()
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 vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
local data = vm:get_data()
local p2data = vm:get_param2_data()
--mandatory values
local sidelen = x1 - x0 + 1 --length of a mapblock
local chulens = {x=sidelen, y=sidelen, z=sidelen} --table of chunk edges
local chulens2D = {x=sidelen, y=sidelen, z=1}
local minposxyz = {x=x0, y=y0, z=z0} --bottom corner
local minposxz = {x=x0, y=z0} --2D bottom corner
local nvals_darkness = minetest.get_perlin_map(np_darkness, chulens):get3dMap_flat(minposxyz)
local nvals_water = minetest.get_perlin_map(np_water, chulens):get3dMap_flat(minposxyz)
local nvals_pressure = minetest.get_perlin_map(np_pressure, chulens):get3dMap_flat(minposxyz)
local nixyz = 1 --3D node index
local nixz = 1 --2D node index
local nixyz2 = 1 --second 3D index for second loop
for z = z0, z1 do -- for each xy plane progressing northwards
--increment indices
nixyz = nixyz + 1
for y = y0, y1 do -- for each x row progressing upwards
local vi = area:index(x0, y, z)
for x = x0, x1 do -- for each node do
local darkness = nvals_darkness[nixyz2]
local water = nvals_water[nixyz2]
local pressure = underch.functions.get_pressure(y, nvals_pressure[nixyz2])
--[[if y > -100 then -- limit the biome variety near surface
darkness = -0.01*y*darkness - 1 - 0.01*y
water = -0.01*y*water - 1 - 0.01*y
end--]]
local biome = underch.functions.get_biome(darkness, water, pressure) + 1
if (biome < 1) or (biome > 62) then
print(string.format("Wrong biome %i", biome))
biome = 1
end
underch.biomegen[biome](x, y, z, vi, data, p2data, area, y == y1)
nixyz2 = nixyz2 + 1
nixz = nixz + 1
vi = vi + 1
end
nixz = nixz - sidelen --shift the 2D index back
end
nixz = nixz + sidelen --shift the 2D index up a layer
end
--send data back to voxelmanip
vm:set_data(data)
vm:set_param2_data(p2data)
--calc lighting
vm:set_lighting({day=0, night=0})
vm:calc_lighting()
--write it to world
vm:write_to_map(data)
--local chugent = math.ceil((os.clock() - t1) * 1000) --grab how long it took
--print ("[caverealms] "..chugent.." ms") --tell people how long
end)