Noch mehr mods

This commit is contained in:
N-Nachtigal 2025-05-18 04:02:23 +02:00
parent a063db5d3b
commit cf017b2ca1
527 changed files with 21113 additions and 181 deletions

View file

@ -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

View file

@ -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",
})

View file

@ -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)

View file

@ -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

View file

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

View file

@ -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

View 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
})

View file

@ -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!")

View file

@ -1 +1,5 @@
name = caverealms
name = caverealms
depends = default, stairs, fireflies
optional_depends = ethereal, mobs, geology
description = Drop-in improvement of Caverealms Lite

View file

@ -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")

View file

@ -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",

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB