summaryrefslogtreecommitdiff
path: root/caverealms
diff options
context:
space:
mode:
Diffstat (limited to 'caverealms')
-rw-r--r--caverealms/README.md14
-rw-r--r--caverealms/config.lua45
-rw-r--r--caverealms/crafting.lua43
-rw-r--r--caverealms/depends.txt1
-rw-r--r--caverealms/falling_ice.lua210
-rw-r--r--caverealms/functions.lua378
-rw-r--r--caverealms/init.lua297
-rw-r--r--caverealms/nodes.lua325
-rw-r--r--caverealms/textures/Thumbs.dbbin0 -> 18944 bytes
-rw-r--r--caverealms/textures/caverealms_algae.pngbin0 -> 971 bytes
-rw-r--r--caverealms/textures/caverealms_algae_side.pngbin0 -> 528 bytes
-rw-r--r--caverealms/textures/caverealms_fungi.pngbin0 -> 249 bytes
-rw-r--r--caverealms/textures/caverealms_glow_crystal.pngbin0 -> 735 bytes
-rw-r--r--caverealms/textures/caverealms_glow_emerald.pngbin0 -> 714 bytes
-rw-r--r--caverealms/textures/caverealms_glow_emerald_ore.pngbin0 -> 686 bytes
-rw-r--r--caverealms/textures/caverealms_glow_gem.pngbin0 -> 436 bytes
-rw-r--r--caverealms/textures/caverealms_glow_mese.pngbin0 -> 756 bytes
-rw-r--r--caverealms/textures/caverealms_glow_ore.pngbin0 -> 664 bytes
-rw-r--r--caverealms/textures/caverealms_glow_worm.pngbin0 -> 318 bytes
-rw-r--r--caverealms/textures/caverealms_icicle_down.pngbin0 -> 260 bytes
-rw-r--r--caverealms/textures/caverealms_icicle_up.pngbin0 -> 249 bytes
-rw-r--r--caverealms/textures/caverealms_lichen.pngbin0 -> 925 bytes
-rw-r--r--caverealms/textures/caverealms_lichen_side.pngbin0 -> 533 bytes
-rw-r--r--caverealms/textures/caverealms_moss.pngbin0 -> 947 bytes
-rw-r--r--caverealms/textures/caverealms_moss_side.pngbin0 -> 519 bytes
-rw-r--r--caverealms/textures/caverealms_mushroom_cap.pngbin0 -> 307 bytes
-rw-r--r--caverealms/textures/caverealms_mushroom_cap_legacy.pngbin0 -> 317 bytes
-rw-r--r--caverealms/textures/caverealms_mushroom_gills.pngbin0 -> 221 bytes
-rw-r--r--caverealms/textures/caverealms_mushroom_stem.pngbin0 -> 451 bytes
-rw-r--r--caverealms/textures/caverealms_mycena.pngbin0 -> 356 bytes
-rw-r--r--caverealms/textures/caverealms_mycena_powder.pngbin0 -> 290 bytes
-rw-r--r--caverealms/textures/caverealms_thin_ice.pngbin0 -> 870 bytes
32 files changed, 1313 insertions, 0 deletions
diff --git a/caverealms/README.md b/caverealms/README.md
new file mode 100644
index 0000000..87edf5f
--- /dev/null
+++ b/caverealms/README.md
@@ -0,0 +1,14 @@
+minetest-caverealms
+===================
+
+A mod for Minetest to add underground realms
+
+For more information, view the official forum topic at:
+https://forum.minetest.net/viewtopic.php?f=9&t=9522
+
+Contributors:
+HeroOfTheWinds - everything
+|
+Zeno- - additional ideas and fine tuning
+
+Licensed under the WTFPL
diff --git a/caverealms/config.lua b/caverealms/config.lua
new file mode 100644
index 0000000..15b23d0
--- /dev/null
+++ b/caverealms/config.lua
@@ -0,0 +1,45 @@
+
+local CONFIG_FILE_PREFIX = "caverealms."
+
+caverealms.config = {}
+
+-- This function based on kaeza/minetest-irc/config.lua and used under the
+-- terms of BSD 2-clause license.
+local function setting(stype, name, default)
+ local value
+ if stype == "bool" then
+ value = minetest.setting_getbool(CONFIG_FILE_PREFIX..name)
+ elseif stype == "string" then
+ value = minetest.setting_get(CONFIG_FILE_PREFIX..name)
+ elseif stype == "number" then
+ value = tonumber(minetest.setting_get(CONFIG_FILE_PREFIX..name))
+ end
+ if value == nil then
+ value = default
+ end
+ caverealms.config[name] = value
+end
+
+--generation settings
+setting("number", "ymin", -33000) --bottom realm limit
+setting("number", "ymax", -700) --top realm limit
+setting("number", "tcave", 0.5) --cave threshold
+
+--falling icicles
+setting("bool", "falling_icicles", true) --enable/disable falling icicles
+setting("number", "fallcha", 0.33) --chance of icicles falling when dug
+
+--decoration chances
+setting("number", "stagcha", 0.002) --chance of stalagmites
+setting("number", "stalcha", 0.003) --chance of 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
+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
+setting("number", "myccha", 0.03) --chance of mycena mushrooms
+setting("number", "wormcha", 0.02) --chance of glow worms
+setting("number", "giantcha", 0.001) --chance of giant mushrooms
+setting("number", "icicha", 0.035) --chance of icicles
diff --git a/caverealms/crafting.lua b/caverealms/crafting.lua
new file mode 100644
index 0000000..e78da6e
--- /dev/null
+++ b/caverealms/crafting.lua
@@ -0,0 +1,43 @@
+--CaveRealms crafting.lua
+
+--CRAFT ITEMS--
+
+--mycena powder
+minetest.register_craftitem("caverealms:mycena_powder", {
+ description = "Mycena Powder",
+ inventory_image = "caverealms_mycena_powder.png",
+})
+
+--CRAFT RECIPES--
+
+--mycena powder
+minetest.register_craft({
+ output = "caverealms:mycena_powder",
+ type = "shapeless",
+ recipe = {"caverealms:mycena"}
+})
+
+
+--glow mese block
+minetest.register_craft({
+ output = "caverealms:glow_mese",
+ recipe = {
+ {"default:mese_crystal_fragment","default:mese_crystal_fragment","default:mese_crystal_fragment"},
+ {"default:mese_crystal_fragment","caverealms:mycena_powder","default:mese_crystal_fragment"},
+ {"default:mese_crystal_fragment","default:mese_crystal_fragment","default:mese_crystal_fragment"}
+ }
+})
+
+--reverse craft for glow mese
+minetest.register_craft({
+ output = "default:mese_crystal_fragment 8",
+ type = "shapeless",
+ recipe = {"caverealms:glow_mese"}
+})
+
+--thin ice to water
+minetest.register_craft({
+ output = "default:water_source",
+ type = "shapeless",
+ recipe = {"caverealms:thin_ice"}
+}) \ No newline at end of file
diff --git a/caverealms/depends.txt b/caverealms/depends.txt
new file mode 100644
index 0000000..331d858
--- /dev/null
+++ b/caverealms/depends.txt
@@ -0,0 +1 @@
+default \ No newline at end of file
diff --git a/caverealms/falling_ice.lua b/caverealms/falling_ice.lua
new file mode 100644
index 0000000..4e04b5f
--- /dev/null
+++ b/caverealms/falling_ice.lua
@@ -0,0 +1,210 @@
+-- CaveRealms: falling icicles
+-- borrowed from base MineTest game's falling.lua
+
+--
+-- Falling ice
+--
+
+minetest.register_entity("caverealms:falling_ice", {
+ initial_properties = {
+ physical = true,
+ collide_with_objects = false,
+ collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
+ visual = "wielditem",
+ textures = {},
+ visual_size = {x=0.667, y=0.667},
+ },
+
+ node = {},
+
+ set_node = function(self, node)
+ self.node = node
+ local stack = ItemStack(node.name)
+ local itemtable = stack:to_table()
+ local itemname = nil
+ if itemtable then
+ itemname = stack:to_table().name
+ end
+ local item_texture = nil
+ local item_type = ""
+ if minetest.registered_items[itemname] then
+ item_texture = minetest.registered_items[itemname].inventory_image
+ item_type = minetest.registered_items[itemname].type
+ end
+ prop = {
+ is_visible = true,
+ textures = {node.name},
+ }
+ self.object:set_properties(prop)
+ end,
+
+ get_staticdata = function(self)
+ return self.node.name
+ end,
+
+ on_activate = function(self, staticdata)
+ self.object:set_armor_groups({immortal=1})
+ --self.object:setacceleration({x=0, y=-10, z=0})
+ self:set_node({name=staticdata})
+ end,
+
+ on_step = function(self, dtime)
+ -- Set gravity
+ self.object:setacceleration({x=0, y=-10, z=0})
+ -- Destroy when collides to ground or just move
+ local pos = self.object:getpos()
+ local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
+ local bcn = minetest.get_node(bcp)
+ local bcd = minetest.registered_nodes[bcn.name]
+ --check for players next to this and hurt them >:D
+ local all_objects = minetest.get_objects_inside_radius(pos, 1)
+ local _,obj
+ for _,obj in ipairs(all_objects) do
+ if obj:is_player() then
+ obj:set_hp(obj:get_hp() - 8)
+ end
+ end
+ -- Note: walkable is in the node definition, not in item groups
+ if not bcd or
+ (bcd.walkable or
+ (minetest.get_item_group(self.node.name, "float") ~= 0 and
+ bcd.liquidtype ~= "none")) then
+ if bcd and bcd.leveled and
+ bcn.name == self.node.name then
+ local addlevel = self.node.level
+ if addlevel == nil or addlevel <= 0 then
+ addlevel = bcd.leveled
+ end
+ if minetest.add_node_level(bcp, addlevel) == 0 then
+ self.object:remove()
+ return
+ end
+ elseif bcd and bcd.buildable_to and
+ (minetest.get_item_group(self.node.name, "float") == 0 or
+ bcd.liquidtype == "none") then
+ minetest.remove_node(bcp)
+ return
+ end
+ local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
+ -- Check what's here
+ local n2 = minetest.get_node(np)
+ -- remove node and replace it with it's drops
+ local drops = minetest.get_node_drops(n2.name, "")
+ minetest.remove_node(np)
+ local _, dropped_item
+ for _, dropped_item in ipairs(drops) do
+ minetest.add_item(np, dropped_item)
+ end
+ -- Run script hook
+ local _, callback
+ for _, callback in ipairs(minetest.registered_on_dignodes) do
+ callback(np, n2, nil)
+ end
+ -- remove entity
+ --minetest.add_node(np, self.node)
+ self.object:remove()
+ caverealms:nodeupdate(np)
+ else
+ -- Do nothing
+ end
+ end
+})
+
+function caverealms:spawn_falling_node(p, node)
+ obj = minetest.add_entity(p, "caverealms:falling_ice")
+ obj:get_luaentity():set_node(node)
+end
+
+function caverealms:drop_attached_node(p)
+ local nn = minetest.get_node(p).name
+ minetest.remove_node(p)
+ for _,item in ipairs(minetest.get_node_drops(nn, "")) do
+ local pos = {
+ x = p.x + math.random()/2 - 0.25,
+ y = p.y + math.random()/2 - 0.25,
+ z = p.z + math.random()/2 - 0.25,
+ }
+ minetest.add_item(pos, item)
+ end
+end
+
+function caverealms:check_attached_node(p, n)
+ local def = minetest.registered_nodes[n.name]
+ local d = {x=0, y=0, z=0}
+ if def.paramtype2 == "wallmounted" then
+ if n.param2 == 0 then
+ d.y = 1
+ elseif n.param2 == 1 then
+ d.y = -1
+ elseif n.param2 == 2 then
+ d.x = 1
+ elseif n.param2 == 3 then
+ d.x = -1
+ elseif n.param2 == 4 then
+ d.z = 1
+ elseif n.param2 == 5 then
+ d.z = -1
+ end
+ else
+ d.y = -1
+ end
+ local p2 = {x=p.x+d.x, y=p.y+d.y, z=p.z+d.z}
+ local nn = minetest.get_node(p2).name
+ local def2 = minetest.registered_nodes[nn]
+ if def2 and not def2.walkable then
+ return false
+ end
+ return true
+end
+
+--
+-- Some common functions
+--
+
+function caverealms:nodeupdate_single(p, delay)
+ n = minetest.get_node(p)
+ if minetest.get_item_group(n.name, "falling_node") ~= 0 then
+ p_bottom = {x=p.x, y=p.y-1, z=p.z}
+ n_bottom = minetest.get_node(p_bottom)
+ -- Note: walkable is in the node definition, not in item groups
+ if minetest.registered_nodes[n_bottom.name] and
+ (minetest.get_item_group(n.name, "float") == 0 or
+ minetest.registered_nodes[n_bottom.name].liquidtype == "none") and
+ (n.name ~= n_bottom.name or (minetest.registered_nodes[n_bottom.name].leveled and
+ minetest.get_node_level(p_bottom) < minetest.get_node_max_level(p_bottom))) and
+ (not minetest.registered_nodes[n_bottom.name].walkable or
+ minetest.registered_nodes[n_bottom.name].buildable_to) then
+ if delay then
+ minetest.after(0.1, caverealms.nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
+ else
+ n.level = minetest.env:get_node_level(p)
+ minetest.remove_node(p)
+ caverealms:spawn_falling_node(p, n)
+ caverealms:nodeupdate(p)
+ end
+ end
+ end
+
+ if minetest.get_item_group(n.name, "attached_node") ~= 0 then
+ if not check_attached_node(p, n) then
+ caverealms:drop_attached_node(p)
+ caverealms:nodeupdate(p)
+ end
+ end
+end
+
+function caverealms:nodeupdate(p, delay)
+ -- Round p to prevent falling entities to get stuck
+ p.x = math.floor(p.x+0.5)
+ p.y = math.floor(p.y+0.5)
+ p.z = math.floor(p.z+0.5)
+
+ for x = -1,1 do
+ for y = -1,1 do
+ for z = -1,1 do
+ caverealms:nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
+ end
+ end
+ end
+end
+
diff --git a/caverealms/functions.lua b/caverealms/functions.lua
new file mode 100644
index 0000000..6c62a93
--- /dev/null
+++ b/caverealms/functions.lua
@@ -0,0 +1,378 @@
+--CaveRealms functions.lua
+
+--FUNCTIONS--
+
+local H_LAG = caverealms.config.h_lag --15 --max height for stalagmites
+local H_LAC = caverealms.config.h_lac --20 --...stalactites
+local H_CRY = caverealms.config.h_cry --9 --max height of glow crystals
+local H_CLAC = caverealms.config.h_clac --13 --max height of glow crystal stalactites
+
+function caverealms:above_solid(x,y,z,area,data)
+ local c_air = minetest.get_content_id("air")
+ local ai = area:index(x,y+1,z-3)
+ if data[ai] == c_air then
+ return false
+ else
+ return true
+ end
+end
+function caverealms:below_solid(x,y,z,area,data)
+ local c_air = minetest.get_content_id("air")
+ local ai = area:index(x,y-1,z-3)
+ if data[ai] == c_air then
+ return false
+ else
+ return true
+ end
+end
+
+--stalagmite spawner
+function caverealms:stalagmite(x,y,z, area, data)
+
+ if not caverealms:below_solid(x,y,z,area,data) then
+ return
+ end
+
+ --contest ids
+ local c_stone = minetest.get_content_id("default:stone")
+
+ local top = math.random(6,H_LAG) --grab a random height for the stalagmite
+ for j = 0, top do --y
+ for k = -3, 3 do
+ for l = -3, 3 do
+ if j == 0 then
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ elseif j <= top/5 then
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ elseif j <= top/5 * 3 then
+ if k*k + l*l <= 1 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ else
+ local vi = area:index(x, y+j, z-3)
+ data[vi] = c_stone
+ end
+ end
+ end
+ end
+end
+
+--stalactite spawner
+function caverealms:stalactite(x,y,z, area, data)
+
+ if not caverealms:above_solid(x,y,z,area,data) then
+ return
+ end
+
+ --contest ids
+ local c_stone = minetest.get_content_id("default:stone")--("caverealms:limestone")
+
+ local bot = math.random(-H_LAC, -6) --grab a random height for the stalagmite
+ for j = bot, 0 do --y
+ for k = -3, 3 do
+ for l = -3, 3 do
+ if j >= -1 then
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ elseif j >= bot/5 then
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ elseif j >= bot/5 * 3 then
+ if k*k + l*l <= 1 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = c_stone
+ end
+ else
+ local vi = area:index(x, y+j, z-3)
+ data[vi] = c_stone
+ end
+ end
+ end
+ end
+end
+
+--glowing crystal stalagmite spawner
+function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
+
+ if not caverealms:below_solid(x,y,z,area,data) then
+ return
+ end
+
+ --contest ids
+ local c_stone = minetest.get_content_id("default:stone")
+ local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
+ local c_crystore = minetest.get_content_id("caverealms:glow_ore")
+ local c_emerald = minetest.get_content_id("caverealms:glow_emerald")
+ local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore")
+ local c_mesecry = minetest.get_content_id("caverealms:glow_mese")
+ local c_meseore = minetest.get_content_id("default:stone_with_mese")
+ local c_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}}
+ }
+
+ local nid_a
+ local nid_b
+ local nid_s = c_stone --stone base, will be rewritten to ice in certain biomes
+
+ if biome > 3 then
+ if mode == 1 then
+ nid_a = c_ice
+ nid_b = c_thinice
+ nid_s = c_ice
+ else
+ nid_a = c_crystore
+ nid_b = c_crystal
+ end
+ elseif mode == 1 then
+ nid_a = stalids[biome][1][1]
+ nid_b = stalids[biome][1][2]
+ else
+ nid_a = stalids[biome][2][1]
+ nid_b = stalids[biome][2][2]
+ end
+
+ local top = math.random(5,H_CRY) --grab a random height for the stalagmite
+ for j = 0, top do --y
+ for k = -3, 3 do
+ for l = -3, 3 do
+ if j == 0 then
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_s
+ end
+ elseif j <= top/5 then
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_a
+ end
+ elseif j <= top/5 * 3 then
+ if k*k + l*l <= 1 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_b
+ end
+ else
+ local vi = area:index(x, y+j, z-3)
+ data[vi] = nid_b
+ end
+ end
+ end
+ end
+end
+
+--crystal stalactite spawner
+function caverealms:crystal_stalactite(x,y,z, area, data, biome)
+
+ if not caverealms:above_solid(x,y,z,area,data) then
+ return
+ end
+
+ --contest ids
+ local c_stone = minetest.get_content_id("default:stone")
+ local c_crystore = minetest.get_content_id("caverealms:glow_ore")
+ local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
+ local c_emerald = minetest.get_content_id("caverealms:glow_emerald")
+ local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore")
+ local c_mesecry = minetest.get_content_id("caverealms:glow_mese")
+ local c_meseore = minetest.get_content_id("default:stone_with_mese")
+ local c_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}}
+ }
+
+ local nid_a
+ local nid_b
+ local nid_s = c_stone --stone base, will be rewritten to ice in certain biomes
+
+ if biome > 3 then
+ if mode == 1 then
+ nid_a = c_ice
+ nid_b = c_thinice
+ nid_s = c_ice
+ else
+ nid_a = c_crystore
+ nid_b = c_crystal
+ end
+ elseif mode == 1 then
+ nid_a = stalids[biome][1][1]
+ nid_b = stalids[biome][1][2]
+ else
+ nid_a = stalids[biome][2][1]
+ nid_b = stalids[biome][2][2]
+ end
+
+ local bot = math.random(-H_CLAC, -6) --grab a random height for the stalagmite
+ for j = bot, 0 do --y
+ for k = -3, 3 do
+ for l = -3, 3 do
+ if j >= -1 then
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_s
+ end
+ elseif j >= bot/5 then
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_a
+ end
+ elseif j >= bot/5 * 3 then
+ if k*k + l*l <= 1 then
+ local vi = area:index(x+k, y+j, z+l-3)
+ data[vi] = nid_b
+ end
+ else
+ local vi = area:index(x, y+j, z-3)
+ data[vi] = nid_b
+ end
+ end
+ end
+ end
+end
+
+--function to create giant 'shrooms
+function caverealms:giant_shroom(x, y, z, area, data)
+
+ if not caverealms:below_solid(x,y,z,area,data) then
+ return
+ end
+
+ --as usual, grab the content ID's
+ local c_stem = minetest.get_content_id("caverealms:mushroom_stem")
+ local c_cap = minetest.get_content_id("caverealms:mushroom_cap")
+ local c_gills = minetest.get_content_id("caverealms:mushroom_gills")
+
+ z = z - 5
+ --cap
+ for k = -5, 5 do
+ for l = -5, 5 do
+ if k*k + l*l <= 25 then
+ local vi = area:index(x+k, y+5, z+l)
+ data[vi] = c_cap
+ end
+ if k*k + l*l <= 16 then
+ local vi = area:index(x+k, y+6, z+l)
+ data[vi] = c_cap
+ vi = area:index(x+k, y+5, z+l)
+ data[vi] = c_gills
+ end
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+7, z+l)
+ data[vi] = c_cap
+ end
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+8, z+l)
+ data[vi] = c_cap
+ end
+ end
+ end
+ --stem
+ for j = 0, 5 do
+ for k = -1,1 do
+ local vi = area:index(x+k, y+j, z)
+ data[vi] = c_stem
+ if k == 0 then
+ local ai = area:index(x, y+j, z+1)
+ data[ai] = c_stem
+ ai = area:index(x, y+j, z-1)
+ data[ai] = c_stem
+ end
+ end
+ end
+end
+
+function caverealms:legacy_giant_shroom(x, y, z, area, data) --leftovers :P
+ --as usual, grab the content ID's
+ local c_stem = minetest.get_content_id("caverealms:mushroom_stem")
+ local c_cap = minetest.get_content_id("caverealms:mushroom_cap")
+
+ z = z - 4
+ --cap
+ for k = -4, 4 do
+ for l = -4, 4 do
+ if k*k + l*l <= 16 then
+ local vi = area:index(x+k, y+5, z+l)
+ data[vi] = c_cap
+ end
+ if k*k + l*l <= 9 then
+ local vi = area:index(x+k, y+4, z+l)
+ data[vi] = c_cap
+ vi = area:index(x+k, y+6, z+l)
+ data[vi] = c_cap
+ end
+ if k*k + l*l <= 4 then
+ local vi = area:index(x+k, y+7, z+l)
+ data[vi] = c_cap
+ end
+ end
+ end
+ --stem
+ for j = 0, 4 do
+ for k = -1,1 do
+ local vi = area:index(x+k, y+j, z)
+ data[vi] = c_stem
+ if k == 0 then
+ local ai = area:index(x, y+j, z+1)
+ data[ai] = c_stem
+ ai = area:index(x, y+j, z-1)
+ data[ai] = c_stem
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/caverealms/init.lua b/caverealms/init.lua
new file mode 100644
index 0000000..c13671b
--- /dev/null
+++ b/caverealms/init.lua
@@ -0,0 +1,297 @@
+-- caverealms v.0.3 by HeroOfTheWinds
+-- original cave code modified from paramat's subterrain
+-- For Minetest 0.4.8 stable
+-- Depends default
+-- License: code WTFPL
+
+
+caverealms = {} --create a container for functions and constants
+
+--grab a shorthand for the filepath of the mod
+local modpath = minetest.get_modpath(minetest.get_current_modname())
+
+--load companion lua files
+dofile(modpath.."/config.lua") --configuration file; holds various constants
+dofile(modpath.."/crafting.lua") --crafting recipes
+dofile(modpath.."/nodes.lua") --node definitions
+dofile(modpath.."/functions.lua") --function definitions
+
+if caverealms.config.falling_icicles == true then
+ dofile(modpath.."/falling_ice.lua") --complicated function for falling icicles
+ print("[caverealms] falling icicles enabled.")
+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.007 --chance of glow crystal formations
+local GEMCHA = caverealms.config.gemcha --0.03 --chance of small glow gems
+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
+
+-- 3D noise for caves
+
+local np_cave = {
+ offset = 0,
+ scale = 1,
+ spread = {x=512, y=256, z=512}, -- squashed 2:1
+ seed = 59033,
+ octaves = 6,
+ persist = 0.63
+}
+
+-- 3D noise for wave
+
+local np_wave = {
+ offset = 0,
+ scale = 1,
+ spread = {x=256, y=256, z=256},
+ seed = -400000000089,
+ octaves = 3,
+ persist = 0.67
+}
+
+-- 2D noise for biome
+
+local np_biome = {
+ offset = 0,
+ scale = 1,
+ spread = {x=250, y=250, z=250},
+ seed = 9130,
+ octaves = 3,
+ persist = 0.5
+}
+
+-- Stuff
+
+subterrain = {}
+
+local yblmin = YMIN + BLEND * 1.5
+local yblmax = YMAX - BLEND * 1.5
+
+-- 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_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_thinice = minetest.get_content_id("caverealms:thin_ice")
+ local c_crystal = minetest.get_content_id("caverealms:glow_crystal")
+ local c_gem1 = minetest.get_content_id("caverealms:glow_gem")
+ local c_gem2 = minetest.get_content_id("caverealms:glow_gem_2")
+ local c_gem3 = minetest.get_content_id("caverealms:glow_gem_3")
+ local c_gem4 = minetest.get_content_id("caverealms:glow_gem_4")
+ local c_gem5 = minetest.get_content_id("caverealms:glow_gem_5")
+ 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_fungus = minetest.get_content_id("caverealms:fungus")
+ local c_mycena = minetest.get_content_id("caverealms:mycena")
+ local c_worm = minetest.get_content_id("caverealms:glow_worm")
+ local c_iciu = minetest.get_content_id("caverealms:icicle_up")
+ local c_icid = minetest.get_content_id("caverealms:icicle_down")
+
+ --mandatory values
+ local sidelen = x1 - x0 + 1 --length of a mapblock
+ local chulens = {x=sidelen, y=sidelen, z=sidelen} --table of chunk edges
+ local minposxyz = {x=x0, y=y0, z=z0} --bottom corner
+ local minposxz = {x=x0, y=z0} --2D bottom corner
+
+ local nvals_cave = minetest.get_perlin_map(np_cave, chulens):get3dMap_flat(minposxyz) --cave noise for structure
+ local nvals_wave = minetest.get_perlin_map(np_wave, chulens):get3dMap_flat(minposxyz) --wavy structure of cavern ceilings and floors
+ local nvals_biome = minetest.get_perlin_map(np_biome, chulens):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
+ --structure loop
+ for y = y0, y1 do -- for each x row progressing upwards
+ local tcave --declare variable
+ --determine the overal cave threshold
+ if y < yblmin then
+ tcave = TCAVE + ((yblmin - y) / BLEND) ^ 2
+ elseif y > yblmax then
+ tcave = TCAVE + ((y - yblmax) / BLEND) ^ 2
+ else
+ tcave = TCAVE
+ end
+ local vi = area:index(x0, y, z) --current node index
+ for x = x0, x1 do -- for each node do
+ if (nvals_cave[nixyz] + nvals_wave[nixyz])/2 > tcave then --if node falls within cave threshold
+ data[vi] = c_air --hollow it out to make the cave
+ end
+ --increment indices
+ nixyz = nixyz + 1
+ vi = vi + 1
+ end
+ end
+
+ --decoration loop
+ for y = y0, y1 do -- for each x row progressing upwards
+ local tcave --same as above
+ if y < yblmin then
+ tcave = TCAVE + ((yblmin - y) / BLEND) ^ 2
+ elseif y > yblmax then
+ tcave = TCAVE + ((y - yblmax) / BLEND) ^ 2
+ else
+ tcave = TCAVE
+ end
+ local vi = area:index(x0, y, z)
+ for x = x0, x1 do -- for each node do
+
+ --determine biome
+ local biome = false --preliminary declaration
+ n_biome = nvals_biome[nixz] --make an easier reference to the noise
+ --compare noise values to determine a biome
+ if n_biome >= 0 and n_biome < 0.5 then
+ biome = 1 --moss
+ elseif n_biome <= -0.5 then
+ biome = 2 --fungal
+ elseif n_biome >= 0.5 then
+ if n_biome >= 0.7 then
+ biome = 5 --deep glaciated
+ else
+ biome = 4 --glaciated
+ end
+ else
+ biome = 3 --algae
+ end
+
+ if math.floor(((nvals_cave[nixyz2] + nvals_wave[nixyz2])/2)*100) == math.floor(tcave*100) then
+ --ceiling
+ local ai = area:index(x,y+1,z) --above index
+ if data[ai] == c_stone and data[vi] == c_air then --ceiling
+ if math.random() < ICICHA and (biome == 4 or biome == 5) then
+ data[vi] = c_icid
+ end
+ if math.random() < WORMCHA then
+ data[vi] = c_worm
+ local bi = area:index(x,y-1,z)
+ data[bi] = c_worm
+ if math.random(2) == 1 then
+ local bbi = area:index(x,y-2,z)
+ data[bbi] = c_worm
+ if math.random(2) ==1 then
+ local bbbi = area:index(x,y-3,z)
+ data[bbbi] = c_worm
+ end
+ end
+ end
+ if math.random() < STALCHA then
+ caverealms:stalactite(x,y,z, area, data)
+ end
+ if math.random() < CRYSTAL then
+ caverealms:crystal_stalactite(x,y,z, area, data, biome)
+ end
+ end
+ --ground
+ local bi = area:index(x,y-1,z) --below index
+ if data[bi] == c_stone and data[vi] == c_air then --ground
+ local ai = area:index(x,y+1,z)
+ --place floor material, add plants/decorations
+ if biome == 1 then
+ data[vi] = c_moss
+ if math.random() < GEMCHA then
+ -- gems of random size
+ local gems = { c_gem1, c_gem2, c_gem3, c_gem4, c_gem5 }
+ local gidx = math.random(1, 12)
+ if gidx > 5 then
+ gidx = 1
+ end
+ data[ai] = gems[gidx]
+ end
+ elseif biome == 2 then
+ data[vi] = c_lichen
+ if math.random() < MUSHCHA then --mushrooms
+ data[ai] = c_fungus
+ end
+ if math.random() < MYCCHA then --mycena mushrooms
+ data[ai] = c_mycena
+ end
+ if math.random() < GIANTCHA then --giant mushrooms
+ caverealms:giant_shroom(x, y, z, area, data)
+ end
+ elseif biome == 3 then
+ data[vi] = c_algae
+ elseif biome == 4 then
+ data[vi] = c_thinice
+ local bi = area:index(x,y-1,z)
+ data[bi] = c_thinice
+ if math.random() < ICICHA then --if glaciated, place icicles
+ data[ai] = c_iciu
+ end
+ elseif biome == 5 then
+ data[vi] = c_ice
+ local bi = area:index(x,y-1,z)
+ data[bi] = c_ice
+ if math.random() < ICICHA then --if glaciated, place icicles
+ data[ai] = c_iciu
+ end
+ end
+
+ if math.random() < STAGCHA then
+ caverealms:stalagmite(x,y,z, area, data)
+ end
+ if math.random() < CRYSTAL then
+ caverealms:crystal_stalagmite(x,y,z, area, data, biome)
+ 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!")
diff --git a/caverealms/nodes.lua b/caverealms/nodes.lua
new file mode 100644
index 0000000..7588234
--- /dev/null
+++ b/caverealms/nodes.lua
@@ -0,0 +1,325 @@
+-- CaveRealms nodes.lua
+
+--NODES--
+
+local FALLING_ICICLES = caverealms.config.falling_icicles --true --toggle to turn on or off falling icicles in glaciated biome
+local FALLCHA = caverealms.config.fallcha --0.33 --chance of causing the structure to fall
+
+
+--glowing crystal
+minetest.register_node("caverealms:glow_crystal", {
+ description = "Glow Crystal",
+ tiles = {"caverealms_glow_crystal.png"},
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 13,
+ paramtype = "light",
+ use_texture_alpha = true,
+ drawtype = "glasslike",
+ sunlight_propagates = true,
+})
+
+--glowing emerald
+minetest.register_node("caverealms:glow_emerald", {
+ description = "Glow Emerald",
+ tiles = {"caverealms_glow_emerald.png"},
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 13,
+ paramtype = "light",
+ use_texture_alpha = true,
+ drawtype = "glasslike",
+ sunlight_propagates = true,
+})
+
+--glowing mese crystal blocks
+minetest.register_node("caverealms:glow_mese", {
+ description = "Mese Crystal Block",
+ tiles = {"caverealms_glow_mese.png"},
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 13,
+ paramtype = "light",
+ use_texture_alpha = true,
+ drawtype = "glasslike",
+ sunlight_propagates = true,
+})
+
+--embedded crystal
+minetest.register_node("caverealms:glow_ore", {
+ description = "Glow Crystal Ore",
+ tiles = {"caverealms_glow_ore.png"},
+ is_ground_content = true,
+ groups = {cracky=2},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 10,
+ paramtype = "light",
+})
+
+--embedded emerald
+minetest.register_node("caverealms:glow_emerald_ore", {
+ description = "Glow Emerald Ore",
+ tiles = {"caverealms_glow_emerald_ore.png"},
+ is_ground_content = true,
+ groups = {cracky=2},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 10,
+ paramtype = "light",
+})
+
+--thin (transparent) ice
+minetest.register_node("caverealms:thin_ice", {
+ description = "Thin Ice",
+ tiles = {"caverealms_thin_ice.png"},
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_glass_defaults(),
+ use_texture_alpha = true,
+ drawtype = "glasslike",
+ sunlight_propagates = true,
+ freezemelt = "default:water_source",
+ paramtype = "light",
+})
+
+--alternate version for stalactites
+minetest.register_node("caverealms:hanging_thin_ice", {
+ description = "Thin Ice",
+ tiles = {"caverealms_thin_ice.png"},
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_glass_defaults(),
+ use_texture_alpha = true,
+ drawtype = "glasslike",
+ sunlight_propagates = true,
+ drop = "caverealms:thin_ice",
+ freezemelt = "default:water_flowing",
+ paramtype = "light",
+ after_dig_node = function(pos, oldnode, oldmetadata, digger)
+ if FALLING_ICICLES then
+ if math.random() <= FALLCHA then
+ obj = minetest.add_entity(pos, "caverealms:falling_ice")
+ obj:get_luaentity():set_node(oldnode)
+ for y = -13, 13 do
+ for x = -3, 3 do
+ for z = -3, 3 do
+ local npos = {x=pos.x+x, y=pos.y+y, z=pos.z+z}
+ if minetest.get_node(npos).name == "caverealms:hanging_thin_ice" then
+ nobj = minetest.add_entity(npos, "caverealms:falling_ice")
+ nobj:get_luaentity():set_node(oldnode)
+ minetest.remove_node(npos)
+ end
+ end
+ end
+ end
+ minetest.remove_node(pos)
+ else
+ return 1
+ end
+ else
+ return 1
+ end
+ end,
+})
+
+--glowing crystal gem
+local glow_gem_size = { 1.0, 1.2, 1.4, 1.6, 1.7 }
+
+for i in ipairs(glow_gem_size) do
+ if i == 1 then
+ nodename = "caverealms:glow_gem"
+ else
+ nodename = "caverealms:glow_gem_"..i
+ end
+
+ vs = glow_gem_size[i]
+
+ minetest.register_node(nodename, {
+ description = "Glow Gem",
+ tiles = {"caverealms_glow_gem.png"},
+ inventory_image = "caverealms_glow_gem.png",
+ wield_image = "caverealms_glow_gem.png",
+ is_ground_content = true,
+ groups = {cracky=3, oddly_breakable_by_hand=1},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 11,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = vs,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5*vs, -0.5*vs, -0.5*vs, 0.5*vs, -5/16*vs, 0.5*vs},
+ }
+ })
+end
+
+--upward pointing icicle
+minetest.register_node("caverealms:icicle_up", {
+ description = "Icicle",
+ tiles = {"caverealms_icicle_up.png"},
+ inventory_image = "caverealms_icicle_up.png",
+ wield_image = "caverealms_icicle_up.png",
+ is_ground_content = true,
+ groups = {cracky=3, oddly_breakable_by_hand=1},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 8,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = 1.0,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
+ },
+})
+
+--downward pointing icicle
+minetest.register_node("caverealms:icicle_down", {
+ description = "Icicle",
+ tiles = {"caverealms_icicle_down.png"},
+ inventory_image = "caverealms_icicle_down.png",
+ wield_image = "caverealms_icicle_down.png",
+ is_ground_content = true,
+ groups = {cracky=3, oddly_breakable_by_hand=1},
+ sounds = default.node_sound_glass_defaults(),
+ light_source = 8,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = 1.0,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
+ },
+})
+
+--cave mossy cobble - bluish?
+minetest.register_node("caverealms:stone_with_moss", {
+ description = "Cave Stone with Moss",
+ tiles = {"default_cobble.png^caverealms_moss.png", "default_cobble.png", "default_cobble.png^caverealms_moss_side.png"},
+ is_ground_content = true,
+ groups = {crumbly=3},
+ drop = 'default:cobble',
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_grass_footstep", gain=0.25},
+ }),
+})
+
+--cave lichen-covered cobble - purple-ish
+minetest.register_node("caverealms:stone_with_lichen", {
+ description = "Cave Stone with Lichen",
+ tiles = {"default_cobble.png^caverealms_lichen.png", "default_cobble.png", "default_cobble.png^caverealms_lichen_side.png"},
+ is_ground_content = true,
+ groups = {crumbly=3},
+ drop = 'default:cobble',
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_grass_footstep", gain=0.25},
+ }),
+})
+
+--cave algae-covered cobble - yellow-ish
+minetest.register_node("caverealms:stone_with_algae", {
+ description = "Cave Stone with Algae",
+ tiles = {"default_cobble.png^caverealms_algae.png", "default_cobble.png", "default_cobble.png^caverealms_algae_side.png"},
+ is_ground_content = true,
+ groups = {crumbly=3},
+ drop = 'default:cobble',
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_grass_footstep", gain=0.25},
+ }),
+})
+
+--glow worms
+minetest.register_node("caverealms:glow_worm", {
+ description = "Glow Worms",
+ tiles = {"caverealms_glow_worm.png"},
+ inventory_image = "caverealms_glow_worm.png",
+ wield_image = "caverealms_glow_worm.png",
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=3},
+ light_source = 9,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = 1.0,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.5, 0.5},
+ },
+})
+
+--cave plants go here
+
+--glowing fungi
+minetest.register_node("caverealms:fungus", {
+ description = "Glowing Fungus",
+ tiles = {"caverealms_fungi.png"},
+ inventory_image = "caverealms_fungi.png",
+ wield_image = "caverealms_fungi.png",
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=3},
+ light_source = 5,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = 1.0,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
+ },
+})
+
+--mycena mushroom
+minetest.register_node("caverealms:mycena", {
+ description = "Mycena Mushroom",
+ tiles = {"caverealms_mycena.png"},
+ inventory_image = "caverealms_mycena.png",
+ wield_image = "caverealms_mycena.png",
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=3},
+ light_source = 6,
+ paramtype = "light",
+ drawtype = "plantlike",
+ walkable = false,
+ buildable_to = true,
+ visual_scale = 1.0,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
+ },
+})
+
+--giant mushroom
+--stem
+minetest.register_node("caverealms:mushroom_stem", {
+ description = "Giant Mushroom Stem",
+ tiles = {"caverealms_mushroom_stem.png"},
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=1},
+})
+
+--cap
+minetest.register_node("caverealms:mushroom_cap", {
+ description = "Giant Mushroom Cap",
+ tiles = {"caverealms_mushroom_cap.png"},
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=1},
+})
+
+--gills
+minetest.register_node("caverealms:mushroom_gills", {
+ description = "Giant Mushroom Gills",
+ tiles = {"caverealms_mushroom_gills.png"},
+ is_ground_content = true,
+ groups = {oddly_breakable_by_hand=1},
+ drawtype = "plantlike",
+ paramtype = "light",
+})
diff --git a/caverealms/textures/Thumbs.db b/caverealms/textures/Thumbs.db
new file mode 100644
index 0000000..277f856
--- /dev/null
+++ b/caverealms/textures/Thumbs.db
Binary files differ
diff --git a/caverealms/textures/caverealms_algae.png b/caverealms/textures/caverealms_algae.png
new file mode 100644
index 0000000..da130aa
--- /dev/null
+++ b/caverealms/textures/caverealms_algae.png
Binary files differ
diff --git a/caverealms/textures/caverealms_algae_side.png b/caverealms/textures/caverealms_algae_side.png
new file mode 100644
index 0000000..c857c65
--- /dev/null
+++ b/caverealms/textures/caverealms_algae_side.png
Binary files differ
diff --git a/caverealms/textures/caverealms_fungi.png b/caverealms/textures/caverealms_fungi.png
new file mode 100644
index 0000000..2785308
--- /dev/null
+++ b/caverealms/textures/caverealms_fungi.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_crystal.png b/caverealms/textures/caverealms_glow_crystal.png
new file mode 100644
index 0000000..63ebb5c
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_crystal.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_emerald.png b/caverealms/textures/caverealms_glow_emerald.png
new file mode 100644
index 0000000..6d5c157
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_emerald.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_emerald_ore.png b/caverealms/textures/caverealms_glow_emerald_ore.png
new file mode 100644
index 0000000..0e008a7
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_emerald_ore.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_gem.png b/caverealms/textures/caverealms_glow_gem.png
new file mode 100644
index 0000000..a18de24
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_gem.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_mese.png b/caverealms/textures/caverealms_glow_mese.png
new file mode 100644
index 0000000..f48fbe0
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_mese.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_ore.png b/caverealms/textures/caverealms_glow_ore.png
new file mode 100644
index 0000000..4ce9165
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_ore.png
Binary files differ
diff --git a/caverealms/textures/caverealms_glow_worm.png b/caverealms/textures/caverealms_glow_worm.png
new file mode 100644
index 0000000..37d8966
--- /dev/null
+++ b/caverealms/textures/caverealms_glow_worm.png
Binary files differ
diff --git a/caverealms/textures/caverealms_icicle_down.png b/caverealms/textures/caverealms_icicle_down.png
new file mode 100644
index 0000000..2663c7a
--- /dev/null
+++ b/caverealms/textures/caverealms_icicle_down.png
Binary files differ
diff --git a/caverealms/textures/caverealms_icicle_up.png b/caverealms/textures/caverealms_icicle_up.png
new file mode 100644
index 0000000..ff9ee25
--- /dev/null
+++ b/caverealms/textures/caverealms_icicle_up.png
Binary files differ
diff --git a/caverealms/textures/caverealms_lichen.png b/caverealms/textures/caverealms_lichen.png
new file mode 100644
index 0000000..f38fe76
--- /dev/null
+++ b/caverealms/textures/caverealms_lichen.png
Binary files differ
diff --git a/caverealms/textures/caverealms_lichen_side.png b/caverealms/textures/caverealms_lichen_side.png
new file mode 100644
index 0000000..024de44
--- /dev/null
+++ b/caverealms/textures/caverealms_lichen_side.png
Binary files differ
diff --git a/caverealms/textures/caverealms_moss.png b/caverealms/textures/caverealms_moss.png
new file mode 100644
index 0000000..2d8a27b
--- /dev/null
+++ b/caverealms/textures/caverealms_moss.png
Binary files differ
diff --git a/caverealms/textures/caverealms_moss_side.png b/caverealms/textures/caverealms_moss_side.png
new file mode 100644
index 0000000..277bb54
--- /dev/null
+++ b/caverealms/textures/caverealms_moss_side.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mushroom_cap.png b/caverealms/textures/caverealms_mushroom_cap.png
new file mode 100644
index 0000000..0514fff
--- /dev/null
+++ b/caverealms/textures/caverealms_mushroom_cap.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mushroom_cap_legacy.png b/caverealms/textures/caverealms_mushroom_cap_legacy.png
new file mode 100644
index 0000000..7967ee9
--- /dev/null
+++ b/caverealms/textures/caverealms_mushroom_cap_legacy.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mushroom_gills.png b/caverealms/textures/caverealms_mushroom_gills.png
new file mode 100644
index 0000000..92b28a8
--- /dev/null
+++ b/caverealms/textures/caverealms_mushroom_gills.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mushroom_stem.png b/caverealms/textures/caverealms_mushroom_stem.png
new file mode 100644
index 0000000..d4e5601
--- /dev/null
+++ b/caverealms/textures/caverealms_mushroom_stem.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mycena.png b/caverealms/textures/caverealms_mycena.png
new file mode 100644
index 0000000..7ab3ad8
--- /dev/null
+++ b/caverealms/textures/caverealms_mycena.png
Binary files differ
diff --git a/caverealms/textures/caverealms_mycena_powder.png b/caverealms/textures/caverealms_mycena_powder.png
new file mode 100644
index 0000000..22e3537
--- /dev/null
+++ b/caverealms/textures/caverealms_mycena_powder.png
Binary files differ
diff --git a/caverealms/textures/caverealms_thin_ice.png b/caverealms/textures/caverealms_thin_ice.png
new file mode 100644
index 0000000..0d0820f
--- /dev/null
+++ b/caverealms/textures/caverealms_thin_ice.png
Binary files differ