write something there
26
mods/caverealms/LICENSE.txt
Normal 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
|
@ -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
|
@ -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",
|
||||
})
|
53
mods/caverealms/config.lua
Normal 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
|
145
mods/caverealms/crafting.lua
Normal 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
|
8
mods/caverealms/depends.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
default
|
||||
asuna_core
|
||||
stairs
|
||||
ethereal?
|
||||
mobs?
|
||||
abdecor
|
||||
flowers?
|
||||
herbs?
|
1
mods/caverealms/description.txt
Normal file
|
@ -0,0 +1 @@
|
|||
A mod for Minetest to add underground realms.
|
19
mods/caverealms/docs/caverealms_lite_biomes.txt
Normal 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"
|
16
mods/caverealms/dungeon_master.lua
Normal 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
|
||||
})
|
409
mods/caverealms/functions.lua
Normal 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
|
@ -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
|
@ -0,0 +1 @@
|
|||
name = caverealms
|
521
mods/caverealms/nodes.lua
Normal 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
|
@ -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,
|
||||
})
|
BIN
mods/caverealms/schematics/amethyst_stalactite.mts
Normal file
BIN
mods/caverealms/schematics/amethyst_stalagmite.mts
Normal file
BIN
mods/caverealms/schematics/emerald_stalactite.mts
Normal file
BIN
mods/caverealms/schematics/emerald_stalagmite.mts
Normal file
BIN
mods/caverealms/schematics/ruby_stalactite.mts
Normal file
BIN
mods/caverealms/schematics/ruby_stalagmite.mts
Normal file
BIN
mods/caverealms/schematics/sapphire_stalactite.mts
Normal file
BIN
mods/caverealms/schematics/sapphire_stalagmite.mts
Normal file
BIN
mods/caverealms/schematics/shroom.mts
Normal file
BIN
mods/caverealms/textures/Thumbs.db
Normal file
BIN
mods/caverealms/textures/caverealms_algae.png
Normal file
After Width: | Height: | Size: 739 B |
BIN
mods/caverealms/textures/caverealms_algae_side.png
Normal file
After Width: | Height: | Size: 446 B |
BIN
mods/caverealms/textures/caverealms_angler_rod.png
Normal file
After Width: | Height: | Size: 252 B |
BIN
mods/caverealms/textures/caverealms_angler_rod_baited.png
Normal file
After Width: | Height: | Size: 273 B |
BIN
mods/caverealms/textures/caverealms_angler_rod_weild.png
Normal file
After Width: | Height: | Size: 260 B |
BIN
mods/caverealms/textures/caverealms_coal_dust.png
Normal file
After Width: | Height: | Size: 288 B |
BIN
mods/caverealms/textures/caverealms_dm_stone.png
Normal file
After Width: | Height: | Size: 590 B |
BIN
mods/caverealms/textures/caverealms_fire_vine.png
Normal file
After Width: | Height: | Size: 554 B |
BIN
mods/caverealms/textures/caverealms_fungi.png
Normal file
After Width: | Height: | Size: 150 B |
BIN
mods/caverealms/textures/caverealms_glow_amethyst.png
Normal file
After Width: | Height: | Size: 325 B |
BIN
mods/caverealms/textures/caverealms_glow_amethyst_ore.png
Normal file
After Width: | Height: | Size: 329 B |
BIN
mods/caverealms/textures/caverealms_glow_bait.png
Normal file
After Width: | Height: | Size: 168 B |
BIN
mods/caverealms/textures/caverealms_glow_crystal.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
mods/caverealms/textures/caverealms_glow_emerald.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
mods/caverealms/textures/caverealms_glow_emerald_ore.png
Normal file
After Width: | Height: | Size: 329 B |
BIN
mods/caverealms/textures/caverealms_glow_gem.png
Normal file
After Width: | Height: | Size: 248 B |
BIN
mods/caverealms/textures/caverealms_glow_mese.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
mods/caverealms/textures/caverealms_glow_obsidian.png
Normal file
After Width: | Height: | Size: 162 B |
BIN
mods/caverealms/textures/caverealms_glow_obsidian2.png
Normal file
After Width: | Height: | Size: 245 B |
BIN
mods/caverealms/textures/caverealms_glow_obsidian_brick.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
mods/caverealms/textures/caverealms_glow_obsidian_brick_2.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
mods/caverealms/textures/caverealms_glow_obsidian_glass.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
mods/caverealms/textures/caverealms_glow_ore.png
Normal file
After Width: | Height: | Size: 345 B |
BIN
mods/caverealms/textures/caverealms_glow_ruby.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
mods/caverealms/textures/caverealms_glow_ruby_ore.png
Normal file
After Width: | Height: | Size: 329 B |
BIN
mods/caverealms/textures/caverealms_glow_worm.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
mods/caverealms/textures/caverealms_glow_worm_green.png
Normal file
After Width: | Height: | Size: 351 B |
BIN
mods/caverealms/textures/caverealms_hot_cobble.png
Normal file
After Width: | Height: | Size: 431 B |
BIN
mods/caverealms/textures/caverealms_icicle_down.png
Normal file
After Width: | Height: | Size: 161 B |
BIN
mods/caverealms/textures/caverealms_icicle_up.png
Normal file
After Width: | Height: | Size: 158 B |
BIN
mods/caverealms/textures/caverealms_lichen.png
Normal file
After Width: | Height: | Size: 925 B |
BIN
mods/caverealms/textures/caverealms_lichen_side.png
Normal file
After Width: | Height: | Size: 437 B |
BIN
mods/caverealms/textures/caverealms_moss.png
Normal file
After Width: | Height: | Size: 754 B |
BIN
mods/caverealms/textures/caverealms_moss_side.png
Normal file
After Width: | Height: | Size: 457 B |
BIN
mods/caverealms/textures/caverealms_mushroom_cap.png
Normal file
After Width: | Height: | Size: 172 B |
BIN
mods/caverealms/textures/caverealms_mushroom_gills.png
Normal file
After Width: | Height: | Size: 141 B |
BIN
mods/caverealms/textures/caverealms_mushroom_sapling.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
mods/caverealms/textures/caverealms_mushroom_stem.png
Normal file
After Width: | Height: | Size: 402 B |
BIN
mods/caverealms/textures/caverealms_mycena.png
Normal file
After Width: | Height: | Size: 240 B |
BIN
mods/caverealms/textures/caverealms_salt_crystal.png
Normal file
After Width: | Height: | Size: 402 B |
BIN
mods/caverealms/textures/caverealms_salt_gem.png
Normal file
After Width: | Height: | Size: 243 B |
BIN
mods/caverealms/textures/caverealms_salty2.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
mods/caverealms/textures/caverealms_spike.png
Normal file
After Width: | Height: | Size: 248 B |
BIN
mods/caverealms/textures/caverealms_stone_eyes.png
Normal file
After Width: | Height: | Size: 662 B |
BIN
mods/caverealms/textures/caverealms_thin_ice.png
Normal file
After Width: | Height: | Size: 679 B |
BIN
mods/caverealms/textures/fire_basic_flame.png
Normal file
After Width: | Height: | Size: 719 B |
BIN
mods/caverealms/textures/fire_basic_flame_animated.png
Normal file
After Width: | Height: | Size: 1.2 KiB |