diff --git a/deco_caves.lua b/deco_caves.lua new file mode 100644 index 0000000..ca73032 --- /dev/null +++ b/deco_caves.lua @@ -0,0 +1,519 @@ +---------------------- +-- Cave Decorations -- +---------------------- + +-- Mushrooms and Speleothems +-- These are instantiated by voxel.lua since the decoration manager +-- only works at the surface of the world. + +local light_max = 9 +loud_walking.time_factor = 10 + +minetest.register_node("loud_walking:huge_mushroom_cap", { + description = "Huge Mushroom Cap", + tiles = {"loud_walking_mushroom_giant_cap.png", "loud_walking_mushroom_giant_under.png", "loud_walking_mushroom_giant_cap.png"}, + is_ground_content = false, + paramtype = "light", + drawtype = "nodebox", + node_box = { type = "fixed", + fixed = { + {-0.5, -0.5, -0.33, 0.5, -0.33, 0.33}, + {-0.33, -0.5, 0.33, 0.33, -0.33, 0.5}, + {-0.33, -0.5, -0.33, 0.33, -0.33, -0.5}, + {-0.33, -0.33, -0.33, 0.33, -0.17, 0.33}, + } }, + light_source = 4, + groups = {fleshy=1, dig_immediate=3, flammable=2, plant=1, leafdecay=1}, +}) + +minetest.register_node("loud_walking:giant_mushroom_cap", { + description = "Giant Mushroom Cap", + tiles = {"loud_walking_mushroom_giant_cap.png", "loud_walking_mushroom_giant_under.png", "loud_walking_mushroom_giant_cap.png"}, + is_ground_content = false, + paramtype = "light", + drawtype = "nodebox", + node_box = { type = "fixed", + fixed = { + {-0.4, -0.5, -0.4, 0.4, 0.0, 0.4}, + {-0.75, -0.5, -0.4, -0.4, -0.25, 0.4}, + {0.4, -0.5, -0.4, 0.75, -0.25, 0.4}, + {-0.4, -0.5, -0.75, 0.4, -0.25, -0.4}, + {-0.4, -0.5, 0.4, 0.4, -0.25, 0.75}, + } }, + light_source = 8, + groups = {fleshy=1, dig_immediate=3, flammable=2, plant=1, leafdecay=1}, +}) + +minetest.register_node("loud_walking:giant_mushroom_stem", { + description = "Giant Mushroom Stem", + tiles = {"loud_walking_mushroom_giant_stem.png", "loud_walking_mushroom_giant_stem.png", "loud_walking_mushroom_giant_stem.png"}, + is_ground_content = false, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, plant=1}, + sounds = default.node_sound_wood_defaults(), + paramtype = "light", + drawtype = "nodebox", + node_box = { type = "fixed", fixed = { {-0.25, -0.5, -0.25, 0.25, 0.5, 0.25}, }}, +}) + +-- Mushroom stems can be used as wood, ala Journey to the Center of the Earth. +minetest.register_craft({ + output = "default:wood", + recipe = { + {"loud_walking:giant_mushroom_stem"} + } +}) + +-- Caps can be cooked and eaten. +minetest.register_node("loud_walking:mushroom_steak", { + description = "Mushroom Steak", + drawtype = "plantlike", + paramtype = "light", + tiles = {"loud_walking_mushroom_steak.png"}, + inventory_image = "loud_walking_mushroom_steak.png", + on_use = minetest.item_eat(4), + groups = {dig_immediate = 3, attached_node = 1}, +}) + +minetest.register_craft({ + type = "cooking", + output = "loud_walking:mushroom_steak", + recipe = "loud_walking:huge_mushroom_cap", + cooktime = 2, +}) + +minetest.register_craft({ + type = "cooking", + output = "loud_walking:mushroom_steak 2", + recipe = "loud_walking:giant_mushroom_cap", + cooktime = 2, +}) + +-- Glowing fungal stone provides an eerie light. +minetest.register_node("loud_walking:glowing_fungal_stone", { + description = "Glowing Fungal Stone", + tiles = {"default_stone.png^loud_walking_glowing_fungal.png",}, + is_ground_content = true, + light_source = 8, + groups = {cracky=3, stone=1}, + drop = {items={ {items={"default:cobble"},}, {items={"loud_walking:glowing_fungus",},},},}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("loud_walking:glowing_fungus", { + description = "Glowing Fungus", + drawtype = "plantlike", + paramtype = "light", + tiles = {"loud_walking_glowing_fungus.png"}, + inventory_image = "loud_walking_glowing_fungus.png", + groups = {dig_immediate = 3, attached_node = 1}, +}) + +-- The fungus can be made into juice and then into glowing glass. +minetest.register_node("loud_walking:moon_juice", { + description = "Moon Juice", + drawtype = "plantlike", + paramtype = "light", + tiles = {"loud_walking_moon_juice.png"}, + inventory_image = "loud_walking_moon_juice.png", + groups = {dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("loud_walking:moon_glass", { + description = "Moon Glass", + drawtype = "glasslike", + tiles = {"default_glass.png",}, + inventory_image = minetest.inventorycube("default_glass.png"), + is_ground_content = true, + light_source = default.LIGHT_MAX, + groups = {cracky=3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft({ + output = "loud_walking:moon_juice", + recipe = { + {"loud_walking:glowing_fungus", "loud_walking:glowing_fungus", "loud_walking:glowing_fungus"}, + {"loud_walking:glowing_fungus", "loud_walking:glowing_fungus", "loud_walking:glowing_fungus"}, + {"loud_walking:glowing_fungus", "vessels:glass_bottle", "loud_walking:glowing_fungus"}, + }, +}) + +minetest.register_craft({ + output = "loud_walking:moon_glass", + type = "shapeless", + recipe = { + "loud_walking:moon_juice", + "loud_walking:moon_juice", + "default:glass", + }, +}) + +-- What's a cave without speleothems? +local spel = { + {type1="stalactite", type2="stalagmite", tile="default_stone.png"}, + {type1="stalactite_slimy", type2="stalagmite_slimy", tile="default_stone.png^loud_walking_algae.png"}, + {type1="stalactite_mossy", type2="stalagmite_mossy", tile="default_stone.png^loud_walking_moss.png"}, + {type1="icicle_down", type2="icicle_up", desc="Icicle", tile="caverealms_thin_ice.png", drop="default:ice"}, +} + +for _, desc in pairs(spel) do + minetest.register_node("loud_walking:"..desc.type1, { + description = (desc.desc or "Stalactite"), + tiles = {desc.tile}, + is_ground_content = true, + walkable = false, + paramtype = "light", + --light_source = 14, + drop = (desc.drop or "loud_walking:stalactite"), + drawtype = "nodebox", + node_box = { type = "fixed", + fixed = { + {-0.07, 0.0, -0.07, 0.07, 0.5, 0.07}, + {-0.04, -0.25, -0.04, 0.04, 0.0, 0.04}, + {-0.02, -0.5, -0.02, 0.02, 0.25, 0.02}, + } }, + groups = {rock=1, cracky=3}, + sounds = default.node_sound_stone_defaults(), + }) + + minetest.register_node("loud_walking:"..desc.type2, { + description = (desc.desc or "Stalagmite"), + tiles = {desc.tile}, + is_ground_content = true, + walkable = false, + paramtype = "light", + --light_source = 14, + drop = "loud_walking:stalagmite", + drawtype = "nodebox", + node_box = { type = "fixed", + fixed = { + {-0.07, -0.5, -0.07, 0.07, 0.0, 0.07}, + {-0.04, 0.0, -0.04, 0.04, 0.25, 0.04}, + {-0.02, 0.25, -0.02, 0.02, 0.5, 0.02}, + } }, + groups = {rock=1, cracky=3}, + sounds = default.node_sound_stone_defaults(), + }) +end + +-- They can be made into cobblestone, to get them out of inventory. +minetest.register_craft({ + output = "default:cobble", + recipe = { + {"", "", ""}, + {"loud_walking:stalactite", "loud_walking:stalactite", ""}, + {"loud_walking:stalactite", "loud_walking:stalactite", ""}, + }, +}) + +minetest.register_craft({ + output = "default:cobble", + recipe = { + {"", "", ""}, + {"loud_walking:stalagmite", "loud_walking:stalagmite", ""}, + {"loud_walking:stalagmite", "loud_walking:stalagmite", ""}, + }, +}) + +minetest.register_node("loud_walking:glowing_dirt", { + description = "Glowing Dirt", + tiles = {"default_dirt.png"}, + groups = {crumbly = 3, soil = 1}, + light_source = default.LIGHT_MAX, + sounds = default.node_sound_dirt_defaults(), + soil = { + base = "loud_walking:glowing_dirt", + dry = "loud_walking:glowing_soil", + wet = "loud_walking:glowing_soil_wet" + }, +}) + +minetest.register_node("loud_walking:glowing_soil", { + description = "Glowing Soil", + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "loud_walking:glowing_dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + light_source = default.LIGHT_MAX, + soil = { + base = "loud_walking:glowing_dirt", + dry = "loud_walking:glowing_soil", + wet = "loud_walking:glowing_soil_wet" + }, +}) + +minetest.register_node("loud_walking:glowing_soil_wet", { + description = "Wet Glowing Soil", + tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, + drop = "loud_walking:glowing_dirt", + groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, + sounds = default.node_sound_dirt_defaults(), + light_source = default.LIGHT_MAX, + soil = { + base = "loud_walking:glowing_dirt", + dry = "loud_walking:glowing_soil", + wet = "loud_walking:glowing_soil_wet" + }, +}) + +minetest.register_craft({ + output = "loud_walking:glowing_dirt", + type = "shapeless", + recipe = { + "loud_walking:moon_juice", + "default:dirt", + }, +}) + +--thin (transparent) ice +minetest.register_node("loud_walking: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, + light_source = 1, + drawtype = "glasslike", + sunlight_propagates = true, + freezemelt = "default:water_source", + paramtype = "light", +}) + +minetest.register_node("loud_walking:stone_with_moss", { + description = "Cave Stone with Moss", + tiles = {"default_stone.png^loud_walking_moss.png"}, + is_ground_content = true, + light_source = 1, + groups = {stone=1, crumbly=3}, + drop = 'default:cobble', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.25}, + }), +}) + +minetest.register_node("loud_walking:stone_with_lichen", { + description = "Cave Stone with Lichen", + tiles = {"default_stone.png^loud_walking_lichen.png"}, + is_ground_content = true, + light_source = 1, + groups = {stone=1, crumbly=3}, + drop = 'default:cobble', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.25}, + }), +}) + +minetest.register_node("loud_walking:stone_with_algae", { + description = "Cave Stone with Algae", + tiles = {"default_stone.png^loud_walking_algae.png"}, + is_ground_content = true, + light_source = 1, + groups = {stone=1, crumbly=3}, + drop = 'default:cobble', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.25}, + }), +}) + +minetest.register_node("loud_walking: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 = {stone=1, crumbly=3}, + sounds = default.node_sound_glass_defaults(), +}) + +--Glow Obsidian +minetest.register_node("loud_walking:glow_obsidian", { + description = "Glowing Obsidian", + tiles = {"caverealms_glow_obsidian.png"}, + is_ground_content = true, + groups = {stone=2, 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("loud_walking:glow_obsidian_2", { + description = "Hot Glow Obsidian", + tiles = {"caverealms_glow_obsidian2.png"}, + is_ground_content = true, + groups = {stone=2, 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}, + }), +}) + + +--minetest.register_node("loud_walking:bright_air", { +-- drawtype = "glasslike", +-- tiles = {"technic_light.png"}, +-- paramtype = "light", +-- groups = {not_in_creative_inventory=1}, +-- drop = "", +-- walkable = false, +-- buildable_to = true, +-- sunlight_propagates = true, +-- light_source = LIGHT_MAX, +-- pointable = false, +--}) + +--define special flame so that it does not expire +minetest.register_node("loud_walking:constant_flame", { + description = "Fire", + drawtype = "plantlike", + tiles = {{ + name="fire_basic_flame_animated.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}, + }}, + inventory_image = "fire_basic_flame.png", + light_source = 14, + groups = {igniter=2,dig_immediate=3,hot=3, not_in_creative_inventory=1}, + drop = '', + walkable = false, + buildable_to = true, + damage_per_second = 4, + + --after_place_node = function(pos, placer) + -- if pos.y > -7000 then + -- minetest.remove_node(pos) + -- end + --end, +}) + +--Hot Cobble - cobble with lava instead of mortar XD +minetest.register_node("loud_walking:hot_cobble", { + description = "Hot Cobble", + tiles = {"caverealms_hot_cobble.png"}, + is_ground_content = true, + groups = {crumbly=2, hot=1}, + damage_per_second = 1, + light_source = 3, + sounds = default.node_sound_stone_defaults({ + footstep = {name="default_stone_footstep", gain=0.25}, + }), +}) + +-- mushroom growth +minetest.register_abm({ + nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, + interval = 50 * loud_walking.time_factor, + chance = 100, + action = function(pos, node) + if pos.y > -50 then + return + end + local pos_up = {x=pos.x,y=pos.y+1,z=pos.z} + local node_up = minetest.get_node_or_nil(pos_up) + if not node_up then + return + end + if node_up.name ~= "air" then + return + end + local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under then + return + end + if minetest.get_item_group(node_under.name, "soil") ~= 0 and + minetest.get_node_light(pos_up, nil) <= light_max then + minetest.set_node(pos_up, {name = "loud_walking:huge_mushroom_cap"}) + minetest.set_node(pos, {name = "loud_walking:giant_mushroom_stem"}) + end + end +}) + +-- mushroom growth +minetest.register_abm({ + nodenames = {"loud_walking:huge_mushroom_cap"}, + interval = 100 * loud_walking.time_factor, + chance = 150, + action = function(pos, node) + if minetest.get_node_light(pos, nil) >= 14 then + minetest.set_node(pos, {name = "air"}) + return + end + local pos_up = {x=pos.x,y=pos.y+1,z=pos.z} + local node_up = minetest.get_node_or_nil(pos_up) + if not node_up then + return + end + if node_up.name ~= "air" then + return + end + local node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z}) + if not node_under or node_under.name ~= "loud_walking:giant_mushroom_stem" then + return + end + node_under = minetest.get_node_or_nil({x = pos.x, y = pos.y - 2, z = pos.z}) + if not node_under then + return + end + if minetest.get_item_group(node_under.name, "soil") ~= 0 and + minetest.get_node_light(pos_up, nil) <= light_max then + minetest.set_node(pos_up, {name = "loud_walking:giant_mushroom_cap"}) + minetest.set_node(pos, {name = "loud_walking:giant_mushroom_stem"}) + end + end +}) + +-- mushroom growth +minetest.register_abm({ + nodenames = {"loud_walking:giant_mushroom_stem"}, + interval = 5 * loud_walking.time_factor, + chance = 5, + action = function(pos, node) + local pos_up = {x=pos.x,y=pos.y+1,z=pos.z} + local node_up = minetest.get_node_or_nil(pos_up) + if not node_up then + return + end + if node_up.name ~= "air" then + return + end + if minetest.get_node_light(pos_up, nil) <= light_max then + minetest.set_node(pos_up, {name = "loud_walking:huge_mushroom_cap"}) + end + end +}) + +-- mushroom spread +minetest.register_abm({ + nodenames = {"loud_walking:giant_mushroom_cap", "loud_walking:huge_mushroom_cap"}, + interval = 3 * loud_walking.time_factor, + chance = 40, + action = function(pos, node) + if minetest.get_node_light(pos, nil) >= 14 then + minetest.set_node(pos, {name = "air"}) + return + end + local pos_down = pos + pos_down.y = pos_down.y - 1 + local pos1, count = minetest.find_nodes_in_area_under_air(vector.subtract(pos_down, 4), vector.add(pos_down, 4), {"group:soil"}) + if #pos1 < 1 then + return + end + local random = pos1[math.random(1, #pos1)] + random.y = random.y + 1 + local mushroom_type + if math.random(1,2) == 1 then + mushroom_type = "flowers:mushroom_red" + else + mushroom_type = "flowers:mushroom_brown" + end + if minetest.get_node_light(random, nil) <= light_max then + minetest.set_node(random, {name = mushroom_type}) + end + end +}) diff --git a/init.lua b/init.lua index 7fe40e5..b1fae58 100644 --- a/init.lua +++ b/init.lua @@ -79,6 +79,7 @@ end dofile(loud_walking.path .. "/nodes.lua") dofile(loud_walking.path .. "/deco.lua") +dofile(loud_walking.path .. "/deco_caves.lua") dofile(loud_walking.path .. "/mapgen.lua") diff --git a/mapgen.lua b/mapgen.lua index 6b17af5..4d3b775 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -178,6 +178,7 @@ local function get_biome(px, pz) end local biome = biome_names[rarity][math.random(#biome_names[rarity])] return biome + --return "glacier" end local function get_decoration(biome) @@ -267,7 +268,11 @@ function loud_walking.generate(p_minp, p_maxp, seed) local terr = get_height(dx, dz, biomes[biome].terrain_scale, ocean, index) local in_cave = false + if biome == "underground" then + terr = half - 5 + end + local cave_height = 0 for y = minp.y, maxp.y do local dy = y - minp.y if pod then @@ -325,20 +330,32 @@ function loud_walking.generate(p_minp, p_maxp, seed) elseif dy > terr + ground then data[ivm] = node("air") in_cave = false - elseif cave[index3d] ^ 2 > 0.1 + dy / half then + elseif cave[index3d] ^ 2 > (biome == "underground" and 0.5 or 1.3 - math.sin(dy / (half * 0.2))) then if terr + ground >= dy and not in_cave and dy > terr + ground - 10 then data[ivm] = node(node_top) elseif dy == 1 then - local sr = math.random(9) - if not ocean and not swamp and not beach and sr == 1 then + if not ocean and not swamp and not beach and math.random(6) == 1 then data[ivm] = node("default:lava_source") - elseif sr > 6 then - data[ivm] = node(node_stone) elseif ocean or swamp or beach then data[ivm] = node(node_filler) end - elseif ocean or swamp or beach and dy < half then + elseif (ocean or swamp or beach) and not in_cave and node_stone == "default:stone" and dy < half and math.random(20) == 1 then + data[ivm] = node("loud_walking:glowing_fungal_stone") + elseif (ocean or swamp or beach) and dy < half then data[ivm] = node(node_water) + elseif cave_height == 2 and node_filler == "default:dirt" and data[ivm - 3] == node(node_stone) and math.random(40) == 1 then + data[ivm] = node("loud_walking:giant_mushroom_cap") + data[ivm - a.ystride] = node("loud_walking:giant_mushroom_stem") + data[ivm - 2 * a.ystride] = node("loud_walking:giant_mushroom_stem") + data[ivm - 3 * a.ystride] = node(node_filler) + elseif cave_height == 1 and node_filler == "default:dirt" and data[ivm - 3] == node(node_stone) and math.random(20) == 1 then + data[ivm] = node("loud_walking:huge_mushroom_cap") + data[ivm - a.ystride] = node("loud_walking:giant_mushroom_stem") + data[ivm - 2 * a.ystride] = node(node_filler) + elseif not in_cave and node_stone == "default:stone" and math.random(10) == 1 then + data[ivm] = node("loud_walking:stalagmite") + elseif not in_cave and node_stone == "default:ice" and math.random(10) == 1 then + data[ivm] = node("loud_walking:icicle_up") else data[ivm] = node("air") end @@ -356,6 +373,13 @@ function loud_walking.generate(p_minp, p_maxp, seed) write = true else data[ivm] = node(node_stone) + if in_cave and node_stone == "default:stone" and math.random(20) == 1 then + data[ivm] = node("loud_walking:glowing_fungal_stone") + elseif in_cave and not (ocean or swamp or beach) and node_stone == "default:stone" and math.random(10) == 1 then + data[ivm - a.ystride] = node("loud_walking:stalactite") + elseif in_cave and not (ocean or swamp or beach) and node_stone == "default:ice" and math.random(10) == 1 then + data[ivm - a.ystride] = node("loud_walking:icicle_down") + end lightmap[ivm] = 0 in_cave = false write = true @@ -366,6 +390,11 @@ function loud_walking.generate(p_minp, p_maxp, seed) write = true end + if in_cave then + cave_height = cave_height + 1 + else + cave_height = 0 + end ivm = ivm + a.ystride index3d = index3d + csize.x end @@ -377,8 +406,8 @@ function loud_walking.generate(p_minp, p_maxp, seed) for dz = 0, 75, 5 do for dx = 0, 75, 5 do if math.random(2) == 1 then - local x = minp.x + dx + math.random(0, 4) - local z = minp.z + dz + math.random(0, 4) + local x = minp.x + dx + math.random(5) - 1 + local z = minp.z + dz + math.random(5) - 1 local y = minp.y + get_height(x - minp.x, z - minp.z, biomes[biome].terrain_scale, ocean) + ground local ivm = a:index(x, y, z) @@ -406,7 +435,7 @@ function loud_walking.generate(p_minp, p_maxp, seed) minetest.generate_decorations(vm, minp, maxp) --vm:set_param2_data(p2data) --vm:set_lighting({day = 15, night = 0}) - vm:set_light_data(lightmap) + --vm:set_light_data(lightmap) vm:calc_lighting(minp, maxp, false) vm:update_liquids() vm:write_to_map() diff --git a/textures/caverealms_algae.png b/textures/caverealms_algae.png new file mode 100644 index 0000000..980a4a1 Binary files /dev/null and b/textures/caverealms_algae.png differ diff --git a/textures/caverealms_glow_obsidian.png b/textures/caverealms_glow_obsidian.png new file mode 100644 index 0000000..a157738 Binary files /dev/null and b/textures/caverealms_glow_obsidian.png differ diff --git a/textures/caverealms_glow_obsidian2.png b/textures/caverealms_glow_obsidian2.png new file mode 100644 index 0000000..2702d59 Binary files /dev/null and b/textures/caverealms_glow_obsidian2.png differ diff --git a/textures/caverealms_hot_cobble.png b/textures/caverealms_hot_cobble.png new file mode 100644 index 0000000..2e873e8 Binary files /dev/null and b/textures/caverealms_hot_cobble.png differ diff --git a/textures/caverealms_salty2.png b/textures/caverealms_salty2.png new file mode 100644 index 0000000..7f8b521 Binary files /dev/null and b/textures/caverealms_salty2.png differ diff --git a/textures/caverealms_thin_ice.png b/textures/caverealms_thin_ice.png new file mode 100644 index 0000000..b16036d Binary files /dev/null and b/textures/caverealms_thin_ice.png differ diff --git a/textures/loud_walking_moon_juice.png b/textures/loud_walking_moon_juice.png new file mode 100644 index 0000000..931b736 Binary files /dev/null and b/textures/loud_walking_moon_juice.png differ diff --git a/textures/loud_walking_mushroom_steak.png b/textures/loud_walking_mushroom_steak.png new file mode 100644 index 0000000..73b7509 Binary files /dev/null and b/textures/loud_walking_mushroom_steak.png differ