From b0fc53089b78cd5e13f9d92771b1ad6b4a61832e Mon Sep 17 00:00:00 2001 From: Chris N 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)7!bLJamr_*UR#&Ee@&|0(IZb>OI zO%o|4oO4JiDT)GP48t&BtzGw&F$U)x)>@>Lc<@!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`DHVRh)AurI1pt^_}OL z=jUgXQh&nEK0ZEXAq0=dgTC*PQc{*BLWs5V%ioYv@_0P(-qZIzx7!V+lmb9&&3?aM zQ`TCOWf@v)LI`U^`@Ua=-rnARtGsj|gg}gu5CXg1ZsiWFU8GbZ8()Nlj2>E@cM*00P`eL_t(I%Vm>KZxcrt z#-G{Qf6jWztYZvqYQQEUag-8@l)8~owNC=Q3Bq}Ae zC`)R^aoxo`%Ve_SosHc?vsMJ}Wu(#jj(*ScK0_X~9zDf*eO>z&2VxIWi}DJdoA*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 zspclJl9D7`ydRdvUChP2U28=r`+P0fV5Jm#-Cx=UfC(llDv66|GZLu`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=ioH3b(=psAa4sXsWBdnT^N35bmp)Md O0000_NnL70~m#E!f!kPA4bI<1Dzpg7Ux9*@7z2)1*NFJMLIjVK7=Fm`u z1CIz~Z@8&s3K|q?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=w6vG;6`_~Wtm1U zkMwL_lal;pm7)fKzNYcFyAJ`Frm5??)_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 zcmVYbqvBFY&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?}3Tv$g02X2Ygu$w>_Q|;MMYfnN`CAS6{v9yhuAB8 zA9QcIUOBDDU&--3fgNAf=qFt+HhZ2)B~>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;=0xWFU8GbZ8()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)bPvRi+(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+@gBSh zs9N&VWd6@*dwjW=WPo|L0KJFBf-;WiYK2Nwq06Poyj*T_^ZPr@vo#Wl#_D$bEkUDu)B*aGjoYIY&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 zcmV8l-&zDnvm^l_~|zKEr(iItt_n z3RAkb1QA7KLt$wh6Z;NDejqFaZT6OJr5a;Fw@`t z*xx^&BbYd*>UoT#2<5udq9G3gDyPj_lZ%ur1B7ZI~C&_7wX>P+|#F3PCXqHEC)g8g1MdO&Syb0~an#To~iZ zxN_T#Y2wznGhLyps#P|MR?%W@36yfbv`}CeX1t zJJ0;@(|UdSVWY87YBb_w06)eESyO%ILX2Zas-ce=$3$U8q<1{a-da`V)*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%i8Dp_om1@lLv-_~BmgdbQM?}LSsKy8( z<^a`}-+_yrs&CA>&lW=%Ishi~s&B8mQ+Jx`t0DYhW~ix7tmJao1JLdcL6%{jC>>&+ zm`T%tmw_kw7>mjAarb_bxZ( 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)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|`NGwH*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=Ais8?j}pJrh%k3XfP-UMU&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>^&rw29gUtS$Ei2N z@LdGi1Ws-Yhx_$*`z=xQ=#J}NIb5w~+dDg===X~c=jT&(JqVr#kO6z|(#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%>^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`*s0*qeKoBB?4?cH$l 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