Noch mehr mods
|
@ -1,9 +1,25 @@
|
|||
# caverealms-lite
|
||||
# caverealms-lite-plus
|
||||
|
||||
Based on the original minetest-caverealms mod (https://github.com/HeroOfTheWinds/minetest-caverealms/).
|
||||
Based on Ezhh's cavereals-lite (https://github.com/Ezhh/caverealms_lite/), itself based on the original minetest-caverealms mod (https://github.com/HeroOfTheWinds/minetest-caverealms/).
|
||||
|
||||
Adds underground realms to minetest.
|
||||
|
||||
This mod may be used as a drop-in replacement for caverealms-lite. Newly generated blocks will show a sharp lurch in the biome type.
|
||||
|
||||
|
||||
## Changes from caverealms-lite
|
||||
|
||||
* Different biome algorithm based on independent Evil and Wonder noises, similar to heat and humidity above ground.
|
||||
* Biomes are larger.
|
||||
* Every biome has some sort of consistent light source
|
||||
* New biome type: geothermal hotsprings.
|
||||
* A few more node types similar to existing ones.
|
||||
* Various bug fixes.
|
||||
* Various new bugs ;)
|
||||
|
||||
|
||||
## Changes by Ezhh from caverealms to caverealms-lite
|
||||
|
||||
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.
|
||||
|
@ -17,8 +33,9 @@ Source code: FreeBSD License (Simplified)
|
|||
The original caverealms was licensed as WTFPL.
|
||||
|
||||
Contributors:
|
||||
- Zeno, Shara RedCat - This rewrite
|
||||
- HeroOfTheWinds, Zeno - Original mod
|
||||
- yzziizzy - current version
|
||||
- Zeno, Shara RedCat - caverealms-lite
|
||||
- HeroOfTheWinds, Zeno - Original caverealms mod
|
||||
|
||||
|
||||
## Recommended Additions
|
||||
|
|
|
@ -1,661 +0,0 @@
|
|||
--[[
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
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 = -4096,
|
||||
y_min = -10000,
|
||||
height = 2,
|
||||
height_max = 3,
|
||||
decoration = "caverealms:fire_vine",
|
||||
flags = "all_ceilings",
|
||||
})
|
|
@ -20,19 +20,20 @@ local function setting(stype, name, default)
|
|||
end
|
||||
|
||||
--generation settings
|
||||
setting("number", "ymin", -10000) --bottom realm limit
|
||||
setting("number", "ymin", -15000) --bottom realm limit
|
||||
setting("number", "ymax", -4096) --top realm limit
|
||||
setting("number", "tcave", 0.75) --cave threshold
|
||||
|
||||
--decoration chances
|
||||
setting("number", "stagcha", 0.03) --chance of stalagmites (was 0.003)
|
||||
setting("number", "stalcha", 0.03) --chance of stalactites(was 0.003)
|
||||
setting("number", "stagcha", 0.01) --chance of stalagmites 0.003
|
||||
setting("number", "stalcha", 0.01) --chance of stalactites 0.003
|
||||
|
||||
setting("number", "h_lag", 8) --max height for stalagmites
|
||||
setting("number", "h_lac", 8) --...stalactites
|
||||
setting("number", "crystal", 0.02) --chance of glow crystal formations (was 0.0002)
|
||||
setting("number", "h_cry", 8) --max height of glow crystals
|
||||
setting("number", "h_clac", 8) --max height of glow crystal stalactites
|
||||
setting("number", "h_lag", 15) --max height for stalagmites
|
||||
setting("number", "h_lac", 20) --...stalactites
|
||||
setting("number", "crystal", 0.007) --chance of glow crystal formations (0.0004)
|
||||
setting("number", "salt_crystal", 0.007) --chance of glow crystal formations
|
||||
setting("number", "h_cry", 9) --max height of glow crystals
|
||||
setting("number", "h_clac", 13) --max height of glow crystal stalactites
|
||||
|
||||
setting("number", "gemcha", 0.03) --chance of small glow gems
|
||||
setting("number", "mushcha", 0.04) --chance of mushrooms
|
||||
|
@ -43,8 +44,8 @@ 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", -8000) --upper limit
|
||||
setting("number", "dm_bot", -10000) --lower limit
|
||||
setting("number", "dm_top", -13000) --upper limit
|
||||
setting("number", "dm_bot", -15000) --lower limit
|
||||
|
||||
--should DMs spawn in DM Lair?
|
||||
setting("bool", "dm_spawn", true)
|
||||
|
|
|
@ -59,6 +59,42 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
minetest.register_craftitem("caverealms:glow_obsidian_shard", {
|
||||
description = "Glow Obsidian Shard",
|
||||
inventory_image = "caverealms_glow_obsidian_shard.png",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "caverealms:glow_obsidian_shard 9",
|
||||
type = "shapeless",
|
||||
recipe = {"caverealms:glow_obsidian"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "caverealms:glow_obsidian_shard 9",
|
||||
type = "shapeless",
|
||||
recipe = {"caverealms:glow_obsidian_2"},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "caverealms:glow_obsidian",
|
||||
recipe = {
|
||||
{"caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard"},
|
||||
{"caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard"},
|
||||
{"caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard", "caverealms:glow_obsidian_shard"},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "caverealms:glow_obsidian_glass",
|
||||
recipe = "caverealms:glow_obsidian_shard",
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- Requires ethereal:fish_raw
|
||||
if minetest.get_modpath("ethereal") then
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
default
|
||||
asuna_core
|
||||
stairs
|
||||
ethereal?
|
||||
mobs?
|
||||
abdecor
|
||||
flowers?
|
||||
herbs?
|
|
@ -102,7 +102,7 @@ function caverealms:stalactite(x,y,z, area, data)
|
|||
end
|
||||
|
||||
--glowing crystal stalagmite spawner
|
||||
function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
|
||||
function caverealms:crystal_stalagmite(x,y,z, area, data, ore, crystal, base)
|
||||
|
||||
if not caverealms:below_solid(x,y,z,area,data) then
|
||||
return
|
||||
|
@ -110,69 +110,10 @@ function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
|
|||
|
||||
--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 nid_a = ore -- ore
|
||||
local nid_b = crystal -- crystal
|
||||
local nid_s = base or c_stone --base --stone base, will be rewritten to ice in certain biomes
|
||||
|
||||
local top = math.random(5,H_CRY) --grab a random height for the stalagmite
|
||||
for j = 0, top do --y
|
||||
|
@ -203,7 +144,7 @@ function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
|
|||
end
|
||||
|
||||
--crystal stalactite spawner
|
||||
function caverealms:crystal_stalactite(x,y,z, area, data, biome)
|
||||
function caverealms:crystal_stalactite(x,y,z, area, data, ore, cry, base)
|
||||
|
||||
if not caverealms:above_solid(x,y,z,area,data) then
|
||||
return
|
||||
|
@ -211,69 +152,10 @@ function caverealms:crystal_stalactite(x,y,z, area, data, biome)
|
|||
|
||||
--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 nid_a = ore
|
||||
local nid_b = cry
|
||||
local nid_s = base or c_stone --stone base, will be rewritten to ice in certain biomes
|
||||
|
||||
local bot = math.random(-H_CLAC, -6) --grab a random height for the stalagmite
|
||||
for j = bot, 0 do --y
|
||||
|
@ -304,25 +186,26 @@ function caverealms:crystal_stalactite(x,y,z, area, data, biome)
|
|||
end
|
||||
|
||||
--glowing crystal stalagmite spawner
|
||||
function caverealms:salt_stalagmite(x,y,z, area, data, biome)
|
||||
function caverealms:salt_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 c_stone = minetest.get_content_id("default:stone")
|
||||
local c_salt = minetest.get_content_id("caverealms:salt_crystal")
|
||||
local c_salt_stone = minetest.get_content_id("caverealms:stone_with_salt")
|
||||
|
||||
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
|
||||
data[vi] = c_salt_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
|
||||
data[vi] = c_salt_stone
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -330,10 +213,10 @@ function caverealms:salt_stalagmite(x,y,z, area, data, biome)
|
|||
for j = -4, 4 do
|
||||
for k = -4, 4 do
|
||||
local vi = area:index(x+j, y, z+k)
|
||||
data[vi] = c_stone
|
||||
data[vi] = c_salt_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
|
||||
data[vi] = c_salt_stone
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
481
mods/caverealms/hotsprings.lua
Normal file
|
@ -0,0 +1,481 @@
|
|||
--[[
|
||||
minetest.register_node("caverealms:hotspring_seed", {
|
||||
description = "Hotspring seed",
|
||||
drawtype = "node",
|
||||
tiles = {"default_mese_block.png"},
|
||||
groups = {cracky=3,},
|
||||
})
|
||||
]]
|
||||
|
||||
minetest.register_node("caverealms:sulphur_deposit_1", {
|
||||
description = "Sulphur",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"default_silver_sandstone.png^[colorize:yellow:140"},
|
||||
-- drops = {},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-.3, -.5, -.3, -0.1, -.45, -0.1},
|
||||
{.3, -.5, .3, 0.1, -.45, 0.1,},
|
||||
{-.3, -.5, .3, -0.1, -.45, 0.1},
|
||||
},
|
||||
},
|
||||
groups = {cracky=3, geode_wall = 1 },
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("caverealms:fumarole", {
|
||||
description = "Fumarole",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "nodebox",
|
||||
tiles = {"default_stone.png^[colorize:black:10"},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 3,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-.4, -.5, -.4, 0.3, -.4, 0.3},
|
||||
{-.3+.05, -.4, -.3+.05, 0.2+.05, -.3, 0.2+.05},
|
||||
{-.2+.08, -.3, -.2+.08, 0.1+.08, -.2, 0.1+.08},
|
||||
},
|
||||
},
|
||||
groups = {cracky=3, },
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = "caverealms:fumarole",
|
||||
chance = 1,
|
||||
interval = 20,
|
||||
action = function(pos, node)
|
||||
pos.y = pos.y + 0
|
||||
minetest.add_particlespawner({
|
||||
amount = 20,
|
||||
time = 20,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x=-0.1, y=.6, z=-0.1},
|
||||
maxvel = {x=0.1, y=1.6, z=0.1},
|
||||
minacc = {x=-0.1, y=.1, z=-0.1},
|
||||
maxacc = {x=0.1, y=.1, z=0.1},
|
||||
minexptime = 2.5,
|
||||
maxexptime = 4.5,
|
||||
minsize = 4.2,
|
||||
maxsize = 5.2,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("caverealms:hotspring_water_source", {
|
||||
description = "Hotspring Water Source",
|
||||
drawtype = "liquid",
|
||||
light_source = 7,
|
||||
tiles = {
|
||||
{
|
||||
name = "default_river_water_source_animated.png^[colorize:yellow:50",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "default_river_water_source_animated.png^[colorize:yellow:50",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
},
|
||||
alpha = 160,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "source",
|
||||
liquid_alternative_flowing = "caverealms:hotspring_water_flowing",
|
||||
liquid_alternative_source = "caverealms:hotspring_water_source",
|
||||
liquid_viscosity = 1,
|
||||
-- Not renewable to avoid horizontal spread of water sources in sloping
|
||||
-- rivers that can cause water to overflow riverbanks and cause floods.
|
||||
-- River water source is instead made renewable by the 'force renew'
|
||||
-- option used in the 'bucket' mod by the river water bucket.
|
||||
liquid_renewable = false,
|
||||
liquid_range = 2,
|
||||
damage_per_second = 1,
|
||||
post_effect_color = {a = 103, r = 60, g = 96, b = 90},
|
||||
groups = {water = 3, liquid = 3, cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("caverealms:hotspring_water_flowing", {
|
||||
description = "Flowing Hotspring Water",
|
||||
drawtype = "flowingliquid",
|
||||
tiles = {"default_river_water.png^[colorize:yellow:50"},
|
||||
special_tiles = {
|
||||
{
|
||||
name = "default_river_water_flowing_animated.png^[colorize:yellow:50",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.8,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "default_river_water_flowing_animated.png^[colorize:yellow:50",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.8,
|
||||
},
|
||||
},
|
||||
},
|
||||
alpha = 160,
|
||||
paramtype = "light",
|
||||
paramtype2 = "flowingliquid",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "flowing",
|
||||
liquid_alternative_flowing = "caverealms:hotspring_water_flowing",
|
||||
liquid_alternative_source = "caverealms:hotspring_water_source",
|
||||
liquid_viscosity = 1,
|
||||
liquid_renewable = false,
|
||||
liquid_range = 2,
|
||||
damage_per_second = 1,
|
||||
post_effect_color = {a = 103, r = 60, g = 96, b = 90},
|
||||
groups = {water = 3, liquid = 3, not_in_creative_inventory = 1,
|
||||
cools_lava = 1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("caverealms:scalding_stone_1", {
|
||||
description = "Scalding Stone",
|
||||
tiles = {"default_stone.png^[colorize:orange:120"},
|
||||
groups = {cracky = 3, scalding_stone = 1},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 1,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
minetest.register_node("caverealms:scalding_stone_2", {
|
||||
description = "Scalding Stone",
|
||||
tiles = {"default_stone.png^[colorize:yellow:80"},
|
||||
groups = {cracky = 3, scalding_stone = 1},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 1,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
minetest.register_node("caverealms:scalding_stone_3", {
|
||||
description = "Scalding Stone",
|
||||
tiles = {"default_desert_stone.png^[colorize:orange:120"},
|
||||
groups = {cracky = 3, scalding_stone = 1},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 1,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
minetest.register_node("caverealms:scalding_stone_4", {
|
||||
description = "Scalding Stone",
|
||||
tiles = {"default_desert_stone.png^[colorize:yellow:80"},
|
||||
groups = {cracky = 3, scalding_stone = 1},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 1,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
minetest.register_node("caverealms:scalding_stone_5", {
|
||||
description = "Scalding Stone",
|
||||
tiles = {"default_stone.png^[colorize:red:80"},
|
||||
groups = {cracky = 3, scalding_stone = 1},
|
||||
drop = 'default:cobble',
|
||||
damage_per_second = 1,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
||||
local scalding_stones = {
|
||||
minetest.get_content_id("caverealms:scalding_stone_1"),
|
||||
minetest.get_content_id("caverealms:scalding_stone_2"),
|
||||
minetest.get_content_id("caverealms:scalding_stone_3"),
|
||||
minetest.get_content_id("caverealms:scalding_stone_4"),
|
||||
minetest.get_content_id("caverealms:scalding_stone_5"),
|
||||
}
|
||||
|
||||
local scalding_stone_names = {
|
||||
"caverealms:scalding_stone_1",
|
||||
"caverealms:scalding_stone_2",
|
||||
"caverealms:scalding_stone_3",
|
||||
"caverealms:scalding_stone_4",
|
||||
"caverealms:scalding_stone_5",
|
||||
}
|
||||
|
||||
|
||||
local function dist3(a, b)
|
||||
local x = a.x - b.x
|
||||
local y = a.y - b.y
|
||||
local z = a.z - b.z
|
||||
return math.sqrt(x*x + y*y + z*z)
|
||||
end
|
||||
|
||||
-- local function spawn_hotspring(pos, size)
|
||||
function caverealms:spawn_hotspring(px,py,pz, area, data, size)
|
||||
|
||||
local c_hotspring = minetest.get_content_id("caverealms:hotspring_water_source")
|
||||
|
||||
|
||||
local r = size
|
||||
|
||||
local r2 = math.ceil(r+1)
|
||||
|
||||
for x = px-r2,px+r2,1 do
|
||||
for y = -r2,r2,1 do
|
||||
for z = pz-r2,pz+r2,1 do
|
||||
local p = {x=x, y=py+y, z=z}
|
||||
local p_squash = {x=x, y=py + (y*2), z=z}
|
||||
local d = dist3(p_squash, {x=px, y=py, z=pz})
|
||||
|
||||
d = d + math.random() * .5
|
||||
|
||||
local dd = d - r
|
||||
|
||||
local n = minetest.get_node(p)
|
||||
if n.name ~= "air" then
|
||||
if dd <= -.5 then
|
||||
local vi = area:index(x, py+y, z)
|
||||
data[vi] = c_hotspring
|
||||
elseif dd < 1.5 then
|
||||
local vi = area:index(x, py+y, z)
|
||||
data[vi] = scalding_stones[math.random(#scalding_stones)]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = "caverealms:hotspring_water_source",
|
||||
chance = 60,
|
||||
interval = 5,
|
||||
action = function(pos, node)
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x=-0.1, y=.6, z=-0.1},
|
||||
maxvel = {x=0.1, y=1.6, z=0.1},
|
||||
minacc = {x=-0.1, y=.1, z=-0.1},
|
||||
maxacc = {x=0.1, y=.1, z=0.1},
|
||||
minexptime = 3.5,
|
||||
maxexptime = 6.5,
|
||||
minsize = 10.2,
|
||||
maxsize = 12.2,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
local function random_pos(pos, dist)
|
||||
local p = {
|
||||
x=pos.x + math.random(-dist, dist),
|
||||
y=pos.y + dist,
|
||||
z=pos.z + math.random(-dist, dist),
|
||||
}
|
||||
|
||||
while p.y > pos.y - dist do
|
||||
local n = minetest.get_node(p)
|
||||
if n.name ~= "air" and n.name ~= "ignore" then
|
||||
if n.name == "default:water_source" or n.name == "default:water_flowing" then
|
||||
return nil
|
||||
end
|
||||
|
||||
return p
|
||||
end
|
||||
|
||||
p.y = p.y - 1
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- life dies near hotsprings
|
||||
minetest.register_abm({
|
||||
nodenames = "group:flora",
|
||||
neighbors = {"group:scalding_stone"},
|
||||
chance = 10,
|
||||
interval = 15,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name="air"})
|
||||
end
|
||||
})
|
||||
|
||||
-- life dies near hotsprings
|
||||
minetest.register_abm({
|
||||
nodenames = "group:flora",
|
||||
neighbors = {"group:scalding_stone"},
|
||||
chance = 80,
|
||||
interval = 15,
|
||||
action = function(pos, node)
|
||||
local p = minetest.find_node_near(pos, 15, {"group:flora", "group:sapling", "group:leaves", "group:leafdecay"})
|
||||
if p then
|
||||
minetest.set_node(p, {name="air"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- minerals accumulate
|
||||
minetest.register_abm({
|
||||
nodenames = "group:scalding_stone",
|
||||
neighbors = {"air"},
|
||||
chance = 180,
|
||||
interval = 30,
|
||||
action = function(pos, node)
|
||||
-- TODO: place sulphur on sides too
|
||||
pos.y = pos.y + 1
|
||||
local n = minetest.get_node(pos)
|
||||
if n.name == "air" then
|
||||
minetest.set_node(pos, {name="caverealms:sulphur_deposit_1"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- water scalds stone
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:stone", "group:dirt"},
|
||||
neighbors = {"caverealms:hotspring_water_source", "caverealms:hotspring_water_flowing"},
|
||||
chance = 80,
|
||||
interval = 10,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name=scalding_stone_names[math.random(#scalding_stone_names)]})
|
||||
end
|
||||
})
|
||||
|
||||
-- stones scald dirt
|
||||
minetest.register_abm({
|
||||
nodenames = "group:soil",
|
||||
neighbors = {"group:scalding_stone"},
|
||||
chance = 80,
|
||||
interval = 10,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name="default:stone"})
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- water melts snow
|
||||
minetest.register_abm({
|
||||
nodenames = {"default:snow", "default:snowblock"},
|
||||
neighbors = {"caverealms:hotspring_water_source", "caverealms:hotspring_water_flowing"},
|
||||
chance = 80,
|
||||
interval = 10,
|
||||
action = function(pos, node)
|
||||
minetest.set_node(pos, {name="air"})
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
--[[ add hotspring seeds to mapgen
|
||||
minetest.register_decoration({
|
||||
name = "caverealms:hotspring_seed",
|
||||
deco_type = "simple",
|
||||
place_on = {"default:dirt_with_grass", "default:dirt_with_snow", "default:snowblock",
|
||||
"default:silver_sand", "default:sand", "default:desert_sand"
|
||||
},
|
||||
place_offset_y = 1,
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.010,
|
||||
scale = 0.01,
|
||||
spread = {x = 200, y = 200, z = 200},
|
||||
seed = 65645647,
|
||||
octaves = 3,
|
||||
persist = 0.7,
|
||||
},
|
||||
biomes = {"grassland", "snowy_grassland", "tundra", "taiga", "desert", "cold_desert", "sandstone_desert"},
|
||||
y_max = 1000,
|
||||
y_min = 5,
|
||||
place_offset_y = 1,
|
||||
decoration = "caverealms:hotspring_seed",
|
||||
flags = "force_placement",
|
||||
})
|
||||
]]
|
||||
|
||||
-- hotsprings boil rivers
|
||||
minetest.register_abm({
|
||||
nodenames = {"default:river_water_source"},
|
||||
neighbors = {"caverealms:hotspring_water_source", "caverealms:hotspring_water_flowing"},
|
||||
chance = 15,
|
||||
interval = 5,
|
||||
action = function(pos, node)
|
||||
|
||||
-- only spread downhill
|
||||
local hw = minetest.find_nodes_in_area(
|
||||
{x=pos.x-1, y=pos.y, z=pos.z-1},
|
||||
{x=pos.x+1, y=pos.y+1, z=pos.z+1},
|
||||
{"caverealms:hotspring_water_source", "caverealms:hotspring_water_flowing"})
|
||||
|
||||
if not hw or #hw == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- don't spread under rivers
|
||||
pos.y = pos.y + 1
|
||||
local n = minetest.get_node(pos)
|
||||
if n.name == "default:river_water_source" or n.name == "default:river_water_flowing" then
|
||||
return
|
||||
end
|
||||
|
||||
pos.y = pos.y - 1
|
||||
|
||||
minetest.set_node(pos, {name="caverealms:hotspring_water_source"})
|
||||
end
|
||||
})
|
||||
|
|
@ -1,13 +1,27 @@
|
|||
-- 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())
|
||||
--[[
|
||||
-- debug privileges
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
|
||||
local privs = minetest.get_player_privs(name)
|
||||
|
||||
privs.fly = true
|
||||
privs.fast = true
|
||||
privs.teleport = true
|
||||
privs.noclip = true
|
||||
minetest.set_player_privs(name, privs)
|
||||
|
||||
local p = player:get_pos()
|
||||
if p.y > -100 then
|
||||
player:set_pos({x=0, y=-20000, z= 0})
|
||||
end
|
||||
end)
|
||||
--]]
|
||||
|
||||
|
||||
--load companion lua files
|
||||
dofile(modpath.."/config.lua") --configuration file; holds various constants
|
||||
|
@ -15,10 +29,461 @@ 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")
|
||||
dofile(modpath.."/hotsprings.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
|
||||
end
|
||||
|
||||
-- Parameters
|
||||
|
||||
local YMIN = caverealms.config.ymin -- Approximate realm limits.
|
||||
local YMAX = caverealms.config.ymax
|
||||
local TCAVE = caverealms.config.tcave --0.5 -- Cave threshold. 1 = small rare caves, 0.5 = 1/3rd ground volume, 0 = 1/2 ground volume
|
||||
local BLEND = 128 -- Cave blend distance near YMIN, YMAX
|
||||
|
||||
local STAGCHA = caverealms.config.stagcha --0.002 --chance of stalagmites
|
||||
local STALCHA = caverealms.config.stalcha --0.003 --chance of stalactites
|
||||
local CRYSTAL = caverealms.config.crystal --0.0004 --chance of glow crystal formations
|
||||
local SALTCRYCHA = caverealms.config.salt_crystal --0.007 --chance of salt crystal cubes
|
||||
local GEMCHA = caverealms.config.gemcha --0.03 --chance of small glow gems
|
||||
local HOTSCHA = 0.009 --chance of hotsprings
|
||||
local MUSHCHA = caverealms.config.mushcha --0.04 --chance of mushrooms
|
||||
local MYCCHA = caverealms.config.myccha --0.03 --chance of mycena mushrooms
|
||||
local WORMCHA = caverealms.config.wormcha --0.03 --chance of glow worms
|
||||
local GIANTCHA = caverealms.config.giantcha --0.001 -- chance of giant mushrooms
|
||||
local ICICHA = caverealms.config.icicha --0.035 -- chance of icicles
|
||||
local FLACHA = caverealms.config.flacha --0.04 --chance of constant flames
|
||||
|
||||
local DM_TOP = caverealms.config.dm_top -- -4000 --level at which Dungeon Master Realms start to appear
|
||||
local DM_BOT = caverealms.config.dm_bot -- -5000 --level at which "" ends
|
||||
local DEEP_CAVE = caverealms.config.deep_cave -- -7000 --level at which deep cave biomes take over
|
||||
|
||||
-- 2D noise for biome
|
||||
|
||||
local np_biome_evil = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=200, y=200, z=200},
|
||||
seed = 9130,
|
||||
octaves = 3,
|
||||
persist = 0.5
|
||||
}
|
||||
|
||||
local np_biome_wonder = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = {x=400, y=400, z=400},
|
||||
seed = 8943,
|
||||
octaves = 2,
|
||||
persist = 0.45
|
||||
}
|
||||
|
||||
-- Stuff
|
||||
|
||||
subterrain = {}
|
||||
|
||||
|
||||
-- On generated function
|
||||
|
||||
minetest.register_on_generated(function(minp, maxp, seed)
|
||||
--if out of range of caverealms limits
|
||||
if minp.y > YMAX or maxp.y < YMIN then
|
||||
return --quit; otherwise, you'd have stalagmites all over the place
|
||||
end
|
||||
|
||||
--easy reference to commonly used values
|
||||
local t1 = os.clock()
|
||||
local x1 = maxp.x
|
||||
local y1 = maxp.y
|
||||
local z1 = maxp.z
|
||||
local x0 = minp.x
|
||||
local y0 = minp.y
|
||||
local z0 = minp.z
|
||||
|
||||
--print ("[caverealms] chunk minp ("..x0.." "..y0.." "..z0..")") --tell people you are generating a chunk
|
||||
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
||||
local data = vm:get_data()
|
||||
|
||||
--grab content IDs
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
local c_desertstone = minetest.get_content_id("default:desert_stone")
|
||||
local c_sandstone = minetest.get_content_id("default:sandstone")
|
||||
local c_obsidian = minetest.get_content_id("default:obsidian")
|
||||
local c_sand = minetest.get_content_id("default:sand")
|
||||
|
||||
local c_water = minetest.get_content_id("default:water_source")
|
||||
local c_lava = minetest.get_content_id("default:lava_source")
|
||||
local c_ice = minetest.get_content_id("default:ice")
|
||||
local c_ice = minetest.get_content_id("default:sand")
|
||||
local c_ice = minetest.get_content_id("default:silver_sand")
|
||||
local c_thinice = minetest.get_content_id("caverealms:thin_ice")
|
||||
local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
|
||||
local c_gem = minetest.get_content_id("caverealms:glow_gem")
|
||||
local c_saltgem = minetest.get_content_id("caverealms:salt_gem")
|
||||
local c_spike = minetest.get_content_id("caverealms:spike")
|
||||
local c_moss = minetest.get_content_id("caverealms:stone_with_moss")
|
||||
local c_lichen = minetest.get_content_id("caverealms:stone_with_lichen")
|
||||
local c_algae = minetest.get_content_id("caverealms:stone_with_algae")
|
||||
local c_salt = minetest.get_content_id("caverealms:stone_with_salt")
|
||||
local c_hcobble = minetest.get_content_id("caverealms:hot_cobble")
|
||||
local c_gobsidian = minetest.get_content_id("caverealms:glow_obsidian")
|
||||
local c_gobsidian2 = minetest.get_content_id("caverealms:glow_obsidian_2")
|
||||
local c_coalblock = minetest.get_content_id("default:coalblock")
|
||||
local c_desand = minetest.get_content_id("default:desert_sand")
|
||||
local c_coaldust = minetest.get_content_id("caverealms:coal_dust")
|
||||
local c_fungus = minetest.get_content_id("caverealms:fungus")
|
||||
local c_mycena = minetest.get_content_id("caverealms:mycena")
|
||||
local c_worm_blue = minetest.get_content_id("caverealms:glow_worm")
|
||||
local c_worm_green = minetest.get_content_id("caverealms:glow_worm_green")
|
||||
local c_worm_red = minetest.get_content_id("caverealms:glow_worm_red")
|
||||
local c_fire_vine = minetest.get_content_id("caverealms:fire_vine")
|
||||
local c_iciu = minetest.get_content_id("caverealms:icicle_up")
|
||||
local c_icid = minetest.get_content_id("caverealms:icicle_down")
|
||||
local c_flame = minetest.get_content_id("caverealms:constant_flame")
|
||||
local c_bflame = minetest.get_content_id("caverealms:constant_flame_blue")
|
||||
local c_firefly = minetest.get_content_id("fireflies:firefly")
|
||||
local c_bluefly = minetest.get_content_id("caverealms:butterfly_blue")
|
||||
|
||||
-- crystals
|
||||
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_citrine = minetest.get_content_id("caverealms:glow_citrine")
|
||||
local c_citore = minetest.get_content_id("caverealms:glow_citrine_ore")
|
||||
local c_ameth = minetest.get_content_id("caverealms:glow_amethyst")
|
||||
local c_amethore = minetest.get_content_id("caverealms:glow_amethyst_ore")
|
||||
local c_hotspring = minetest.get_content_id("caverealms:hotspring_water_source")
|
||||
|
||||
|
||||
local stone_nodes = {
|
||||
[c_stone] = 1,
|
||||
[c_desertstone] = 1,
|
||||
[c_sandstone] = 1,
|
||||
[c_coalblock] = 1,
|
||||
[c_sand] = 1,
|
||||
[c_desand] = 1,
|
||||
[c_obsidian] = 1,
|
||||
}
|
||||
|
||||
if nil ~= minetest.get_modpath("geology") then
|
||||
stone_nodes[minetest.get_content_id("geology:gneiss")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:slate")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:jade")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:granite")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:marble")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:basalt")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:chalk")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:ors")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:serpentine")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:shale")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:schist")] = 1
|
||||
stone_nodes[minetest.get_content_id("geology:anthracite")] = 1
|
||||
end
|
||||
|
||||
--mandatory values
|
||||
local sidelen = x1 - x0 + 1 --length of a mapblock
|
||||
local chulens = {x=sidelen, y=sidelen, z=sidelen} --table of chunk edges
|
||||
local chulens2D = {x=sidelen, y=sidelen, z=1}
|
||||
local minposxyz = {x=x0, y=y0, z=z0} --bottom corner
|
||||
local minposxz = {x=x0, y=z0} --2D bottom corner
|
||||
|
||||
local nvals_biome_e = minetest.get_perlin_map(np_biome_evil, chulens2D):get2dMap_flat({x=x0+150, y=z0+50}) --2D noise for biomes (will be 3D humidity/temp later)
|
||||
local nvals_biome_w = minetest.get_perlin_map(np_biome_wonder, chulens2D):get2dMap_flat({x=x0+150, y=z0+50}) --2D noise for biomes (will be 3D humidity/temp later)
|
||||
|
||||
|
||||
local nixyz = 1 --3D node index
|
||||
local nixz = 1 --2D node index
|
||||
local nixyz2 = 1 --second 3D index for second loop
|
||||
|
||||
|
||||
for z = z0, z1 do -- for each xy plane progressing northwards
|
||||
--increment indices
|
||||
nixyz = nixyz + 1
|
||||
|
||||
|
||||
--decoration loop
|
||||
for y = y0, y1 do -- for each x row progressing upwards
|
||||
|
||||
local is_deep = false
|
||||
if y < DEEP_CAVE then
|
||||
is_deep = true
|
||||
end
|
||||
|
||||
|
||||
local vi = area:index(x0, y, z)
|
||||
for x = x0, x1 do -- for each node do
|
||||
|
||||
local ai = area:index(x,y+1,z) --above index
|
||||
local bi = area:index(x,y-1,z) --below index
|
||||
|
||||
local mode = 0 -- nothing, 1 = ground, 2 = ceiling
|
||||
|
||||
if data[vi] == c_air then
|
||||
if stone_nodes[data[bi]] ~= nil then --ground
|
||||
mode = 1
|
||||
elseif stone_nodes[data[bi]] ~= nil and y < y1 then -- ceiling
|
||||
mode = 2
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if mode > 0 then
|
||||
local a2i = area:index(x,y+2,z) --above index
|
||||
|
||||
--determine biome
|
||||
local biome = 0 --preliminary declaration
|
||||
local n_biome_e = nvals_biome_e[nixz] --make an easier reference to the noise
|
||||
local n_biome_w = nvals_biome_w[nixz] --make an easier reference to the noise
|
||||
local n_biome = (n_biome_e + n_biome_w) / 2
|
||||
|
||||
local floor = c_hcobble
|
||||
local floor_depth = 1
|
||||
local worms = {}
|
||||
local worm_max_len = 1
|
||||
local no_mites = false
|
||||
local no_tites = false
|
||||
local decos = {}
|
||||
local decos2 = {}
|
||||
local deco_mul = 1
|
||||
|
||||
local wiggle = (math.random() - 0.5) / 20
|
||||
n_biome_e = n_biome_e + wiggle
|
||||
n_biome_w = n_biome_w + wiggle
|
||||
|
||||
|
||||
if n_biome_e < -0.33 then
|
||||
if n_biome_w < -0.33 then -- algae
|
||||
floor = c_algae
|
||||
worms = {c_worm_green}
|
||||
worm_max_len = 3
|
||||
decos = {c_mycena}
|
||||
if mode == 1 and data[ai] == c_air and math.random() < 0.03 then
|
||||
data[ai] = c_firefly
|
||||
end
|
||||
elseif n_biome_w < 0.33 then -- moss
|
||||
floor = c_moss
|
||||
worms = {c_worm_green, c_worm_blue}
|
||||
worm_max_len = 3
|
||||
decos = {c_mycena}
|
||||
deco_mul = 2.0
|
||||
if mode == 1 and data[ai] == c_air and math.random() < 0.001 then
|
||||
caverealms:grow_green_mushroom(x,y-1,z, area, data)
|
||||
end
|
||||
else -- lichen
|
||||
floor = c_lichen
|
||||
worms = {c_worm_blue}
|
||||
worm_max_len = 3
|
||||
decos = {c_mycena, c_fungus, c_fungus}
|
||||
deco_mul = 3.3
|
||||
if mode == 1 and data[ai] == c_air and math.random() < 0.003 then
|
||||
data[ai] = c_bluefly
|
||||
end
|
||||
end
|
||||
elseif n_biome_e < 0.33 then
|
||||
if n_biome_w < -0.33 then -- desert
|
||||
|
||||
if math.random() < 0.05 then
|
||||
floor = c_coalblock
|
||||
elseif math.random() < 0.15 then
|
||||
floor = c_coaldust
|
||||
else
|
||||
floor = c_desand
|
||||
end
|
||||
floor_depth = 2
|
||||
|
||||
worms = {c_worm_red}
|
||||
worm_max_len = 1
|
||||
decos = {c_flame, c_spike}
|
||||
elseif n_biome_w < 0.33 then -- salt
|
||||
floor = c_salt
|
||||
floor_depth = 2
|
||||
worms = {c_icid}
|
||||
worm_max_len = 1
|
||||
no_mites = true
|
||||
|
||||
decos = {c_saltgem}
|
||||
else -- glacial
|
||||
floor = c_thinice
|
||||
floor_depth = 2
|
||||
worms = {c_icid}
|
||||
worm_max_len = 1
|
||||
|
||||
decos = {c_gem}
|
||||
end
|
||||
else
|
||||
if n_biome_w < -0.33 then -- hotspring
|
||||
floor = c_hcobble
|
||||
worms = {c_icid}
|
||||
worm_max_len = 1
|
||||
if mode == 1 and math.random() < 0.005 then
|
||||
caverealms:spawn_hotspring(x,y,z, area, data, math.random(4) + 2)
|
||||
end
|
||||
decos = {c_fire_vine}
|
||||
deco_mul = 0.7
|
||||
elseif n_biome_w < 0.33 then -- dungeon
|
||||
if math.random() < 0.5 then
|
||||
floor = c_gobsidian
|
||||
else
|
||||
floor = c_gobsidian2
|
||||
end
|
||||
worms = {c_worm_red}
|
||||
worm_max_len = 4
|
||||
decos = {c_flame, c_flame, c_fire_vine}
|
||||
else -- deep glacial
|
||||
floor = c_ice
|
||||
floor_depth = 3
|
||||
worms = {c_icid}
|
||||
worm_max_len = 1
|
||||
|
||||
decos = {c_bflame}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- place floor
|
||||
if mode == 1 then --ground
|
||||
for i = 1,floor_depth do
|
||||
local ii = area:index(x,y-i,z)
|
||||
if stone_nodes[data[bi]] ~= nil then
|
||||
data[ii] = floor
|
||||
end
|
||||
end
|
||||
|
||||
-- decorations
|
||||
if math.random() < ICICHA * deco_mul and data[bi] ~= c_hotspring then
|
||||
data[vi] = decos[math.random(1, #decos)]
|
||||
end
|
||||
|
||||
-- salt crystals
|
||||
if floor == c_salt and math.random() < SALTCRYCHA then
|
||||
caverealms:salt_stalagmite(x,y-1,z, area, data)
|
||||
end
|
||||
|
||||
-- stone stalagmites
|
||||
if math.random() < STAGCHA then
|
||||
caverealms:stalagmite(x,y,z, area, data)
|
||||
end
|
||||
|
||||
-- crystal stalagmites
|
||||
if not no_mites and math.random() < CRYSTAL then
|
||||
local ore
|
||||
local cry
|
||||
|
||||
if n_biome_e < 0 then -- non-evil
|
||||
if n_biome_w < -0.33 then
|
||||
ore = c_crystore
|
||||
cry = c_crystal
|
||||
elseif n_biome_w < 0.33 then
|
||||
ore = c_emore
|
||||
cry = c_emerald
|
||||
else
|
||||
ore = c_amethore
|
||||
cry = c_ameth
|
||||
end
|
||||
elseif n_biome_e < 0.4 then -- moderately evil
|
||||
if n_biome_w < 0 then
|
||||
ore = c_meseore
|
||||
cry = c_mesecry
|
||||
else
|
||||
ore = c_citore
|
||||
cry = c_citrine
|
||||
end
|
||||
else -- very evil
|
||||
ore = c_rubore
|
||||
cry = c_ruby
|
||||
end
|
||||
|
||||
local base = floor
|
||||
caverealms:crystal_stalagmite(x,y-1,z, area, data, ore, cry, base)
|
||||
end
|
||||
|
||||
|
||||
if n_biome_w > 0.5 and n_biome_e < -0.33 and math.random() < GIANTCHA then --giant mushrooms
|
||||
caverealms:giant_shroom(x, y, z, area, data)
|
||||
end
|
||||
|
||||
|
||||
elseif mode == 2 then -- place ceiling
|
||||
if math.random() < ICICHA then
|
||||
local worm = worms[math.random(1,#worms)]
|
||||
local wdepth = math.random(1, worm_max_len)
|
||||
for i = 0,wdepth-1 do
|
||||
local ii = area:index(x,y-i,z)
|
||||
if data[ii] == c_air then
|
||||
data[ii] = worm
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- stalactites
|
||||
if not no_tites and math.random() < CRYSTAL then
|
||||
local ore
|
||||
local cry
|
||||
|
||||
if n_biome_e < 0 then -- non-evil
|
||||
if n_biome_w < -0.33 then
|
||||
ore = c_crystore
|
||||
cry = c_crystal
|
||||
elseif n_biome_w < 0.33 then
|
||||
ore = c_emore
|
||||
cry = c_emerald
|
||||
else
|
||||
ore = c_amethore
|
||||
cry = c_ameth
|
||||
end
|
||||
elseif n_biome_e < 0.4 then -- moderately evil
|
||||
if n_biome_w < 0 then
|
||||
ore = c_meseore
|
||||
cry = c_mesecry
|
||||
else
|
||||
ore = c_citore
|
||||
cry = c_citrine
|
||||
end
|
||||
else -- very evil
|
||||
ore = c_rubore
|
||||
cry = c_ruby
|
||||
end
|
||||
|
||||
local base = c_stone
|
||||
caverealms:crystal_stalactite(x,y,z, area, data, ore, cry, base)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
nixyz2 = nixyz2 + 1
|
||||
nixz = nixz + 1
|
||||
vi = vi + 1
|
||||
end
|
||||
nixz = nixz - sidelen --shift the 2D index back
|
||||
end
|
||||
nixz = nixz + sidelen --shift the 2D index up a layer
|
||||
end
|
||||
|
||||
--send data back to voxelmanip
|
||||
vm:set_data(data)
|
||||
--calc lighting
|
||||
vm:set_lighting({day=0, night=0})
|
||||
vm:calc_lighting()
|
||||
--write it to world
|
||||
vm:write_to_map(data)
|
||||
|
||||
--local chugent = math.ceil((os.clock() - t1) * 1000) --grab how long it took
|
||||
--print ("[caverealms] "..chugent.." ms") --tell people how long
|
||||
end)
|
||||
print("[caverealms] loaded!")
|
||||
|
|
|
@ -1 +1,5 @@
|
|||
name = caverealms
|
||||
name = caverealms
|
||||
depends = default, stairs, fireflies
|
||||
optional_depends = ethereal, mobs, geology
|
||||
description = Drop-in improvement of Caverealms Lite
|
||||
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
-- CaveRealms nodes.lua
|
||||
|
||||
--NODES--
|
||||
|
||||
--glowing crystal
|
||||
minetest.register_node("caverealms:glow_crystal", {
|
||||
description = "Glow Sapphire",
|
||||
|
@ -58,6 +54,20 @@ minetest.register_node("caverealms:glow_ruby", {
|
|||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
--glowing citrine
|
||||
minetest.register_node("caverealms:glow_citrine", {
|
||||
description = "Glow Citrine",
|
||||
tiles = {"caverealms_glow_citrine.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",
|
||||
|
@ -105,6 +115,17 @@ minetest.register_node("caverealms:glow_ruby_ore", {
|
|||
paramtype = "light",
|
||||
})
|
||||
|
||||
--embedded citrine
|
||||
minetest.register_node("caverealms:glow_citrine_ore", {
|
||||
description = "Glow Citrine Ore",
|
||||
tiles = {"caverealms_glow_citrine_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",
|
||||
|
@ -215,7 +236,7 @@ minetest.register_node("caverealms:icicle_up", {
|
|||
inventory_image = "caverealms_icicle_up.png",
|
||||
wield_image = "caverealms_icicle_up.png",
|
||||
is_ground_content = true,
|
||||
groups = {cracky=3, oddly_breakable_by_hand=1},
|
||||
groups = {cracky=3, oddly_breakable_by_hand=1, attached_node = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
light_source = 8,
|
||||
paramtype = "light",
|
||||
|
@ -225,7 +246,7 @@ minetest.register_node("caverealms:icicle_up", {
|
|||
visual_scale = 1.0,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -7/16, 0.5},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -236,7 +257,7 @@ minetest.register_node("caverealms:icicle_down", {
|
|||
inventory_image = "caverealms_icicle_down.png",
|
||||
wield_image = "caverealms_icicle_down.png",
|
||||
is_ground_content = true,
|
||||
groups = {cracky=3, oddly_breakable_by_hand=1},
|
||||
groups = {cracky=3, oddly_breakable_by_hand=1, attached_node = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
light_source = 8,
|
||||
paramtype = "light",
|
||||
|
@ -246,7 +267,7 @@ minetest.register_node("caverealms:icicle_down", {
|
|||
visual_scale = 1.0,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
fixed = {-0.5, 7/16, -0.5, 0.5, 0.5, 0.5},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -256,7 +277,7 @@ minetest.register_node("caverealms: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',
|
||||
-- drop = 'default:cobble',
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
|
@ -268,7 +289,7 @@ minetest.register_node("caverealms: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',
|
||||
-- drop = 'default:cobble',
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
|
@ -280,7 +301,7 @@ minetest.register_node("caverealms: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',
|
||||
-- drop = 'default:cobble',
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
|
@ -305,11 +326,13 @@ 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},
|
||||
groups = {cracky=1, hot=1, cobble = 1, stone = 1},
|
||||
damage_per_second = 1,
|
||||
light_source = 3,
|
||||
paramtype = "light",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_stone_defaults({
|
||||
footstep = {name="default_stone_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
--Glow Obsidian
|
||||
|
@ -320,7 +343,9 @@ minetest.register_node("caverealms:glow_obsidian", {
|
|||
groups = {cracky=1, level=2},
|
||||
light_source = 7,
|
||||
paramtype = "light",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_stone_defaults({
|
||||
footstep = {name="default_stone_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
--Glow Obsidian 2 - has traces of lava
|
||||
|
@ -331,7 +356,9 @@ minetest.register_node("caverealms:glow_obsidian_2", {
|
|||
groups = {cracky=1, hot=1, level=2},
|
||||
light_source = 9,
|
||||
paramtype = "light",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sounds = default.node_sound_stone_defaults({
|
||||
footstep = {name="default_stone_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
--Glow Obsidian Bricks
|
||||
|
@ -398,7 +425,7 @@ minetest.register_node("caverealms:glow_worm", {
|
|||
inventory_image = "caverealms_glow_worm.png",
|
||||
wield_image = "caverealms_glow_worm.png",
|
||||
is_ground_content = true,
|
||||
groups = {oddly_breakable_by_hand=3},
|
||||
groups = {oddly_breakable_by_hand=3, },
|
||||
light_source = 9,
|
||||
paramtype = "light",
|
||||
drawtype = "plantlike",
|
||||
|
@ -417,7 +444,26 @@ minetest.register_node("caverealms:glow_worm_green", {
|
|||
inventory_image = "caverealms_glow_worm_green.png",
|
||||
wield_image = "caverealms_glow_worm_green.png",
|
||||
is_ground_content = true,
|
||||
groups = {oddly_breakable_by_hand=3},
|
||||
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_red", {
|
||||
description = "Red Glow Worms",
|
||||
tiles = {"caverealms_glow_worm_red.png"},
|
||||
inventory_image = "caverealms_glow_worm_red.png",
|
||||
wield_image = "caverealms_glow_worm_red.png",
|
||||
is_ground_content = true,
|
||||
groups = {oddly_breakable_by_hand=3, },
|
||||
light_source = 9,
|
||||
paramtype = "light",
|
||||
drawtype = "plantlike",
|
||||
|
@ -437,7 +483,7 @@ minetest.register_node("caverealms:fire_vine", {
|
|||
wield_image = "caverealms_fire_vine.png",
|
||||
is_ground_content = true,
|
||||
damage_per_second = 1,
|
||||
groups = {oddly_breakable_by_hand=3},
|
||||
groups = {oddly_breakable_by_hand=3, },
|
||||
light_source = 9,
|
||||
paramtype = "light",
|
||||
drawtype = "plantlike",
|
||||
|
@ -466,7 +512,23 @@ minetest.register_node("caverealms:constant_flame", {
|
|||
drop = '',
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
floodable = true,
|
||||
damage_per_second = 4,
|
||||
})
|
||||
|
||||
minetest.register_node("caverealms:constant_flame_blue", {
|
||||
description = "Blue Fire",
|
||||
drawtype = "plantlike",
|
||||
tiles = {{
|
||||
name="caverealms_blue_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 = {dig_immediate=3, not_in_creative_inventory=1},
|
||||
paramtype = "light",
|
||||
drop = '',
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
damage_per_second = 4,
|
||||
})
|
||||
|
||||
|
@ -502,6 +564,47 @@ minetest.register_node("caverealms:dm_statue", {
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("caverealms:butterfly_blue", {
|
||||
description = desc,
|
||||
drawtype = "plantlike",
|
||||
tiles = {{
|
||||
name = "caverealms_butterfly_blue_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 32,
|
||||
aspect_h = 32,
|
||||
length = 3
|
||||
},
|
||||
}},
|
||||
inventory_image = "caverealms_butterfly_blue.png",
|
||||
wield_image = "caverealms_butterfly_blue.png",
|
||||
waving = 1,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
buildable_to = true,
|
||||
walkable = false,
|
||||
groups = {catchable = 1},
|
||||
light_source = 6,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
||||
},
|
||||
floodable = true,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local player_name = placer:get_player_name()
|
||||
local pos = pointed_thing.above
|
||||
|
||||
if not minetest.is_protected(pos, player_name) and
|
||||
not minetest.is_protected(pointed_thing.under, player_name) and
|
||||
minetest.get_node(pos).name == "air" then
|
||||
minetest.set_node(pos, {name = "caverealms:butterfly_blue"})
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
-- Compatibility
|
||||
minetest.register_alias("caverealms:hanging_thin_ice", "caverealms:thin_ice")
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
-- Cavrealms plants and trees for lichen, moss and algae biomes
|
||||
|
||||
-- Lichen biome
|
||||
|
||||
-- glowing fungi
|
||||
|
@ -9,7 +7,7 @@ minetest.register_node("caverealms:fungus", {
|
|||
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},
|
||||
groups = {oddly_breakable_by_hand = 3, attached_node = 1},
|
||||
light_source = 5,
|
||||
paramtype = "light",
|
||||
drawtype = "plantlike",
|
||||
|
@ -29,7 +27,7 @@ minetest.register_node("caverealms:mycena", {
|
|||
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},
|
||||
groups = {oddly_breakable_by_hand = 3, attached_node = 1},
|
||||
light_source = 6,
|
||||
paramtype = "light",
|
||||
drawtype = "plantlike",
|
||||
|
@ -61,6 +59,7 @@ else
|
|||
tiles = {"caverealms_mushroom_cap.png"},
|
||||
is_ground_content = true,
|
||||
groups = {choppy=2, oddly_breakable_by_hand=1,},
|
||||
light_source = 3,
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
|
@ -88,14 +87,62 @@ else
|
|||
})
|
||||
end
|
||||
|
||||
-- green mushroom
|
||||
-- cap
|
||||
minetest.register_node("caverealms:mushroom_cap_green", {
|
||||
description = "Giant Mushroom Cap, Green",
|
||||
tiles = {"caverealms_mushroom_cap_green.png"},
|
||||
is_ground_content = true,
|
||||
groups = {choppy=2, oddly_breakable_by_hand=1,},
|
||||
light_source = 3,
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"caverealms:mushroom_sapling_green"}, rarity = 20},
|
||||
{items = {"caverealms:mushroom_cap_green"}}
|
||||
}
|
||||
},
|
||||
})
|
||||
minetest.register_node("caverealms:mushroom_cap_green_spots", {
|
||||
description = "Giant Mushroom Cap, Green",
|
||||
tiles = {"caverealms_mushroom_cap_green.png^caverealms_mushroom_cap_spots.png"},
|
||||
is_ground_content = true,
|
||||
groups = {choppy=2, oddly_breakable_by_hand=1,},
|
||||
light_source = 3,
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {"caverealms:mushroom_sapling_green_spots"}, rarity = 20},
|
||||
{items = {"caverealms:mushroom_cap_green"}}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
-- sapling
|
||||
minetest.register_node("caverealms:mushroom_sapling_green", {
|
||||
description = "Mushroom Tree Sapling, Green",
|
||||
drawtype = "plantlike",
|
||||
tiles = {"caverealms_mushroom_sapling_green.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(),
|
||||
})
|
||||
|
||||
|
||||
-- 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},
|
||||
groups = {choppy=2, oddly_breakable_by_hand=1},
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
})
|
||||
|
@ -167,6 +214,45 @@ minetest.register_abm({
|
|||
})
|
||||
|
||||
|
||||
-- green mushroom growth
|
||||
function caverealms:grow_green_mushroom(x,y,z, area, data)
|
||||
local c_stem = minetest.get_content_id("caverealms:mushroom_stem")
|
||||
local c_gills = minetest.get_content_id("caverealms:mushroom_gills")
|
||||
local c_cap = minetest.get_content_id("caverealms:mushroom_cap_green")
|
||||
local c_caps = minetest.get_content_id("caverealms:mushroom_cap_green_spots")
|
||||
|
||||
-- stem
|
||||
local stop = {x=x,y=y+3,z=z}--{x = x+math.random(-1,1), y = y+3, z = z+math.random(-1,1)}
|
||||
|
||||
for i = 1,3 do
|
||||
-- local vi = area:index(x+((stop.x-x) / i), y+i, z+((stop.z-z) / i))
|
||||
local vi = area:index(x, y+i, z)
|
||||
data[vi] = c_stem
|
||||
end
|
||||
|
||||
data[area:index(stop.x+1, y+3, stop.z)] = c_gills
|
||||
data[area:index(stop.x-1, y+3, stop.z)] = c_gills
|
||||
data[area:index(stop.x, y+3, stop.z+1)] = c_gills
|
||||
data[area:index(stop.x, y+3, stop.z-1)] = c_gills
|
||||
|
||||
data[area:index(stop.x+1, y+3, stop.z+1)] = c_cap
|
||||
data[area:index(stop.x-1, y+3, stop.z+1)] = c_cap
|
||||
data[area:index(stop.x+1, y+3, stop.z-1)] = c_cap
|
||||
data[area:index(stop.x-1, y+3, stop.z-1)] = c_caps
|
||||
data[area:index(stop.x+2, y+3, stop.z)] = c_cap
|
||||
data[area:index(stop.x-2, y+3, stop.z)] = c_cap
|
||||
data[area:index(stop.x, y+3, stop.z+2)] = c_caps
|
||||
data[area:index(stop.x, y+3, stop.z-2)] = c_cap
|
||||
data[area:index(stop.x+1, y+4, stop.z)] = c_caps
|
||||
data[area:index(stop.x-1, y+4, stop.z)] = c_cap
|
||||
data[area:index(stop.x, y+4, stop.z+1)] = c_caps
|
||||
data[area:index(stop.x, y+4, stop.z-1)] = c_cap
|
||||
data[area:index(stop.x, y+4, stop.z)] = c_cap
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- spread moss/lichen/algae to nearby cobblestone
|
||||
minetest.register_abm({
|
||||
label = "Caverealms stone spread",
|
||||
|
|
BIN
mods/caverealms/screenshot.png
Normal file
After Width: | Height: | Size: 153 KiB |
BIN
mods/caverealms/textures/caverealms_blue_flame_animated.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
mods/caverealms/textures/caverealms_butterfly_blue.png
Normal file
After Width: | Height: | Size: 152 B |
BIN
mods/caverealms/textures/caverealms_butterfly_blue_animated.png
Normal file
After Width: | Height: | Size: 202 B |
BIN
mods/caverealms/textures/caverealms_glow_citrine.png
Normal file
After Width: | Height: | Size: 755 B |
BIN
mods/caverealms/textures/caverealms_glow_citrine_ore.png
Normal file
After Width: | Height: | Size: 637 B |
BIN
mods/caverealms/textures/caverealms_glow_obsidian_shard.png
Normal file
After Width: | Height: | Size: 276 B |
BIN
mods/caverealms/textures/caverealms_glow_worm_red.png
Normal file
After Width: | Height: | Size: 574 B |
BIN
mods/caverealms/textures/caverealms_mushroom_cap_green.png
Normal file
After Width: | Height: | Size: 316 B |
BIN
mods/caverealms/textures/caverealms_mushroom_cap_spots.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
mods/caverealms/textures/caverealms_mushroom_sapling_green.png
Normal file
After Width: | Height: | Size: 3.2 KiB |