write something there

This commit is contained in:
N-Nachtigal 2025-05-04 16:01:41 +02:00
commit b4b6c08f4f
8546 changed files with 309825 additions and 0 deletions

View file

@ -0,0 +1,26 @@
Copyright (c) 2017, Craig Robbins and contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.

31
mods/caverealms/README.md Normal file
View file

@ -0,0 +1,31 @@
# caverealms-lite
Based on the original minetest-caverealms mod (https://github.com/HeroOfTheWinds/minetest-caverealms/).
Adds underground realms to minetest.
This caverealms fork provides all the biomes and decorations from the original caverealms, with several additions and without the overhead of generating caves. This lowers the server resources the mod requires, for example CPU and RAM. This also removes the large lava spills created by the original caverealms.
It is specifically written to work with the mgvalleys mapgen, but will work using other mapgens as well. The mapgen used will determine the shape and size of individual caves. Mapgens that generate only smaller caves may be less suitable for use with this fork than mgvalleys.
Note: For worlds where the original caverealms is already in use, this fork is not advised as a replacement. If used in this way, some unknown nodes and other minor issues should be expected.
## License and Contributors
Source code: FreeBSD License (Simplified)
The original caverealms was licensed as WTFPL.
Contributors:
- Zeno, Shara RedCat - This rewrite
- HeroOfTheWinds, Zeno - Original mod
## Recommended Additions
- VanessaE's HDX texturepacks provide alternative textures. For example,
https://gitlab.com/VanessaE/hdx-128.
- ethereal mod unlocks additional content (https://notabug.org/tenplus1/ethereal).
- mobs_monster mod allows Dungeon Masters to spawn in the Dungeon Master's Lair biome (https://notabug.org/tenplus1/mobs_monster).
- mobs_redo is required to run mobs_monster (https://notabug.org/tenplus1/mobs_redo).
- abritorch adds coloured torches made with caverealms items (https://github.com/Ezhh/abritorch).

661
mods/caverealms/biomes.lua Normal file
View file

@ -0,0 +1,661 @@
--[[
Biomes defined via the Minetest Biome API
]]
local mpath = minetest.get_modpath("caverealms")
local spath = mpath .. "/schematics/"
-- Moss cave
local moss_cave_surface = {
"caverealms:stone_with_moss",
}
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.moss,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = moss_cave_surface,
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = moss_cave_surface,
spawn_by = moss_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.moss,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "emerald_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.moss,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "emerald_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = moss_cave_surface,
spawn_by = moss_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.moss,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "sapphire_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.moss,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "sapphire_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = moss_cave_surface,
fill_ratio = 0.00625,
biomes = asuna.features.cave.moss,
y_max = 0,
y_min = -31000,
decoration = "caverealms:glow_gem",
flags = "all_floors",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 0.0175,
biomes = asuna.features.cave.moss,
y_max = 0,
y_min = -31000,
height = 2,
height_max = 4,
decoration = "caverealms:glow_worm",
flags = "all_ceilings",
})
-- Fungal cave
local fungal_cave_surface = {
"caverealms:stone_with_lichen",
}
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = fungal_cave_surface,
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = fungal_cave_surface,
spawn_by = fungal_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.fungal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "emerald_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.fungal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "emerald_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = fungal_cave_surface,
spawn_by = fungal_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.fungal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.fungal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = fungal_cave_surface,
fill_ratio = 0.0005,
biomes = asuna.features.cave.fungal,
y_max = -16,
y_min = -31000,
schematic = spath .. "shroom.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = fungal_cave_surface,
fill_ratio = 0.025,
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
decoration = "caverealms:fungus",
flags = "all_floors",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = fungal_cave_surface,
fill_ratio = 0.025,
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
decoration = "caverealms:mycena",
flags = "all_floors",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 0.0175,
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
height = 2,
height_max = 4,
decoration = "caverealms:glow_worm_green",
flags = "all_ceilings",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 16,
place_on = "default:stone",
noise_params = {
offset = -0.227,
scale = 0.385,
spread = {x = 9, y = 9, z = 9},
seed = seed,
octaves = 2,
persist = 0.65,
lacunarity = 0.69,
},
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
height_max = 2,
decoration = "ethereal:mushroom",
flags = "all_ceilings,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = fungal_cave_surface,
fill_ratio = 0.00095,
biomes = asuna.features.cave.fungal,
y_max = 0,
y_min = -31000,
decoration = {
"flowers:mushroom_red",
"flowers:mushroom_brown",
"herbs:mushroom_boletus",
"herbs:mushroom_cantharellus",
"herbs:mushroom_macrolepiota",
"herbs:mushroom_amanita_green",
"herbs:mushroom_gyromitra",
"herbs:mushroom_galerina",
},
flags = "all_floors",
})
-- Coal/desert cave
local desert_cave_surface = {
"default:desert_sand",
}
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = desert_cave_surface,
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = desert_cave_surface,
fill_ratio = 10,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
place_offset_y = -2,
decoration = "default:stone",
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = {
"default:desert_sand",
"caverealms:coal_dust",
"default:coalblock",
},
spawn_by = desert_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.coal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "ruby_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.coal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "ruby_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = {
"default:desert_sand",
"caverealms:coal_dust",
"default:coalblock",
},
spawn_by = desert_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.coal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.coal,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = desert_cave_surface,
fill_ratio = 0.1,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = "caverealms:coal_dust",
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = desert_cave_surface,
fill_ratio = 0.005,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = "default:coalblock",
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = desert_cave_surface,
fill_ratio = 0.01,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
decoration = "caverealms:constant_flame",
flags = "all_floors",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = desert_cave_surface,
spawn_by = {
"default:desert_sand",
"caverealms:coal_dust",
"default:coalblock",
},
num_spawn_by = 8,
fill_ratio = 0.001,
biomes = asuna.features.cave.coal,
y_max = 0,
y_min = -31000,
decoration = "default:cactus",
flags = "all_floors",
})
-- Fire cave
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.fire,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = "caverealms:hot_cobble",
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 4,
place_on = "caverealms:hot_cobble",
noise_params = {
offset = -0.325,
scale = 0.45,
spread = {x = 8, y = 8, z = 8},
seed = seed,
octaves = 2,
persist = 0.64,
lacunarity = 0.7,
},
biomes = asuna.features.cave.fire,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = "default:obsidian",
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.fire,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = "caverealms:hot_cobble",
flags = "all_ceilings,force_placement",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "caverealms:hot_cobble",
fill_ratio = 0.085,
biomes = asuna.features.cave.fire,
y_max = 0,
y_min = -31000,
decoration = "caverealms:constant_flame",
flags = "all_floors",
})
local c_lava = minetest.get_content_id("default:lava_source")
local valid_lava_enclosure = {}
for _,lava_enclosure in ipairs({
minetest.get_content_id("default:stone"),
minetest.get_content_id("caverealms:hot_cobble"),
c_lava,
}) do
valid_lava_enclosure[lava_enclosure] = true
end
abdecor.register_advanced_decoration("caverealms_fire_cave_lava",{
target = {
place_on = {
"caverealms:hot_cobble",
},
sidelen = 80,
fill_ratio = 0.065,
y_max = -8,
y_min = -31000,
flags = "all_floors",
},
fn = function(mapgen)
-- Get provided values
local va = mapgen.voxelarea
local vdata = mapgen.data
local pos = mapgen.pos
-- Get stride values and set position
local ystride = va.ystride
local zstride = va.zstride
local pos = va:index(pos.x,pos.y,pos.z)
-- Lava must be enclosed to its sides and below
for _,adjacent in ipairs({
-ystride,
1,
-1,
zstride,
-zstride,
}) do
if not valid_lava_enclosure[vdata[pos + adjacent]] then
return -- lava is not properly enclosed
end
end
-- Place lava
vdata[pos] = c_lava
end,
flags = {
liquid = true,
},
})
-- Dry cave
local dry_cave_surface = {
"default:dry_dirt",
"default:dry_dirt_with_dry_grass",
"default:desert_stone",
"default:desert_cobble",
}
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 10,
biomes = asuna.features.cave.dry,
y_max = 0,
y_min = -31000,
place_offset_y = -1,
decoration = dry_cave_surface,
flags = "all_floors,force_placement",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = dry_cave_surface,
spawn_by = dry_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.dry,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "ruby_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.dry,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "ruby_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = dry_cave_surface,
spawn_by = dry_cave_surface,
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.dry,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalagmite.mts",
flags = "all_floors,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "schematic",
sidelen = 80,
place_on = "default:stone",
spawn_by = "default:stone",
num_spawn_by = 8,
fill_ratio = 0.000085,
biomes = asuna.features.cave.dry,
y_max = -16,
y_min = -31000,
place_offset_y = -1,
schematic = spath .. "amethyst_stalactite.mts",
flags = "all_ceilings,place_center_x,place_center_z",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = dry_cave_surface,
fill_ratio = 0.01,
biomes = asuna.features.cave.dry,
y_max = 0,
y_min = -31000,
decoration = "caverealms:spike",
flags = "all_floors",
})
minetest.register_decoration({
deco_type = "simple",
sidelen = 80,
place_on = "default:stone",
fill_ratio = 0.01,
biomes = asuna.features.cave.dry,
y_max = 0,
y_min = -31000,
height = 2,
height_max = 3,
decoration = "caverealms:fire_vine",
flags = "all_ceilings",
})

View file

@ -0,0 +1,53 @@
local CONFIG_FILE_PREFIX = "caverealms."
caverealms.config = {}
-- This function based on kaeza/minetest-irc/config.lua and used under the
-- terms of BSD 2-clause license.
local function setting(stype, name, default)
local value
if stype == "bool" then
value = minetest.settings:get_bool(CONFIG_FILE_PREFIX..name)
elseif stype == "string" then
value = minetest.settings:get(CONFIG_FILE_PREFIX..name)
elseif stype == "number" then
value = tonumber(minetest.settings:get(CONFIG_FILE_PREFIX..name))
end
if value == nil then
value = default
end
caverealms.config[name] = value
end
--generation settings
setting("number", "ymin", -33000) --bottom realm limit
setting("number", "ymax", -1500) --top realm limit
setting("number", "tcave", 0.75) --cave threshold
--decoration chances
setting("number", "stagcha", 0.003) --chance of stalagmites
setting("number", "stalcha", 0.003) --chance of stalactites
setting("number", "h_lag", 8) --max height for stalagmites
setting("number", "h_lac", 8) --...stalactites
setting("number", "crystal", 0.0002) --chance of glow crystal formations
setting("number", "h_cry", 8) --max height of glow crystals
setting("number", "h_clac", 8) --max height of glow crystal stalactites
setting("number", "gemcha", 0.03) --chance of small glow gems
setting("number", "mushcha", 0.04) --chance of mushrooms
setting("number", "myccha", 0.03) --chance of mycena mushrooms
setting("number", "wormcha", 0.015) --chance of glow worms
setting("number", "giantcha", 0.001) --chance of giant mushrooms
setting("number", "icicha", 0.035) --chance of icicles
setting("number", "flacha", 0.04) --chance of constant flames
--realm limits for Dungeon Masters' Lair
setting("number", "dm_top", -14000) --upper limit
setting("number", "dm_bot", -16000) --lower limit
--should DMs spawn in DM Lair?
setting("bool", "dm_spawn", true)
--Deep cave settings
setting("number", "deep_cave", -7000) -- upper limit

View file

@ -0,0 +1,145 @@
--thin ice to water
minetest.register_craft({
output = "default:water_source",
type = "shapeless",
recipe = {"caverealms:thin_ice"}
})
--use for coal dust
minetest.register_craft({
output = "default:coalblock",
recipe = {
{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"},
{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"},
{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"}
}
})
-- DM statue
minetest.register_craft({
output = "caverealms:dm_statue",
recipe = {
{"caverealms:glow_ore","caverealms:hot_cobble","caverealms:glow_ore"},
{"caverealms:hot_cobble","caverealms:hot_cobble","caverealms:hot_cobble"},
{"caverealms:hot_cobble","caverealms:hot_cobble","caverealms:hot_cobble"}
}
})
-- Glow obsidian brick
minetest.register_craft({
output = "caverealms:glow_obsidian_brick 4",
recipe = {
{"caverealms:glow_obsidian", "caverealms:glow_obsidian"},
{"caverealms:glow_obsidian", "caverealms:glow_obsidian"}
}
})
minetest.register_craft({
output = "caverealms:glow_obsidian_brick_2 4",
recipe = {
{"caverealms:glow_obsidian_2", "caverealms:glow_obsidian_2"},
{"caverealms:glow_obsidian_2", "caverealms:glow_obsidian_2"}
}
})
-- Glow obsidian glass
minetest.register_craft({
output = "caverealms:glow_obsidian_glass 5",
recipe = {
{"default:glass", "default:glass", "default:glass"},
{"default:glass", "default:glass", "caverealms:glow_obsidian"}
}
})
minetest.register_craft({
output = "caverealms:glow_obsidian_glass 5",
recipe = {
{"default:glass", "default:glass", "default:glass"},
{"default:glass", "default:glass", "caverealms:glow_obsidian_2"}
}
})
-- Requires ethereal:fish_raw
if minetest.get_modpath("ethereal") then
-- Professional Fishing Rod
minetest.register_craftitem("caverealms:angler_rod", {
description = "Pro Fishing Rod",
inventory_image = "caverealms_angler_rod.png",
wield_image = "caverealms_angler_rod.png"
})
minetest.register_craft({
output = "caverealms:angler_rod",
recipe = {
{"","","default:steel_ingot"},
{"", "default:steel_ingot", "caverealms:mushroom_gills"},
{"default:steel_ingot", "", "caverealms:mushroom_gills"},
}
})
-- Glow Bait
minetest.register_craftitem("caverealms:glow_bait", {
description = "Glow Bait",
inventory_image = "caverealms_glow_bait.png",
wield_image = "caverealms_glow_bait.png",
})
minetest.register_craft({
output = "caverealms:glow_bait 9",
recipe = {
{"caverealms:glow_worm_green"},
}
})
-- default ethereal fish
local fish = {
{"ethereal:fish_raw"},
}
-- Pro Fishing Rod (Baited)
minetest.register_craftitem("caverealms:angler_rod_baited", {
description = "Baited Pro Fishing Rod",
inventory_image = "caverealms_angler_rod_baited.png",
wield_image = "caverealms_angler_rod_weild.png",
stack_max = 1,
liquids_pointable = true,
on_use = function (itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then
return
end
local node = minetest.get_node(pointed_thing.under).name
if (node == "default:water_source"
or node == "default:river_water_source")
and math.random(1, 100) < 35 then
local type = fish[math.random(1, #fish)][1]
local inv = user:get_inventory()
if inv:room_for_item("main", {name = type}) then
inv:add_item("main", {name = type})
if (math.random() < 0.6) then
return ItemStack("caverealms:angler_rod_baited")
else
return ItemStack("caverealms:angler_rod")
end
else
minetest.chat_send_player(user:get_player_name(),
"Inventory full, Fish Got Away!")
end
end
end,
})
minetest.register_craft({
type = "shapeless",
output = "caverealms:angler_rod_baited",
recipe = {"caverealms:angler_rod", "caverealms:glow_bait"},
})
end

View file

@ -0,0 +1,8 @@
default
asuna_core
stairs
ethereal?
mobs?
abdecor
flowers?
herbs?

View file

@ -0,0 +1 @@
A mod for Minetest to add underground realms.

View file

@ -0,0 +1,19 @@
Biome #, Biome name, "floor node"
0, None
1, Moss, "caverealms:stone_with_moss"
2, Fungal, "caverealms:stone_with_lichen"
3, Algae, "caverealms:stone_with_algae"
4, Glaciated, "caverealms:thin_ice"
The following are "deep realms"
5, Deep Glaciated, "default:ice"
6, DM, "caverealms:hot_cobble"
7, Salt Crystal, "caverealms:stone_with_salt"
8, Glow Obsidian, "caverealms:glow_obsidian"
OR "caverealms:glow_obsidian2"
9, Coal, "default:coalblock"
OR "caverealms:coal_dust"
OR "default:desert_sand"

View file

@ -0,0 +1,16 @@
mobs:spawn({
name = "mobs_monster:dungeon_master",
nodes = {"caverealms:hot_cobble"},
max_light = 12,
min_light = 0,
chance = 7000,
active_object_count = 2,
max_height = -8000,
on_spawn = function(self, pos)
self.hp_max = 70
self.health = 70
self.damage = 5
self.shoot_interval = 1.5
self.dogshoot_switch = 0
end
})

View file

@ -0,0 +1,409 @@
local H_LAG = caverealms.config.h_lag --15 --max height for stalagmites
local H_LAC = caverealms.config.h_lac --20 --...stalactites
local H_CRY = caverealms.config.h_cry --9 --max height of glow crystals
local H_CLAC = caverealms.config.h_clac --13 --max height of glow crystal stalactites
function caverealms:above_solid(x,y,z,area,data)
local c_air = minetest.get_content_id("air")
local ai = area:index(x,y+1,z-3)
if data[ai] == c_air then
return false
else
return true
end
end
function caverealms:below_solid(x,y,z,area,data)
local c_air = minetest.get_content_id("air")
local ai = area:index(x,y-1,z-3)
if data[ai] == c_air then
return false
else
return true
end
end
--stalagmite spawner
function caverealms:stalagmite(x,y,z, area, data)
if not caverealms:below_solid(x,y,z,area,data) then
return
end
--contest ids
local c_stone = minetest.get_content_id("default:stone")
local top = math.random(6,H_LAG) --grab a random height for the stalagmite
for j = 0, top do --y
for k = -3, 3 do
for l = -3, 3 do
if j == 0 then
if k*k + l*l <= 9 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
elseif j <= top/5 then
if k*k + l*l <= 4 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
elseif j <= top/5 * 3 then
if k*k + l*l <= 1 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
else
local vi = area:index(x, y+j, z-3)
data[vi] = c_stone
end
end
end
end
end
--stalactite spawner
function caverealms:stalactite(x,y,z, area, data)
if not caverealms:above_solid(x,y,z,area,data) then
return
end
--contest ids
local c_stone = minetest.get_content_id("default:stone")--("caverealms:limestone")
local bot = math.random(-H_LAC, -6) --grab a random height for the stalagmite
for j = bot, 0 do --y
for k = -3, 3 do
for l = -3, 3 do
if j >= -1 then
if k*k + l*l <= 9 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
elseif j >= bot/5 then
if k*k + l*l <= 4 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
elseif j >= bot/5 * 3 then
if k*k + l*l <= 1 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = c_stone
end
else
local vi = area:index(x, y+j, z-3)
data[vi] = c_stone
end
end
end
end
end
--glowing crystal stalagmite spawner
function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
if not caverealms:below_solid(x,y,z,area,data) then
return
end
--contest ids
local c_stone = minetest.get_content_id("default:stone")
local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
local c_crystore = minetest.get_content_id("caverealms:glow_ore")
local c_emerald = minetest.get_content_id("caverealms:glow_emerald")
local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore")
local c_mesecry = minetest.get_content_id("caverealms:glow_mese")
local c_meseore = minetest.get_content_id("default:stone_with_mese")
local c_ruby = minetest.get_content_id("caverealms:glow_ruby")
local c_rubore = minetest.get_content_id("caverealms:glow_ruby_ore")
local c_ameth = minetest.get_content_id("caverealms:glow_amethyst")
local c_amethore = minetest.get_content_id("caverealms:glow_amethyst_ore")
local c_ice = minetest.get_content_id("default:ice")
local c_thinice = minetest.get_content_id("caverealms:thin_ice")
--for randomness
local mode = 1
if math.random(15) == 1 then
mode = 2
end
if biome == 3 then
if math.random(25) == 1 then
mode = 2
else
mode = 1
end
end
if biome == 4 or biome == 5 then
if math.random(3) == 1 then
mode = 2
end
end
local stalids = {
{ {c_crystore, c_crystal}, {c_emore, c_emerald} },
{ {c_emore, c_emerald}, {c_crystore, c_crystal} },
{ {c_emore, c_emerald}, {c_meseore, c_mesecry} },
{ {c_ice, c_thinice}, {c_crystore, c_crystal}},
{ {c_ice, c_thinice}, {c_crystore, c_crystal}},
{ {c_rubore, c_ruby}, {c_meseore, c_mesecry}},
{ {c_crystore, c_crystal}, {c_rubore, c_ruby} },
{ {c_rubore, c_ruby}, {c_emore, c_emerald}},
{ {c_amethore, c_ameth}, {c_meseore, c_mesecry} },
}
local nid_a
local nid_b
local nid_s = c_stone --stone base, will be rewritten to ice in certain biomes
if biome > 3 and biome < 6 then
if mode == 1 then
nid_a = c_ice
nid_b = c_thinice
nid_s = c_ice
else
nid_a = c_crystore
nid_b = c_crystal
end
elseif mode == 1 then
nid_a = stalids[biome][1][1]
nid_b = stalids[biome][1][2]
else
nid_a = stalids[biome][2][1]
nid_b = stalids[biome][2][2]
end
local top = math.random(5,H_CRY) --grab a random height for the stalagmite
for j = 0, top do --y
for k = -3, 3 do
for l = -3, 3 do
if j == 0 then
if k*k + l*l <= 9 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_s
end
elseif j <= top/5 then
if k*k + l*l <= 4 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_a
end
elseif j <= top/5 * 3 then
if k*k + l*l <= 1 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_b
end
else
local vi = area:index(x, y+j, z-3)
data[vi] = nid_b
end
end
end
end
end
--crystal stalactite spawner
function caverealms:crystal_stalactite(x,y,z, area, data, biome)
if not caverealms:above_solid(x,y,z,area,data) then
return
end
--contest ids
local c_stone = minetest.get_content_id("default:stone")
local c_crystore = minetest.get_content_id("caverealms:glow_ore")
local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
local c_emerald = minetest.get_content_id("caverealms:glow_emerald")
local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore")
local c_mesecry = minetest.get_content_id("caverealms:glow_mese")
local c_meseore = minetest.get_content_id("default:stone_with_mese")
local c_ruby = minetest.get_content_id("caverealms:glow_ruby")
local c_rubore = minetest.get_content_id("caverealms:glow_ruby_ore")
local c_ameth = minetest.get_content_id("caverealms:glow_amethyst")
local c_amethore = minetest.get_content_id("caverealms:glow_amethyst_ore")
local c_ice = minetest.get_content_id("default:ice")
local c_thinice = minetest.get_content_id("caverealms:hanging_thin_ice")
--for randomness
local mode = 1
if math.random(15) == 1 then
mode = 2
end
if biome == 3 then
if math.random(25) == 1 then
mode = 2
else
mode = 1
end
end
if biome == 4 or biome == 5 then
if math.random(3) == 1 then
mode = 2
end
end
local stalids = {
{ {c_crystore, c_crystal}, {c_emore, c_emerald} },
{ {c_emore, c_emerald}, {c_crystore, c_crystal} },
{ {c_emore, c_emerald}, {c_meseore, c_mesecry} },
{ {c_ice, c_thinice}, {c_crystore, c_crystal}},
{ {c_ice, c_thinice}, {c_crystore, c_crystal}},
{ {c_rubore, c_ruby}, {c_meseore, c_mesecry}},
{ {c_crystore, c_crystal}, {c_rubore, c_ruby} },
{ {c_rubore, c_ruby}, {c_emore, c_emerald}},
{ {c_amethore, c_ameth}, {c_meseore, c_mesecry} },
}
local nid_a
local nid_b
local nid_s = c_stone --stone base, will be rewritten to ice in certain biomes
if biome > 3 and biome < 6 then
if mode == 1 then
nid_a = c_ice
nid_b = c_thinice
nid_s = c_ice
else
nid_a = c_crystore
nid_b = c_crystal
end
elseif mode == 1 then
nid_a = stalids[biome][1][1]
nid_b = stalids[biome][1][2]
else
nid_a = stalids[biome][2][1]
nid_b = stalids[biome][2][2]
end
local bot = math.random(-H_CLAC, -6) --grab a random height for the stalagmite
for j = bot, 0 do --y
for k = -3, 3 do
for l = -3, 3 do
if j >= -1 then
if k*k + l*l <= 9 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_s
end
elseif j >= bot/5 then
if k*k + l*l <= 4 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_a
end
elseif j >= bot/5 * 3 then
if k*k + l*l <= 1 then
local vi = area:index(x+k, y+j, z+l-3)
data[vi] = nid_b
end
else
local vi = area:index(x, y+j, z-3)
data[vi] = nid_b
end
end
end
end
end
--glowing crystal stalagmite spawner
function caverealms:salt_stalagmite(x,y,z, area, data, biome)
if not caverealms:below_solid(x,y,z,area,data) then
return
end
--contest ids
local c_stone = minetest.get_content_id("default:stone")
local c_salt = minetest.get_content_id("caverealms:salt_crystal")
local scale = math.random(2, 4)
if scale == 2 then
for j = -3, 3 do
for k = -3, 3 do
local vi = area:index(x+j, y, z+k)
data[vi] = c_stone
if math.abs(j) ~= 3 and math.abs(k) ~= 3 then
local vi = area:index(x+j, y+1, z+k)
data[vi] = c_stone
end
end
end
else
for j = -4, 4 do
for k = -4, 4 do
local vi = area:index(x+j, y, z+k)
data[vi] = c_stone
if math.abs(j) ~= 4 and math.abs(k) ~= 4 then
local vi = area:index(x+j, y+1, z+k)
data[vi] = c_stone
end
end
end
end
for j = 2, scale + 2 do --y
for k = -2, scale - 2 do
for l = -2, scale - 2 do
local vi = area:index(x+k, y+j, z+l)
data[vi] = c_salt -- make cube
end
end
end
end
--function to create giant 'shrooms
function caverealms:giant_shroom(x, y, z, area, data)
if not caverealms:below_solid(x,y,z,area,data) then
return
end
local c_cap
local c_stem
--as usual, grab the content ID's
if minetest.get_modpath("ethereal") then
c_stem = minetest.get_content_id("ethereal:mushroom_trunk")
c_cap = minetest.get_content_id("ethereal:mushroom")
else
c_stem = minetest.get_content_id("caverealms:mushroom_stem")
c_cap = minetest.get_content_id("caverealms:mushroom_cap")
end
local c_gills = minetest.get_content_id("caverealms:mushroom_gills")
z = z - 5
--cap
for k = -5, 5 do
for l = -5, 5 do
if k*k + l*l <= 25 then
local vi = area:index(x+k, y+5, z+l)
data[vi] = c_cap
end
if k*k + l*l <= 16 then
local vi = area:index(x+k, y+6, z+l)
data[vi] = c_cap
vi = area:index(x+k, y+5, z+l)
data[vi] = c_gills
end
if k*k + l*l <= 9 then
local vi = area:index(x+k, y+7, z+l)
data[vi] = c_cap
end
if k*k + l*l <= 4 then
local vi = area:index(x+k, y+8, z+l)
data[vi] = c_cap
end
end
end
--stem
for j = 0, 5 do
for k = -1,1 do
local vi = area:index(x+k, y+j, z)
data[vi] = c_stem
if k == 0 then
local ai = area:index(x, y+j, z+1)
data[ai] = c_stem
ai = area:index(x, y+j, z-1)
data[ai] = c_stem
end
end
end
end

24
mods/caverealms/init.lua Normal file
View file

@ -0,0 +1,24 @@
-- caverealms v.0.8 by HeroOfTheWinds
-- original cave code modified from paramat's subterrain
-- For Minetest 0.4.8 stable
-- Depends default
-- License: code WTFPL
caverealms = {} --create a container for functions and constants
--grab a shorthand for the filepath of the mod
local modpath = minetest.get_modpath(minetest.get_current_modname())
--load companion lua files
dofile(modpath.."/config.lua") --configuration file; holds various constants
dofile(modpath.."/crafting.lua") --crafting recipes
dofile(modpath.."/nodes.lua") --node definitions
dofile(modpath.."/functions.lua") --function definitions
dofile(modpath.."/plants.lua")
dofile(modpath.."/biomes.lua")
if minetest.get_modpath("mobs_monster") then
if caverealms.config.dm_spawn == true then
dofile(modpath.."/dungeon_master.lua") --special DMs for DM's Lair biome
end
end

1
mods/caverealms/mod.conf Normal file
View file

@ -0,0 +1 @@
name = caverealms

521
mods/caverealms/nodes.lua Normal file
View file

@ -0,0 +1,521 @@
-- CaveRealms nodes.lua
--NODES--
--glowing crystal
minetest.register_node("caverealms:glow_crystal", {
description = "Glow Sapphire",
tiles = {"caverealms_glow_crystal.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
light_source = 13,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--glowing emerald
minetest.register_node("caverealms:glow_emerald", {
description = "Glow Emerald",
tiles = {"caverealms_glow_emerald.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
light_source = 13,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--glowing mese crystal blocks
minetest.register_node("caverealms:glow_mese", {
description = "Glow Mese Crystal",
tiles = {"caverealms_glow_mese.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
light_source = 13,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--glowing ruby
minetest.register_node("caverealms:glow_ruby", {
description = "Glow Ruby",
tiles = {"caverealms_glow_ruby.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
light_source = 13,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--glowing amethyst
minetest.register_node("caverealms:glow_amethyst", {
description = "Glow Amethyst",
tiles = {"caverealms_glow_amethyst.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
light_source = 13,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--embedded crystal
minetest.register_node("caverealms:glow_ore", {
description = "Glow Crystal Ore",
tiles = {"caverealms_glow_ore.png"},
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
light_source = 10,
paramtype = "light",
})
--embedded emerald
minetest.register_node("caverealms:glow_emerald_ore", {
description = "Glow Emerald Ore",
tiles = {"caverealms_glow_emerald_ore.png"},
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
light_source = 10,
paramtype = "light",
})
--embedded ruby
minetest.register_node("caverealms:glow_ruby_ore", {
description = "Glow Ruby Ore",
tiles = {"caverealms_glow_ruby_ore.png"},
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
light_source = 10,
paramtype = "light",
})
--embedded amethyst
minetest.register_node("caverealms:glow_amethyst_ore", {
description = "Glow Amethyst Ore",
tiles = {"caverealms_glow_amethyst_ore.png"},
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
light_source = 10,
paramtype = "light",
})
--thin (transparent) ice
minetest.register_node("caverealms:thin_ice", {
description = "Thin Ice",
tiles = {"caverealms_thin_ice.png"},
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
freezemelt = "default:water_source",
paramtype = "light",
})
--salt crystal
minetest.register_node("caverealms:salt_crystal", {
description = "Salt Crystal",
tiles = {"caverealms_salt_crystal.png"},
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
light_source = 11,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
})
--glowing crystal gem
minetest.register_node("caverealms:glow_gem", {
description = "Glow Gem",
tiles = {"caverealms_glow_gem.png"},
inventory_image = "caverealms_glow_gem.png",
wield_image = "caverealms_glow_gem.png",
is_ground_content = true,
groups = {cracky = 3, oddly_breakable_by_hand = 1, attached_node = 1},
sounds = default.node_sound_glass_defaults(),
light_source = 11,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 0.75,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
}
})
--glowing salt gem
minetest.register_node("caverealms:salt_gem", {
description = "Salt Gem",
tiles = {"caverealms_salt_gem.png"},
inventory_image = "caverealms_salt_gem.png",
wield_image = "caverealms_salt_gem.png",
is_ground_content = true,
groups = {cracky = 3, oddly_breakable_by_hand = 1, attached_node = 1},
sounds = default.node_sound_glass_defaults(),
light_source = 11,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 0.75,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
}
})
--stone spike
minetest.register_node("caverealms:spike", {
description = "Stone Spike",
tiles = {"caverealms_spike.png"},
inventory_image = "caverealms_spike.png",
wield_image = "caverealms_spike.png",
is_ground_content = true,
groups = {cracky = 3, oddly_breakable_by_hand = 1, attached_node = 1},
sounds = default.node_sound_stone_defaults(),
light_source = 3,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 0.75,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
}
})
--upward pointing icicle
minetest.register_node("caverealms:icicle_up", {
description = "Icicle",
tiles = {"caverealms_icicle_up.png"},
inventory_image = "caverealms_icicle_up.png",
wield_image = "caverealms_icicle_up.png",
is_ground_content = true,
groups = {cracky=3, oddly_breakable_by_hand=1},
sounds = default.node_sound_glass_defaults(),
light_source = 8,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
},
})
--downward pointing icicle
minetest.register_node("caverealms:icicle_down", {
description = "Icicle",
tiles = {"caverealms_icicle_down.png"},
inventory_image = "caverealms_icicle_down.png",
wield_image = "caverealms_icicle_down.png",
is_ground_content = true,
groups = {cracky=3, oddly_breakable_by_hand=1},
sounds = default.node_sound_glass_defaults(),
light_source = 8,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
},
})
--cave mossy cobble - bluish?
minetest.register_node("caverealms:stone_with_moss", {
description = "Cave Stone with Moss",
tiles = {"default_cobble.png^caverealms_moss.png", "default_cobble.png", "default_cobble.png^caverealms_moss_side.png"},
is_ground_content = true,
groups = {crumbly=1, cracky=3},
drop = 'default:cobble',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.25},
}),
})
--cave lichen-covered cobble - purple-ish
minetest.register_node("caverealms:stone_with_lichen", {
description = "Cave Stone with Lichen",
tiles = {"default_cobble.png^caverealms_lichen.png", "default_cobble.png", "default_cobble.png^caverealms_lichen_side.png"},
is_ground_content = true,
groups = {crumbly=1, cracky=3},
drop = 'default:cobble',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.25},
}),
})
--cave algae-covered cobble - yellow-ish
minetest.register_node("caverealms:stone_with_algae", {
description = "Cave Stone with Algae",
tiles = {"default_cobble.png^caverealms_algae.png", "default_cobble.png", "default_cobble.png^caverealms_algae_side.png"},
is_ground_content = true,
groups = {crumbly=1, cracky=3},
drop = 'default:cobble',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.25},
}),
})
--tiny-salt-crystal-covered cobble - pink-ish
minetest.register_node("caverealms:stone_with_salt", {
description = "Salt Crystal",
tiles = {"caverealms_salty2.png"},
light_source = 9,
paramtype = "light",
use_texture_alpha = true,
drawtype = "glasslike",
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
})
--Hot Cobble - cobble with lava instead of mortar XD
minetest.register_node("caverealms:hot_cobble", {
description = "Hot Cobble",
tiles = {"caverealms_hot_cobble.png"},
is_ground_content = true,
groups = {cracky=1, hot=1, unbreakable = 1, stone = 1},
damage_per_second = 1,
light_source = 3,
paramtype = "light",
sounds = default.node_sound_stone_defaults(),
})
--Glow Obsidian
minetest.register_node("caverealms:glow_obsidian", {
description = "Glowing Obsidian",
tiles = {"caverealms_glow_obsidian.png"},
is_ground_content = true,
groups = {cracky=1, level=2},
light_source = 7,
paramtype = "light",
sounds = default.node_sound_stone_defaults(),
})
--Glow Obsidian 2 - has traces of lava
minetest.register_node("caverealms:glow_obsidian_2", {
description = "Hot Glowing Obsidian",
tiles = {"caverealms_glow_obsidian2.png"},
is_ground_content = true,
groups = {cracky=1, hot=1, level=2},
light_source = 9,
paramtype = "light",
sounds = default.node_sound_stone_defaults(),
})
--Glow Obsidian Bricks
minetest.register_node("caverealms:glow_obsidian_brick", {
description = "Glow Obsidian Brick",
tiles = {"caverealms_glow_obsidian_brick.png"},
light_source = 7,
groups = {cracky = 1, level = 2},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("caverealms:glow_obsidian_brick_2", {
description = "Glow Obsidian Brick",
tiles = {"caverealms_glow_obsidian_brick_2.png"},
light_source = 9,
groups = {cracky = 1, level = 2},
sounds = default.node_sound_stone_defaults(),
})
--Glow Obsidian Stairs/Slabs
stairs.register_stair_and_slab(
"glow_obsidian_brick",
"caverealms:glow_obsidian_brick",
{cracky = 1, level = 2},
{"caverealms_glow_obsidian_brick.png"},
"Glow Obsidian Brick Stair",
"Glow Obsidian Brick Slab",
default.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"glow_obsidian_brick_2",
"caverealms:glow_obsidian_brick_2",
{cracky = 1, level = 2},
{"caverealms_glow_obsidian_brick_2.png"},
"Glow Obsidian Brick Stair",
"Glow Obsidian Brick Slab",
default.node_sound_stone_defaults())
--Glow Obsidian Glass
minetest.register_node("caverealms:glow_obsidian_glass", {
description = "Glow Obsidian Glass",
drawtype = "glasslike_framed_optional",
tiles = {"caverealms_glow_obsidian_glass.png", "default_obsidian_glass_detail.png"},
paramtype = "light",
light_source = 13,
sunlight_propagates = true,
groups = {cracky = 3},
sounds = default.node_sound_glass_defaults(),
})
--Coal Dust
minetest.register_node("caverealms:coal_dust", {
description = "Coal Dust",
tiles = {"caverealms_coal_dust.png"},
is_ground_content = true,
groups = {crumbly=3, falling_node=1, sand=1},
sounds = default.node_sound_sand_defaults(),
})
--glow worms
minetest.register_node("caverealms:glow_worm", {
description = "Blue Glow Worms",
tiles = {"caverealms_glow_worm.png"},
inventory_image = "caverealms_glow_worm.png",
wield_image = "caverealms_glow_worm.png",
is_ground_content = true,
groups = {oddly_breakable_by_hand=3},
light_source = 9,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-1/6, -1/2, -1/6, 1/6, 1/2, 1/6},
},
})
minetest.register_node("caverealms:glow_worm_green", {
description = "Green Glow Worms",
tiles = {"caverealms_glow_worm_green.png"},
inventory_image = "caverealms_glow_worm_green.png",
wield_image = "caverealms_glow_worm_green.png",
is_ground_content = true,
groups = {oddly_breakable_by_hand=3},
light_source = 9,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-1/6, -1/2, -1/6, 1/6, 1/2, 1/6},
},
})
minetest.register_node("caverealms:fire_vine", {
description = "Fire Vine",
tiles = {"caverealms_fire_vine.png"},
inventory_image = "caverealms_fire_vine.png",
wield_image = "caverealms_fire_vine.png",
is_ground_content = true,
damage_per_second = 1,
groups = {oddly_breakable_by_hand=3},
light_source = 9,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-1/6, -1/2, -1/6, 1/6, 1/2, 1/6},
},
})
--define special flame so that it does not expire
minetest.register_node("caverealms:constant_flame", {
description = "Fire",
drawtype = "plantlike",
tiles = {{
name="fire_basic_flame_animated.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1},
}},
inventory_image = "fire_basic_flame.png",
light_source = 14,
groups = {igniter=2, dig_immediate=3, hot=3, not_in_creative_inventory=1},
paramtype = "light",
drop = '',
walkable = false,
buildable_to = true,
floodable = true,
damage_per_second = 4,
})
--dungeon master statue (nodebox)
minetest.register_node("caverealms:dm_statue", {
description = "Dungeon Master Statue",
tiles = {
"caverealms_dm_stone.png",
"caverealms_dm_stone.png",
"caverealms_dm_stone.png",
"caverealms_dm_stone.png",
"caverealms_dm_stone.png",
"caverealms_stone_eyes.png"
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=2},
node_box = {
type = "fixed",
fixed = {
{-0.4375, -0.5, -0.4375, 0.4375, -0.3125, 0.4375}, -- NodeBox1
{-0.25, -0.125, -0.1875, 0.25, 0.5, 0.1875}, -- NodeBox2
{-0.375, 0, -0.125, -0.25, 0.4375, 0.125}, -- NodeBox3
{0.25, 0.125, -0.4375, 0.375, 0.375, 0.1875}, -- NodeBox4
{-0.25, -0.5, -0.125, -0.125, -0.125, 0.125}, -- NodeBox5
{0.125, -0.3125, -0.125, 0.25, 0, 0.125}, -- NodeBox6
}
},
selection_box = {
type = "regular"
}
})
-- Compatibility
minetest.register_alias("caverealms:hanging_thin_ice", "caverealms:thin_ice")
minetest.register_alias("caverealms:spike_2", "caverealms:spike")
minetest.register_alias("caverealms:spike_3", "caverealms:spike")
minetest.register_alias("caverealms:spike_4", "caverealms:spike")
minetest.register_alias("caverealms:spike_5", "caverealms:spike")
minetest.register_alias("caverealms:salt_gem_2", "caverealms:salt_gem")
minetest.register_alias("caverealms:salt_gem_3", "caverealms:salt_gem")
minetest.register_alias("caverealms:salt_gem_4", "caverealms:salt_gem")
minetest.register_alias("caverealms:salt_gem_5", "caverealms:salt_gem")
minetest.register_alias("caverealms:glow_gem_2", "caverealms:glow_gem")
minetest.register_alias("caverealms:glow_gem_3", "caverealms:glow_gem")
minetest.register_alias("caverealms:glow_gem_4", "caverealms:glow_gem")
minetest.register_alias("caverealms:glow_gem_5", "caverealms:glow_gem")

191
mods/caverealms/plants.lua Normal file
View file

@ -0,0 +1,191 @@
-- Cavrealms plants and trees for lichen, moss and algae biomes
-- Lichen biome
-- glowing fungi
minetest.register_node("caverealms:fungus", {
description = "Glowing Fungus",
tiles = {"caverealms_fungi.png"},
inventory_image = "caverealms_fungi.png",
wield_image = "caverealms_fungi.png",
is_ground_content = true,
groups = {oddly_breakable_by_hand = 3, attached_node = 1, flammable = 1},
light_source = 5,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
},
})
-- mycena mushroom
minetest.register_node("caverealms:mycena", {
description = "Mycena Mushroom",
tiles = {"caverealms_mycena.png"},
inventory_image = "caverealms_mycena.png",
wield_image = "caverealms_mycena.png",
is_ground_content = true,
groups = {oddly_breakable_by_hand = 3, attached_node = 1, flammable = 1},
light_source = 6,
paramtype = "light",
drawtype = "plantlike",
walkable = false,
buildable_to = true,
visual_scale = 1.0,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
},
})
-- giant mushroom
if minetest.get_modpath("ethereal") then
minetest.register_alias("caverealms:mushroom_cap", "ethereal:mushroom")
minetest.register_alias("caverealms:mushroom_stem", "ethereal:mushroom_trunk")
else
-- stem
minetest.register_node("caverealms:mushroom_stem", {
description = "Giant Mushroom Stem",
tiles = {"caverealms_mushroom_stem.png"},
is_ground_content = true,
groups = {choppy=2, oddly_breakable_by_hand=1},
})
-- cap
minetest.register_node("caverealms:mushroom_cap", {
description = "Giant Mushroom Cap",
tiles = {"caverealms_mushroom_cap.png"},
is_ground_content = true,
groups = {choppy=2, oddly_breakable_by_hand=1,},
drop = {
max_items = 1,
items = {
{items = {"caverealms:mushroom_sapling"}, rarity = 20},
{items = {"caverealms:mushroom_cap"}}
}
},
})
-- sapling
minetest.register_node("caverealms:mushroom_sapling", {
description = "Mushroom Tree Sapling",
drawtype = "plantlike",
tiles = {"caverealms_mushroom_sapling.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
},
groups = {snappy = 2, dig_immediate = 3, flammable = 2},
sounds = default.node_sound_leaves_defaults(),
})
end
-- gills
minetest.register_node("caverealms:mushroom_gills", {
description = "Giant Mushroom Gills",
tiles = {"caverealms_mushroom_gills.png"},
is_ground_content = true,
light_source = 10,
walkable = false,
groups = {choppy=2, oddly_breakable_by_hand=1},
drawtype = "plantlike",
paramtype = "light",
})
-- Saplings
-- grow trees
local add_tree = function (pos, ofx, ofy, ofz, schem)
if not schem then
print ("Schematic not found")
return
end
minetest.swap_node(pos, {name = "air"})
minetest.place_schematic(
{x = pos.x - ofx, y = pos.y - ofy, z = pos.z - ofz},
schem, 0, nil, false)
end
local path = minetest.get_modpath("caverealms").."/schematics/"
-- giant mushrooms
function grow_caverealms_mushroom(pos)
add_tree(pos, 5, 0, 5, path .. "shroom.mts")
end
-- height check
local function enough_height(pos, height)
local nod = minetest.line_of_sight(
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x, y = pos.y + height, z = pos.z})
if not nod then
return false
else
return true
end
end
minetest.register_abm({
label = "Caverealms grow sapling",
nodenames = {"ethereal:mushroom_sapling", "caverealms:mushroom_sapling"},
interval = 10,
chance = 50,
catch_up = false,
action = function(pos, node)
local light_level = minetest.get_node_light(pos)
-- check light level
if not light_level or light_level > 10 then
return
end
-- get node under sapling
local under = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name
-- check if registered
if not minetest.registered_nodes[node.name] then
return
end
-- ethereal sapling on lichen stone
if node.name == "ethereal:mushroom_sapling"
and under == "caverealms:stone_with_lichen"
and enough_height(pos, 10) then
grow_caverealms_mushroom(pos)
-- caverealms sapling on lichen stone
elseif node.name == "caverealms:mushroom_sapling"
and under == "caverealms:stone_with_lichen"
and enough_height(pos, 10) then
grow_caverealms_mushroom(pos)
end
end,
})
-- spread moss/lichen/algae to nearby cobblestone
minetest.register_abm({
label = "Caverealms stone spread",
nodenames = {
"caverealms:stone_with_moss",
"caverealms:stone_with_lichen",
"caverealms:stone_with_algae",
},
neighbors = {"air"},
interval = 16,
chance = 50,
catch_up = false,
action = function(pos, node)
local num = minetest.find_nodes_in_area_under_air(
{x = pos.x - 1, y = pos.y - 2, z = pos.z - 1},
{x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
"default:cobble")
if #num > 0 then
minetest.set_node(num[math.random(#num)], {name = node.name})
end
end,
})

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB