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 0000000..5f58502 Binary files /dev/null and b/textures/caverealms_coal_dust.png differ diff --git a/textures/caverealms_glow_amethyst.png b/textures/caverealms_glow_amethyst.png new file mode 100644 index 0000000..4a5898d Binary files /dev/null and b/textures/caverealms_glow_amethyst.png differ diff --git a/textures/caverealms_glow_amethyst_ore.png b/textures/caverealms_glow_amethyst_ore.png new file mode 100644 index 0000000..8a68ef8 Binary files /dev/null and b/textures/caverealms_glow_amethyst_ore.png differ diff --git a/textures/caverealms_glow_obsidian.png b/textures/caverealms_glow_obsidian.png new file mode 100644 index 0000000..51c0a33 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..ea69258 Binary files /dev/null and b/textures/caverealms_glow_obsidian2.png differ diff --git a/textures/caverealms_salt_crystal.png b/textures/caverealms_salt_crystal.png new file mode 100644 index 0000000..b460ff3 Binary files /dev/null and b/textures/caverealms_salt_crystal.png differ diff --git a/textures/caverealms_salt_gem.png b/textures/caverealms_salt_gem.png new file mode 100644 index 0000000..2c2b052 Binary files /dev/null and b/textures/caverealms_salt_gem.png differ diff --git a/textures/caverealms_salty.png b/textures/caverealms_salty.png new file mode 100644 index 0000000..2372aac Binary files /dev/null and b/textures/caverealms_salty.png differ diff --git a/textures/caverealms_salty2.png b/textures/caverealms_salty2.png new file mode 100644 index 0000000..e8e948a Binary files /dev/null and b/textures/caverealms_salty2.png differ diff --git a/textures/caverealms_salty_side.png b/textures/caverealms_salty_side.png new file mode 100644 index 0000000..fdf49de Binary files /dev/null and b/textures/caverealms_salty_side.png differ diff --git a/textures/caverealms_spike.png b/textures/caverealms_spike.png new file mode 100644 index 0000000..32acbb5 Binary files /dev/null and b/textures/caverealms_spike.png differ