From b0fc53089b78cd5e13f9d92771b1ad6b4a61832e Mon Sep 17 00:00:00 2001
From: Chris N <swordsman9613@gmail.com>
Date: Tue, 16 Dec 2014 19:57:25 -1000
Subject: [PATCH] Version 0.8 - DeepRealms

Add the new DeepRealms, inspired by Zeno's fork, and add the new salt
crystal, obsidian, and coal dust biomes.
---
 config.lua                                |   2 +
 crafting.lua                              |  10 ++
 functions.lua                             |  56 ++++++++
 init.lua                                  |  86 +++++++++++-
 nodes.lua                                 | 155 +++++++++++++++++++++-
 textures/caverealms_coal_dust.png         | Bin 0 -> 668 bytes
 textures/caverealms_glow_amethyst.png     | Bin 0 -> 888 bytes
 textures/caverealms_glow_amethyst_ore.png | Bin 0 -> 686 bytes
 textures/caverealms_glow_obsidian.png     | Bin 0 -> 320 bytes
 textures/caverealms_glow_obsidian2.png    | Bin 0 -> 765 bytes
 textures/caverealms_salt_crystal.png      | Bin 0 -> 719 bytes
 textures/caverealms_salt_gem.png          | Bin 0 -> 497 bytes
 textures/caverealms_salty.png             | Bin 0 -> 939 bytes
 textures/caverealms_salty2.png            | Bin 0 -> 442 bytes
 textures/caverealms_salty_side.png        | Bin 0 -> 517 bytes
 textures/caverealms_spike.png             | Bin 0 -> 492 bytes
 16 files changed, 307 insertions(+), 2 deletions(-)
 create mode 100644 textures/caverealms_coal_dust.png
 create mode 100644 textures/caverealms_glow_amethyst.png
 create mode 100644 textures/caverealms_glow_amethyst_ore.png
 create mode 100644 textures/caverealms_glow_obsidian.png
 create mode 100644 textures/caverealms_glow_obsidian2.png
 create mode 100644 textures/caverealms_salt_crystal.png
 create mode 100644 textures/caverealms_salt_gem.png
 create mode 100644 textures/caverealms_salty.png
 create mode 100644 textures/caverealms_salty2.png
 create mode 100644 textures/caverealms_salty_side.png
 create mode 100644 textures/caverealms_spike.png

diff --git a/config.lua b/config.lua
index e837a21..94f79dd 100644
--- a/config.lua
+++ b/config.lua
@@ -56,6 +56,8 @@ setting("number", "dm_bot", -5000) --lower limit
 --should fortresses and fountains spawn?
 setting("bool", "fortresses", true)
 setting("bool", "fountains", true)
+--Deep cave settings
+setting("number", "deep_cave", -7000) -- upper limit
 
 --minimum number of items in chests found in fortresses
 setting("number", "min_items", 2)
diff --git a/crafting.lua b/crafting.lua
index e78da6e..b995fab 100644
--- a/crafting.lua
+++ b/crafting.lua
@@ -40,4 +40,14 @@ minetest.register_craft({
 	output = "default:water_source",
 	type = "shapeless",
 	recipe = {"caverealms:thin_ice"}
+})
+
+--use for coal dust
+minetest.register_craft({
+	output = "default:coalblock",
+	recipe = {
+		{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"},
+		{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"},
+		{"caverealms:coal_dust","caverealms:coal_dust","caverealms:coal_dust"}
+	}
 })
\ No newline at end of file
diff --git a/functions.lua b/functions.lua
index e40de81..3b3e38f 100644
--- a/functions.lua
+++ b/functions.lua
@@ -119,6 +119,8 @@ function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
 	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")
 
@@ -147,6 +149,9 @@ function caverealms:crystal_stalagmite(x,y,z, area, data, biome)
  		{ {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
@@ -215,6 +220,8 @@ function caverealms:crystal_stalactite(x,y,z, area, data, biome)
 	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")
 
@@ -243,6 +250,9 @@ function caverealms:crystal_stalactite(x,y,z, area, data, biome)
  		{ {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
@@ -294,6 +304,51 @@ function caverealms:crystal_stalactite(x,y,z, area, data, biome)
 	end
 end
 
+--glowing crystal stalagmite spawner
+function caverealms:salt_stalagmite(x,y,z, area, data, biome)
+
+	if not caverealms:below_solid(x,y,z,area,data) then
+		return
+	end
+	
+	--contest ids
+	local c_stone = minetest.get_content_id("default:stone")
+	local c_salt = minetest.get_content_id("caverealms:salt_crystal")
+	
+	local scale = math.random(2, 4)
+	if scale == 2 then
+		for j = -3, 3 do
+			for k = -3, 3 do
+				local vi = area:index(x+j, y, z+k)
+				data[vi] = c_stone
+				if math.abs(j) ~= 3 and math.abs(k) ~= 3 then
+					local vi = area:index(x+j, y+1, z+k)
+					data[vi] = c_stone
+				end
+			end
+		end
+	else
+		for j = -4, 4 do
+			for k = -4, 4 do
+				local vi = area:index(x+j, y, z+k)
+				data[vi] = c_stone
+				if math.abs(j) ~= 4 and math.abs(k) ~= 4 then
+					local vi = area:index(x+j, y+1, z+k)
+					data[vi] = c_stone
+				end
+			end
+		end
+	end
+	for j = 2, scale + 2 do --y
+		for k = -2, scale - 2 do
+			for l = -2, scale - 2 do
+				local vi = area:index(x+k, y+j, z+l)
+				data[vi] = c_salt -- make cube
+			end
+		end
+	end
+end
+
 --function to create giant 'shrooms
 function caverealms:giant_shroom(x, y, z, area, data)
 
@@ -387,6 +442,7 @@ end
 
 -- Experimental and very geometric function to create giant octagonal crystals in a variety of random directions
 -- Uses calculations for points on a sphere, lines in geometric space
+-- CURRENTLY USELESS, NOT LIKELY TO BE IMPLEMENTED SOON
 function caverealms:giant_shroom(x, y, z, area, data)
 	--Grab content id's... diamond is a placeholder
 	local c_crys = minetest.get_content_id("default:diamondblock")
diff --git a/init.lua b/init.lua
index 7852799..e1f3f9c 100644
--- a/init.lua
+++ b/init.lua
@@ -1,4 +1,4 @@
--- caverealms v.0.4 by HeroOfTheWinds
+-- caverealms v.0.8 by HeroOfTheWinds
 -- original cave code modified from paramat's subterrain
 -- For Minetest 0.4.8 stable
 -- Depends default
@@ -47,6 +47,7 @@ local FORTCHA = caverealms.config.fortcha --0.0003 --chance of DM Fortresses
 
 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
 
 -- 3D noise for caves
 
@@ -124,10 +125,26 @@ minetest.register_on_generated(function(minp, maxp, seed)
 	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_saltgem1 = minetest.get_content_id("caverealms:salt_gem")
+	local c_saltgem2 = minetest.get_content_id("caverealms:salt_gem_2")
+	local c_saltgem3 = minetest.get_content_id("caverealms:salt_gem_3")
+	local c_saltgem4 = minetest.get_content_id("caverealms:salt_gem_4")
+	local c_saltgem5 = minetest.get_content_id("caverealms:salt_gem_5")
+	local c_spike1 = minetest.get_content_id("caverealms:spike")
+	local c_spike2 = minetest.get_content_id("caverealms:spike_2")
+	local c_spike3 = minetest.get_content_id("caverealms:spike_3")
+	local c_spike4 = minetest.get_content_id("caverealms:spike_4")
+	local c_spike5 = minetest.get_content_id("caverealms:spike_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_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 = minetest.get_content_id("caverealms:glow_worm")
@@ -176,6 +193,12 @@ minetest.register_on_generated(function(minp, maxp, seed)
 		
 		--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 tcave --same as above
 			if y < yblmin then
 				tcave = TCAVE + ((yblmin - y) / BLEND) ^ 2
@@ -193,8 +216,14 @@ minetest.register_on_generated(function(minp, maxp, seed)
 				--compare noise values to determine a biome
 				if n_biome >= 0 and n_biome < 0.5 then
 					biome = 1 --moss
+					if is_deep then
+						biome = 7 --salt crystal
+					end
 				elseif n_biome <= -0.5 then
 					biome = 2 --fungal
+					if is_deep then
+						biome = 8 --glow obsidian
+					end
 				elseif n_biome >= 0.5 then
 					if n_biome >= 0.7 then
 						biome = 5 --deep glaciated
@@ -203,6 +232,9 @@ minetest.register_on_generated(function(minp, maxp, seed)
 					end
 				else
 					biome = 3 --algae
+					if is_deep then
+						biome = 9 --coal dust
+					end
 				end
 				
 				if y <= DM_TOP and y >= DM_BOT then
@@ -293,6 +325,58 @@ minetest.register_on_generated(function(minp, maxp, seed)
 							if math.random() < FORTCHA and FORTRESSES then --DM FORTRESS
 								data[ai] = c_fortress
 							end
+						elseif biome == 7 then
+							local bi = area:index(x,y-1,z)
+							data[vi] = c_salt
+							data[bi] = c_salt
+							if math.random() < GEMCHA then
+								-- gems of random size
+								local gems = { c_saltgem1, c_saltgem2, c_saltgem3, c_saltgem4, c_saltgem5 }
+								local gidx = math.random(1, 12)
+								if gidx > 5 then
+									gidx = 1
+								end
+								data[ai] = gems[gidx]
+							end
+							if math.random() < STAGCHA then
+								caverealms:salt_stalagmite(x,y,z, area, data)
+							end
+						elseif biome == 8 then
+							local bi = area:index(x,y-1,z)
+							if math.random() < 0.5 then
+								data[vi] = c_gobsidian
+								data[bi] = c_gobsidian
+							else
+								data[vi] = c_gobsidian2
+								data[bi] = c_gobsidian2
+							end
+							if math.random() < FLACHA then --neverending flames
+								data[ai] = c_flame
+							end
+						elseif biome == 9 then
+							local bi = area:index(x,y-1,z)
+							if math.random() < 0.05 then
+								data[vi] = c_coalblock
+								data[bi] = c_coalblock
+							elseif math.random() < 0.15 then
+								data[vi] = c_coaldust
+								data[bi] = c_coaldust
+							else
+								data[vi] = c_desand
+								data[bi] = c_desand
+							end
+							if math.random() < FLACHA * 0.75 then --neverending flames
+								data[ai] = c_flame
+							end
+							if math.random() < GEMCHA then
+								-- spikes of random size
+								local spikes = { c_spike1, c_spike2, c_spike3, c_spike4, c_spike5 }
+								local sidx = math.random(1, 12)
+								if sidx > 5 then
+									sidx = 1
+								end
+								data[ai] = spikes[sidx]
+							end
 						end
 						
 						if math.random() < STAGCHA then
diff --git a/nodes.lua b/nodes.lua
index 952f9a4..e2cac65 100644
--- a/nodes.lua
+++ b/nodes.lua
@@ -62,6 +62,20 @@ minetest.register_node("caverealms:glow_ruby", {
 	sunlight_propagates = true,
 })
 
+--glowing amethyst
+minetest.register_node("caverealms:glow_amethyst", {
+	description = "Glow Amethyst",
+	tiles = {"caverealms_glow_amethyst.png"},
+	is_ground_content = true,
+	groups = {cracky=3},
+	sounds = default.node_sound_glass_defaults(),
+	light_source = 13,
+	paramtype = "light",
+	use_texture_alpha = true,
+	drawtype = "glasslike",
+	sunlight_propagates = true,
+})
+
 --embedded crystal
 minetest.register_node("caverealms:glow_ore", {
 	description = "Glow Crystal Ore",
@@ -84,7 +98,7 @@ minetest.register_node("caverealms:glow_emerald_ore", {
 	paramtype = "light",
 })
 
---embedded rub
+--embedded ruby
 minetest.register_node("caverealms:glow_ruby_ore", {
 	description = "Glow Ruby Ore",
 	tiles = {"caverealms_glow_ruby_ore.png"},
@@ -95,6 +109,17 @@ minetest.register_node("caverealms:glow_ruby_ore", {
 	paramtype = "light",
 })
 
+--embedded amethyst
+minetest.register_node("caverealms:glow_amethyst_ore", {
+	description = "Glow Amethyst Ore",
+	tiles = {"caverealms_glow_amethyst_ore.png"},
+	is_ground_content = true,
+	groups = {cracky=2},
+	sounds = default.node_sound_glass_defaults(),
+	light_source = 10,
+	paramtype = "light",
+})
+
 --thin (transparent) ice
 minetest.register_node("caverealms:thin_ice", {
 	description = "Thin Ice",
@@ -109,6 +134,20 @@ minetest.register_node("caverealms:thin_ice", {
 	paramtype = "light",
 })
 
+--salt crystal
+minetest.register_node("caverealms:salt_crystal", {
+	description = "Salt Crystal",
+	tiles = {"caverealms_salt_crystal.png"},
+	is_ground_content = true,
+	groups = {cracky=3},
+	sounds = default.node_sound_glass_defaults(),
+	light_source = 11,
+	paramtype = "light",
+	use_texture_alpha = true,
+	drawtype = "glasslike",
+	sunlight_propagates = true,
+})
+
 --alternate version for stalactites
 minetest.register_node("caverealms:hanging_thin_ice", {
 	description = "Thin Ice",
@@ -182,6 +221,72 @@ for i in ipairs(glow_gem_size) do
 	})
 end
 
+--glowing salt gem
+local salt_gem_size = { 1.0, 1.2, 1.4, 1.6, 1.7 }
+
+for i in ipairs(salt_gem_size) do
+	if i == 1 then
+		nodename = "caverealms:salt_gem"
+	else
+		nodename = "caverealms:salt_gem_"..i
+	end
+
+	vs = salt_gem_size[i]
+
+	minetest.register_node(nodename, {
+		description = "Salt Gem",
+		tiles = {"caverealms_salt_gem.png"},
+		inventory_image = "caverealms_salt_gem.png",
+		wield_image = "caverealms_salt_gem.png",
+		is_ground_content = true,
+		groups = {cracky=3, oddly_breakable_by_hand=1},
+		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
+
+--stone spike
+local spike_size = { 1.0, 1.2, 1.4, 1.6, 1.7 }
+
+for i in ipairs(spike_size) do
+	if i == 1 then
+		nodename = "caverealms:spike"
+	else
+		nodename = "caverealms:spike_"..i
+	end
+
+	vs = spike_size[i]
+
+	minetest.register_node(nodename, {
+		description = "Stone Spike",
+		tiles = {"caverealms_spike.png"},
+		inventory_image = "caverealms_spike.png",
+		wield_image = "caverealms_spike.png",
+		is_ground_content = true,
+		groups = {cracky=3, oddly_breakable_by_hand=1},
+		sounds = default.node_sound_stone_defaults(),
+		light_source = 3,
+		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",
@@ -260,6 +365,20 @@ minetest.register_node("caverealms:stone_with_algae", {
 	}),
 })
 
+--tiny-salt-crystal-covered cobble - pink-ish
+minetest.register_node("caverealms:stone_with_salt", {
+	description = "Cave Stone with Salt",
+	tiles = {"caverealms_salty2.png"},--{"caverealms_salty2.png^caverealms_salty.png", "caverealms_salty2.png", "caverealms_salty2.png^caverealms_salty_side.png"},
+	light_source = 9,
+	paramtype = "light",
+	use_texture_alpha = true,
+	drawtype = "glasslike",
+	sunlight_propagates = true,
+	is_ground_content = true,
+	groups = {crumbly=3},
+	sounds = default.node_sound_glass_defaults(),
+})
+
 --Hot Cobble - cobble with lava instead of mortar XD
 minetest.register_node("caverealms:hot_cobble", {
 	description = "Hot Cobble",
@@ -273,6 +392,40 @@ minetest.register_node("caverealms:hot_cobble", {
 	}),
 })
 
+--Glow Obsidian
+minetest.register_node("caverealms:glow_obsidian", {
+	description = "Glowing Obsidian",
+	tiles = {"caverealms_glow_obsidian.png"},
+	is_ground_content = true,
+	groups = {crumbly=1},
+	light_source = 7,
+	sounds = default.node_sound_stone_defaults({
+		footstep = {name="default_stone_footstep", gain=0.25},
+	}),
+})
+
+--Glow Obsidian 2 - has traces of lava
+minetest.register_node("caverealms:glow_obsidian_2", {
+	description = "Hot Glow Obsidian",
+	tiles = {"caverealms_glow_obsidian2.png"},
+	is_ground_content = true,
+	groups = {crumbly=1, hot=1},
+	damage_per_second = 1,
+	light_source = 9,
+	sounds = default.node_sound_stone_defaults({
+		footstep = {name="default_stone_footstep", gain=0.25},
+	}),
+})
+
+--Coal Dust
+minetest.register_node("caverealms:coal_dust", {
+	description = "Coal Dust",
+	tiles = {"caverealms_coal_dust.png"},
+	is_ground_content = true,
+	groups = {crumbly=3, falling_node=1, sand=1},
+	sounds = default.node_sound_sand_defaults(),
+})
+
 --glow worms
 minetest.register_node("caverealms:glow_worm", {
 	description = "Glow Worms",
diff --git a/textures/caverealms_coal_dust.png b/textures/caverealms_coal_dust.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f58502a683e02b2a28a25727349e315d57341bb
GIT binary patch
literal 668
zcmV;N0%QG&P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-vt5C%0Pb<(020006zNkl<ZILlR&&1&l~7(|ct6Cnqi
zKqzj#NXe#sfiCj?FH$ImkcAUhwPNJR@?8}BQf>7!bLJamr_*UR#&Ee@&|0(IZb>OI
zO%o|4oO4JiDT)GP48t&BtzGw&F$U)x)>@>Lc<<S4HspDZQVMG=-g{z<48uT-5h*3p
zG*Ol%s_Qzm))YlS2mxy?MNu%0BTdsFgkZPZk>@!nCGPh-T5A?z1z@cOAkT9`2#n*%
z<#M5_Dz@7#0A1JNz31iSg%~4E(@>Tr+39qeg%B8HSk}UsWf^_nGffi!Wm)2!BgTkQ
z3hzBaYfX%CWlJfMQsR2O^7;7*z&MTo{QUf2jKNyVIF8hHjamW}LXc8o7zWz5MF_#+
za9G_eXBJmgRsEkrN@-2D>pB4Hx+bOc=b{h-U>)Hw42Xq$nkM?b$2mt`*8nJ`5JI4}
zX0zD<5JKSl`<vVChPC$B0f2LkudgqT$0GnzO6GY+YfVat7$eR(nx?@RLseBMrBES+
zHMIBl_Z20C0DuqzAq3a!m9}kpeSO7Ri`JU^{Z97u^fZ@c$>DHVRh)AurI1pt^_}OL
z=jUgXQh&nEK0ZEXAq0=dgTC*PQc{*BLWs5V%ioYv@_0P(-qZIzx7!V+lmb9&&3?aM
zQ`TCOWf@v)LI`U^`@Ua=-rnARtGsj|gg}gu5CXg1Zsi<?f%EyyJkOM6$?<q3rGyaT
z_kolW0O#|Wq9|4;ZQBw;plw_B`~8Y$jKO=4F@}FAQDn0xT5CZ70000<MNUMnLSTXw
C%P7+T

literal 0
HcmV?d00001

diff --git a/textures/caverealms_glow_amethyst.png b/textures/caverealms_glow_amethyst.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a5898d8437b1c309c955f4cd885252fce827b9f
GIT binary patch
literal 888
zcmV-;1Bd*HP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6}{G%MaC0J8u903B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00P`eL_t(I%Vm>KZxcrt
z#-G{Qf6jWztYZvqYQQEUag-8@l)8~<EA6p8kOK#9x$uR0=_ly965>owNC=Q3Bq}Ae
zC`)R^aoxo`%Ve_SosHc?vsMJ}Wu(#jj(*ScK0_X~9zDf*eO>z&2VxIWi}DJd<pTg}
zPNUgve_uc7zw;NXH_RvRf7|sepOatjJ^Ay+aHl7=fM@wAPXK899UO?g*<(@*1|Vow
zZ?eno7r}1)Y?oH3w`Eg@+0;=0U{eR(M%Z)=_v0tS0H6TiY+8^hrugy8pWDXW`n?bU
zZ&g=V+4y3((>oA*44;%|`S2{Co5V_7I>%qf&lBTcb(}2EuZPjeKJUvzc$Sa0-$9xu
z!4Fq|Vp5BlthV0)09>ms@xRhHiA(1=`DOF>5dbi^7VI27-YIn#lcFUH0h5>s0A3PY
z^vEO@Gv1%PjR#qezmA_L%k%5uo6$=E!1yeSOkzf9KH_V^2J<W*-A35FNK#BSr_1d2
zR#r&JLXhj#TUf7mS0nK@(vuvX<zsze6Vb`ODkeqi`1J6wRb63!B(IcB9Y`%;wEYf>
zspclJl9D7`ydRdvUChP2U28=r`+P0fV5Jm#-Cx=UfC(llD<tOa1!59=Mp8Crh2%n~
z+@=nA9xIzVOlqNwZX;~A{SKrSNb?aNW=F{&>v66|GZLu<!o~Z|(!?}RT2c!R0JQF2
z-C}l~4OL&Ao2SmE1&&T564(vY-7Bldr+-I7)&JP4uCOa}U#UUX3o51;xMqdZI}4lJ
zC6b=x%Cme3ohm)a;ZT><oW@KJ&tsM3F>`5UU=ZVff;$VF+foah4>JHtPjUcIqwx?Q
z#siY(39eO_RzHmYi2x|61#Id701T-G)`E>Pwj2OU^U-Iq^~_7j)^`uXi$4_r=xT6x
zd#L(qE!bc@j}-uA5Q=io<FibS#zQ#NC6(-w->H3b(=psAa4sXsWBdnT^N35bmp)Md
O0000<MNUMnLSTZMUx<AG

literal 0
HcmV?d00001

diff --git a/textures/caverealms_glow_amethyst_ore.png b/textures/caverealms_glow_amethyst_ore.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a68ef8da3c0ea2f00ed6af465c7f611f8251bc3
GIT binary patch
literal 686
zcmV;f0#W^mP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-vt5db&?M<eG&0000TX;fHrLvL+uWo~o;00000Lvm$d
zbY)~9cWHEJAV*0}P-HG;2LJ#9BuPX;R4C7FQcp+}VHE$pb#`Z*k0{g)%(g?+MlN;{
z-1Z{qG3a2~x<Om6;?hziiY1*o<t1_pI@FM-4heP$imsgkcQa3I<We3gWnnRM*%@aV
zo!8-uaf9CRz3=z^{=7$-bcTqC2mmvCp2y6@08qC~Aq0Q`2mn!li37d6<FRs<nLAg;
zLZMLCm#gx1*J>_NnL70~m#E!f!kPA4bI<1Dzpg7Ux9*@7z2)1*NFJMLIjVK7=Fm`u
z1CIz~Z@8&s3K|q<Zf<TC;b71A2>?G~FSg$YKt%ENNdT5*0eFoW0FL9((1oGDUwHt~
zvo--hgo9?)#lQ9O_!9uMF!c$*;JuTxi9+M}znIc7gGR56*0*cm06ciKbNa_kIV*PL
z0ob+;KvmWF`efnItPn!!Tp1JLplDOH)?g!#)V9Y4R|r8wN-1i@%2@!fw(c&Rhtui+
z*!k@S)sU*H5@uFi5e@=~m9q*n%T|AQ+UH3PrWzTfJlJ@D_yG-H8kX5Pjsrl`GywB2
z=4TUyZ{5#*%#jZl0en6&N6B-^es|grq!cy!n#Py*J;iRIQmHihDMs?dM45C(u1PwP
z7Nxd#wh>uM`4N|*1~WIM^~cq=<ybjejO5q$FLu-tuH}K~jX6^{>w6vG;6`_~Wtm1U
zkMwL_lal;pm7)fKzNYcFyAJ`Frm5??<fnnN10hufv99U9MS1P!w&`Du1Xz~!2e2US
UzPF470ssI207*qoM6N<$g3G)vCIA2c

literal 0
HcmV?d00001

diff --git a/textures/caverealms_glow_obsidian.png b/textures/caverealms_glow_obsidian.png
new file mode 100644
index 0000000000000000000000000000000000000000..51c0a33d42d135a2b4b87e6a60daeab60a94d923
GIT binary patch
literal 320
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b
z3=G`DAk4@xYmNj^kiEpy*OmPqj{viz?%D}zp+KRto-U3d8t11@GUPsFAkcch+m*#p
z)<uA8p+(Au7a=l#*kk{Gb-mN&C#$2e!-S7Bvp09`cGdEo<?nY-Fk)j+WLU83gEmte
zSHn5uHZS{kbIz5{V|?IsYtqLfDQ7#w7V5^V=WmrOU4NzJMb;frWxcR}v5^KLb97s+
z0`eGpH*M%W)znkw{J=!RwR+FIygRdwRVB~8qvz{gJH;lM?cD|T<_%_rH_yhMKUnUh
zvU29_+s*F}RzG|8E%oTfE4waMZS{N=@zO>)_08Xz*N$yHw13LIJMY7E>|Z%n0zJmy
M>FVdQ&MBb@0K<-ePyhe`

literal 0
HcmV?d00001

diff --git a/textures/caverealms_glow_obsidian2.png b/textures/caverealms_glow_obsidian2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea69258003a917e4eae6977ff31758c138bd55ee
GIT binary patch
literal 765
zcmV<Z0s{SsP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-vt5Ca+-J^;{}0007<Nkl<ZD9;7KTS!x30KoD8ImfBn
z@;KYf*1mQ&HPf_GYgw!d)k8rM*j=NLsIZ`V3xsZOJp@6$^$<ia(S-=R8AL^Cwk}{+
zG%uOv@serHPp3}T*6*iaR34_|v6@}QyY@u19s_JPCMNLCqw6>YbqvBFY&pruWzscD
zoC)2TJK9s?Irc>Rm*(=^ljF@yoS##D$DZ=c?hIsE`lSc)C!}k3-LIi;9F%+~HYT5Z
znfiS}eyb)pjG7kxTb7mjSyTJXPzu(B>_+NU^0tDJQ$yf7&!GU)AO;aAhRJ;74DCIX
zZzeR3k))%EJPk**1sBY!g%9L_dP?}3<O@)X7#?R$ga(t<T_k&PKv=ux@YgdIB=P|D
z4kNc2Xp=J&A{%{n@4}rCV+AyCl0zN15$oJCsd)SgQW91#wzb%ABD;7Gc~<O~$URB|
zLQuM$kF^wCA)e2)!iM9-LN(@4H~(I;HD5$J$qe$X$zA4Vxxq&U;&1s0Lzv+@oC<~q
z%Apnf5WdQ~i`<W)oMY+`nXq&lwt8k(i%*SaA!5FU!vTGezMI~!6t6_Ri%ms!k^Y_x
zC~xCw3cf!wJ4PEaLxnsa3Rph#8>Tv$g02X2Ygu$w>_Q|;MMYfnN`CAS6{v9yhuAB8
zA9QcIUOBDDU&--3fgNAf=qFt+HhZ2)B~><zO8p?3SH5|joK!Fh;8!X;nnZXXOWK(Y
zUoaCb43`QE<|MR(2W(m7{H0SNcpCHJ5k{9WC&uszbSH@s`oINYKN}AQ)||n+e&A6F
z9=jRVE~-hZsIcf|tK_ZyEOVmxM6gzd-B_J$YN5Wgztht{@>sroCo>zdC>Y)w6ds@r
v;vgUd0f<(y;3kcbu>_Znw~+?O-%RU&@_Plj@B=1;00000NkvXXu0mjf@y||h

literal 0
HcmV?d00001

diff --git a/textures/caverealms_salt_crystal.png b/textures/caverealms_salt_crystal.png
new file mode 100644
index 0000000000000000000000000000000000000000..b460ff3bd2facbfa82719eb17ee0f65b3be8d460
GIT binary patch
literal 719
zcmV;=0x<oFP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6`}10U6DjSc_+03B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00J{fL_t(I%T1F@Zrd;r
zhQAq+W@Op5YB-B5g5LiW1$u_Ax@ofroS;DvTe4)yd~`9cTLN5=ApYl2&R@TN0}$_#
z&4$u-0HBJ5Kze;eyr)bPvR<RR9qH)_-ENVlK_vuqw<GsGrR$LO8k{4)ypa2z>i+(A
zM~pBGXxk!njf8;9$0L#w(lo|;eOx_0Ql^Pg3i;y$U9HH+BY7AQksF{&)0pJ*8EG1%
zs_g8X0g51XP1^76K1NC@0F+X2WgHRj(cKOSf!z1#a!IKwq^`-wBf8yE4hPEN08L{S
z0c~5Hcn{8ze*dPrvgTm`Fm@4`XS8ie;|Mv!JX2IDA>fD+@gBS<zrCTKKEd6cNd#Cd
z46JFWzI;JKpmZH&9L;H&CS<cgHyhH=pJeAyRdU}WAs}@P&Kb$w9lBhSRbjC}stU(q
zVf9rNvR)hdH4|dAFt340UH@z9x|H)7a<;14_TSKWkGActA#$dSBW0SbvARZ@1}B>h
zs9N&VWd6@*dwjW=WPo|L0KJFBf-;WiYK2Nwq06Poyj*T_^ZPr@vo#W<?VOF|I_h~C
za3v+UTqs><eNPjFU<$lP>l#_D$bEkUDu)B*a<NhV+bPbG_Is*_2XGGEZb?s1kTdf6
zv&sK|#|Yk|`R&bmUa!&ZmiX%zQrDEziR$5jJPef6$rN=R>GjoYIY&tejX!=6zki1q
z?dyg>+V3gTM1Fs_@&5QAJwKZbAium&PA8aW{s1mCJuaWPkm~>d002ovPDHLkV1o7+
BJ$wKF

literal 0
HcmV?d00001

diff --git a/textures/caverealms_salt_gem.png b/textures/caverealms_salt_gem.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c2b052b9fd3968306fe208fed9eaf3544f00260
GIT binary patch
literal 497
zcmV<N0S^9&P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6`}4J`CI!Il630e(qD
zK~y-)rINi)<4_QVKl_rP><WbANHl3E(z&IeN=Xe>8l-&zDnvm^l_~|zKEr(iItt_n
z3RAkb1QA7KLt$wh6Z;NDejqFaZT6O<Gw0lIW-Jlmf1drFAnW(#)L+pc)mi|~`dwMc
zV6E9C^ZnHkiopN?6USeNEHfBK(U({N8=a12f5-nmJ=I#qQA8dD%Mq3}&uSZ;j`bJ9
z5pdD%&YOQ89Pko`R6UQ(_vg)xUeEe;2EVnId@8E6T4dMP)Y@%c!Vu*+D952plFzqr
z_$wq20*c2+)^~Rogk_RYCJFZDCY7BXQmti%X^9A_)}pqz8Qt8VT$l3s8H}OUZckQe
z4C5%mJUvZP8x2ex)9CdqbzBru4u_P(A*x=--rAZAi-!l4<B;FoVby9>Jr5a;Fw@`t
z*xx^&BbYd*>UoT#2<5udq9G3gDy<gEbr<epHpsQ?>Pj_lZ%ur1B7ZI~C&_7w<oVl0
n-roZ()Bpy1d$#@2@n7F7Cfd#e*NHaX00000NkvXXu0mjfI@!~f

literal 0
HcmV?d00001

diff --git a/textures/caverealms_salty.png b/textures/caverealms_salty.png
new file mode 100644
index 0000000000000000000000000000000000000000..2372aac167f83ef5dd4aa8de4fd6df687b92efb5
GIT binary patch
literal 939
zcmV;c162HpP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6@|06WS)eboQ}12{=U
zK~y-)Ez-+RoMjXT;NN@B`MwzjD3>X>P+|#F3PCXqHEC)g8g1MdO&Syb0~an#To~iZ
zxN_T#Y2wznGhLyps#P|MR?%W@36yfbv`}CeX1<yCoa3VY4bKxcW@ojXh?)T0GDC?7
zgQ^+w`R(YAwHSNLKyE|?X_lcD0v4Fd72w__=2ptbI9*7R-Nz!hYKHw7y~ey<HoI91
z;bs@G-BYjovZ`AyXZa*Ci2V5+(dU&AZjhzvr^iGy-Kw^wiXByC%-9P7djNJt@Tj>t
zJJ0;@(|UdSVWY87YBb_w06)eESyO%ILX2Zas-ce=$3$U8q<1{a-da`V)<U5tQ{6sM
zy-_6kAq`=?;Qk>*KE4uTEA_a)_aw`P4vDZxWapA3#uzuD`Yop^Dk0?hvkV1y{~D+r
zxc{=vyjrc-U+MtHWDz($6+&DvTaH9O-B$gzDaNe^a4Qm3D()Y72z|}K`%@y92V%6U
z>eQ(aWFrK~6%i<KR05{&sa}7@ef@z*ewVq>8Dp_om1@lLv-_~BmgdbQM?}LSsKy8(
z<^a`}-+_yrs&CA>&lW=%Ishi~s&B8mQ+Jx`t0DYhW~ix7tmJao1JLdcL6%{jC>>&+
zm`T%tmw_kw7>mjAarb_b<XZ{_902&o3_YqC2aq?zp&5Ds$oBv)0O(LnyNLRWK>xZ(
zY;S5hYzu)`h!Q2@3Dt>CGdpspK{E`hqGASmO{DTS(O-+qbKPc-mPP7k^7)5rY5JuA
zOZ!>oFI1~2Ge5OL;kJY@w@|H~tYsM%+#yRb-tSJ5FO~rB1I~|!@b0Gj{6Prc8~`Ji
z&4v-ePE)0FeJM%4JI(x}5`EIEIy#VLL5={d0hk2PND?eH8Z-n<_Aq~TpXgFolHjP(
znCY(9zuGaYbTFUEG5cZ&C^JJ+)sd@2A8ZoYkZM~5dN-csd2=k6qh(d!bASF~F8BHv
z(ZX-4*GkN1D?n%wLAZP8j+fm106?mW9Uv5#Q8vS#JBHlRCDK@BUOO_|t-Ft&GHWZk
z<1hqBi5Yp-Z~{DIVa9`c9it-H0zj(RB}&dQ4?^|qT{G$zLF@kt{{hIayL&WZ|9Joa
N002ovPDHLkV1nz{s5Srq

literal 0
HcmV?d00001

diff --git a/textures/caverealms_salty2.png b/textures/caverealms_salty2.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8e948a21e693a3866b7b1cae840bb6d08cf21e6
GIT binary patch
literal 442
zcmV;r0Y(0aP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6`|IsjKBXLbMp0Y^zh
zK~y-)jgvu60znW(U$?-paKetTU?r^wQ4_rhCY*=G+{6tB;0`lDT(UD`B0VIun<^|@
zN$gE`SI__T>sO6S>-9a~D*!dW*QGeU>|Pr{9uL_LfWMIKKP%(};d44&nT)l~6ep9)
zke`z{@gM*WNNrJ6WsGw}+yFBG^L8%P3s9A~GRDVtG^zxMf&t1H=b{9w;6X@kC3X_R
z6Ob|`NGw<r6L6D#TxWMxGLvMD?DX^?0But+Bq=XN-n|m&g9Gjape3b0O0h(>H*z*@
zzrU2TGo%2n9Skbt#g8sri5yoRkIx@PvCPKS0ZrL;^Y`JfGG3h2L?xI3;X1}e9FJcG
z_y%lM_ULeU5hdD@M*F|fG60JGegW)^xk-q8*>z9i&kjgED^uEOr%&ghHZ2VHKk{Z4
kQa=Ais<v%w6eqxc0h0K1FP6sWIsgCw07*qoM6N<$f`^N(1ONa4

literal 0
HcmV?d00001

diff --git a/textures/caverealms_salty_side.png b/textures/caverealms_salty_side.png
new file mode 100644
index 0000000000000000000000000000000000000000..fdf49de42d755ca8d8dd4bd4f46147bb2d27fc81
GIT binary patch
literal 517
zcmV+g0{Z=lP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-V6@|0V~duT<`z@0g_2X
zK~y-)?ZMA#6F~sL;or>8?j}pJrh%k3XfP-UMU<Wjde8@uJcXby;@wy1!K0TbA_!i*
z1TWTls89<w)uh>&Cf#I{{WCl3#jD^0^!vo9-!DR~srf#ijp1RQQvy!2j6^A_z{(gp
zw#~@0*b;&xfaQ{;T18g0#w(Rjam@Xqpd=;VrKIe-v@MHGz@#Zy76E|PY^Ev3aR?R*
z)G@HFHNx|-jA0@rw}c>^&rw2<HyX6G=Fk{wTJv+g=32RopCmLq4|&gVu=5-x1QF0s
z3Z16-l?qa+7o*wCXxF8c=h)-%%absCgX?l&+q_N^)Gy28_u1LAyVGfX-03`b(p1bB
zi&xF{`hYCURI4S2%O$s!;s`!H$n(WFtsifd%TzBe_S7WH@O{7gBMiS>9gUtS$Ei2N
z@LdGi1Ws-Yhx_$*`z=xQ=#J}NIb5w~+dDg===X~c=jT&(JqVr#kO6z|<G9$3V=(}=
z3!DO9;aCj@8!m9O+nw{*#~|2fg5rOyd%arJ>(#h)=^y?8$YiugQCE7d00000NkvXX
Hu0mjfFW>D9

literal 0
HcmV?d00001

diff --git a/textures/caverealms_spike.png b/textures/caverealms_spike.png
new file mode 100644
index 0000000000000000000000000000000000000000..32acbb5e9229e80bf68646f6109fe326ae95f258
GIT binary patch
literal 492
zcmV<I0Tcd-P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-vt5C$Cs6X7g%0004tNkl<ZILoDyy-Px26vlt=E&8A!
z#UayZ5E~-eBJQ9xln_Kq&=@2wZM6iA^&j*f<j^KfAqBN*(BL3tG~^K8gbL&;m1)I2
z4d%_V53)189G>%>^E}V1M1=p8_8Z`6ZA4b%O%g=HegSyi@JLexgT0+ZllkT)T--bY
zkSkQa#kBrJkTOc&$^ux}$|&tO{q@@;VZWq|60uX$?y0Y0tPR%#r$?NmjFL?lP3BdD
zgn7U<>9IGjOnN8>EIJYz(PX}1xPf3I?3dUZXldQe!Eq0vM3Hj9VkY1OAb#xpaIGz2
zb|FnmdR#KMWtJ!Uxb(UK2)z_JXzc-D;Oe>>oq9J>i3pLfU#uKt$J_*Ulif`dhwdZv
zQsm<15lbN3@8)d(900GQom`<pG?`c0Vz5`@nLAFb5<%U>*s0*qeKoBB?4?cH$l<A>
z56Rdu<_Z-$5*jI^N(A80eZ)>pme#A6)&Gl{kqXd6#F`s*iOc(L(EY=c{qF8+Yv^qs
iW|dM((>^o)wO#>{<+yXoU?>#;0000<MNUMnLSTYY2-$o9

literal 0
HcmV?d00001

-- 
GitLab