From f3c6f2df23042f967c9f807599fa11aea16b0e2f Mon Sep 17 00:00:00 2001 From: Treer Date: Sat, 25 Jan 2020 22:52:26 +1100 Subject: [PATCH] Add fumaroles (Nether chimneys) Or they can be used on the surface as cottage chimneys. --- README.md | 3 + mapgen_decorations.lua | 226 +++++++++++++++++++++++++++++-- nodes.lua | 235 +++++++++++++++++++++++++++++++++ sounds/nether_fumarole.ogg | Bin 0 -> 20951 bytes textures/nether_smoke_puff.png | Bin 0 -> 361 bytes 5 files changed, 452 insertions(+), 12 deletions(-) create mode 100644 sounds/nether_fumarole.ogg create mode 100644 textures/nether_smoke_puff.png diff --git a/README.md b/README.md index aaa3a9a..e6e712d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ SOFTWARE. * `nether_book_`* (files starting with "nether_book"): Treer, 2019-2020 * `nether_portal_ignition_failure.ogg`: Treer, 2019 * `nether_particle_anim`* (files starting with "nether_particle_anim"): Treer, 2019 + * `nether_fumarole.ogg`: Treer, 2020 + * `nether_smoke_puff.png` is a derivative work of gleamyRock.gif by Spring (https://opengameart.org/users/spring), used + under CC0 1.0. "Nether smoke puff" is licenced under CC BY-SA 4.0 Treer, 2020 ### [Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)](http://creativecommons.org/licenses/by-sa/3.0/) * `nether_rack.png`: Zeg9 diff --git a/mapgen_decorations.lua b/mapgen_decorations.lua index fbca05e..7005da4 100644 --- a/mapgen_decorations.lua +++ b/mapgen_decorations.lua @@ -25,12 +25,22 @@ -- emerged or not before the decoration was placed. local allow_lava_decorations = nether.useBiomes -local _ = {name = "air", prob = 0} -local A = {name = "air", prob = 255, force_place = true} -local G = {name = "nether:glowstone", prob = 255, force_place = true} -local N = {name = "nether:rack", prob = 255} -local S = {name = "nether:sand", prob = 255, force_place = true} -local L = {name = "default:lava_source", prob = 255, force_place = true} +local _ = {name = "air", prob = 0} +local A = {name = "air", prob = 255, force_place = true} +local G = {name = "nether:glowstone", prob = 255, force_place = true} +local N = {name = "nether:rack", prob = 255} +local S = {name = "nether:sand", prob = 255, force_place = true} +local L = {name = "default:lava_source", prob = 255, force_place = true} +local F = {name = "nether:fumarole", prob = 255, force_place = true} +local FS = {name = "nether:fumarole_slab", prob = 255, force_place = true} +local F1 = {name = "nether:fumarole_corner", prob = 255, force_place = true, param2 = 0} +local F2 = {name = "nether:fumarole_corner", prob = 255, force_place = true, param2 = 1} +local F3 = {name = "nether:fumarole_corner", prob = 255, force_place = true, param2 = 2} +local F4 = {name = "nether:fumarole_corner", prob = 255, force_place = true, param2 = 3} +local S1 = {name = "stairs:stair_netherrack", prob = 255, force_place = true, param2 = 5} +local S2 = {name = "stairs:stair_netherrack", prob = 255, force_place = true, param2 = 7} +local S3 = {name = "stairs:stair_netherrack", prob = 255, force_place = true, param2 = 12} +local S4 = {name = "stairs:stair_netherrack", prob = 255, force_place = true, param2 = 16} -- ================= @@ -39,7 +49,7 @@ local L = {name = "default:lava_source", prob = 255, force_place = true} local schematic_GlowstoneStalactite = { size = {x = 5, y = 10, z = 5}, - data = { + data = { -- note that data is upside down _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, @@ -143,7 +153,7 @@ minetest.register_decoration({ -- ======================================= -- if player places a torch/block on this sand or digs it while standing on it, it sinks into lava -if allow_lava_decorations then +if allow_lava_decorations then minetest.register_decoration({ name = "Weak trap", deco_type = "schematic", @@ -151,11 +161,11 @@ if allow_lava_decorations then sidelen = 80, fill_ratio = 0.002, biomes = {"nether_caverns"}, - y_max = NETHER_CEILING, -- keep compatibility with mapgen_nobiomes.lua - y_min = NETHER_FLOOR, + y_max = nether.DEPTH, -- keep compatibility with mapgen_nobiomes.lua + y_min = nether.DEPTH_FLOOR, schematic = { size = {x = 4, y = 7, z = 4}, - data = { + data = { -- note that data is upside down _, _, _, _, _, _, _, _, _, N, _, _, @@ -165,7 +175,7 @@ if allow_lava_decorations then _, _, _, _, _, N, _, _, -- make it look like a stalactite if it protrudes out the bottom of a landform - _, N, _, _, + _, N, _, _, N, L, N, _, N, L, L, N, N, L, L, N, @@ -195,3 +205,195 @@ if allow_lava_decorations then rotation = "random" }) end + + +-- ========================== +-- Fumaroles (Chimneys) +-- ========================== + + +local replacements_slab = {} +local replacements_full = {["nether:fumarole_slab"] = "nether:fumarole"} + +if allow_lava_decorations then + -- Minetest engine limitations mean any mesh or nodebox node (like nether:fumarole) + -- will light up if it has lava below it, so replace the air node over the lava with + -- a node that prevents light propagation. + -- (Unfortunately this also means if a player digs down to get the lava block it'll + -- look like the lighting wasn't set in the block above the lava) + replacements_slab["air"] = "nether:airlike_darkness" + replacements_full["air"] = "nether:airlike_darkness" +else + -- Lava is frequently removed by the old mapgen, so put sand at the bottom + -- of fumaroles. + replacements_slab["default:lava_source"] = "nether:sand" + replacements_full["default:lava_source"] = "nether:sand" +end + + +local schematic_fumarole = { + size = {x = 3, y = 5, z = 3}, + data = { -- note that data is upside down + _, _, _, + _, N, _, + _, N, _, + _, _, _, + _, _, _, + + _, N, _, + N, L, N, + N, A, N, + _, F, _, + _,FS, _, + + _, _, _, + _, N, _, + _, N, _, + _, _, _, + _, _, _, + }, +} + +-- Common fumarole decoration that's flush with the floor and spawns everywhere + +minetest.register_decoration({ + name = "Sunken nether fumarole", + deco_type = "schematic", + place_on = {"nether:rack"}, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"nether_caverns"}, + y_max = nether.DEPTH, + y_min = nether.DEPTH_FLOOR, + schematic = schematic_fumarole, + replacements = replacements_full, + flags = "place_center_x,place_center_z,all_floors", + place_offset_y=-4 +}) + + +-- Rarer formations of raised fumaroles in clumps + +local fumarole_clump_noise_offset = -0.58 +local fumarole_clump_noise = { + offset = fumarole_clump_noise_offset, + scale = 0.5, + spread = {x = 40, y = 40, z = 15}, + octaves = 4, + persist = 0.65, + lacunarity = 2.0, +} + +fumarole_clump_noise.offset = fumarole_clump_noise_offset - 0.035 +minetest.register_decoration({ + name = "Raised Nether fumarole", + deco_type = "schematic", + place_on = {"nether:rack"}, + sidelen = 8, + noise_params = fumarole_clump_noise, + biomes = {"nether_caverns"}, + y_max = nether.DEPTH, + y_min = nether.DEPTH_FLOOR, + schematic = schematic_fumarole, + replacements = replacements_full, + flags = "place_center_x,place_center_z,all_floors", + place_offset_y=-3 +}) + +fumarole_clump_noise.offset = fumarole_clump_noise_offset +minetest.register_decoration({ + name = "Half-raised Nether fumarole", + deco_type = "schematic", + place_on = {"nether:rack"}, + sidelen = 8, + noise_params = fumarole_clump_noise, + biomes = {"nether_caverns"}, + y_max = nether.DEPTH, + y_min = nether.DEPTH_FLOOR, + schematic = schematic_fumarole, + replacements = replacements_slab, + flags = "place_center_x,place_center_z,all_floors", + place_offset_y=-3 +}) + +fumarole_clump_noise.offset = fumarole_clump_noise_offset - 0.035 +minetest.register_decoration({ + name = "Nether fumarole mound", + deco_type = "schematic", + place_on = {"nether:rack"}, + sidelen = 8, + noise_params = fumarole_clump_noise, + biomes = {"nether_caverns"}, + y_max = nether.DEPTH, + y_min = nether.DEPTH_FLOOR, + schematic = { + size = {x = 4, y = 4, z = 4}, + data = { -- note that data is upside down + _, _, _, _, + _, N, N, _, + _, _, _, _, + _, _, _, _, + + _, S, S, _, + N, A, A, N, + _, S2, S1, _, + _, F2, F1, _, + + _, S, S, _, + N, A, A, N, + _, S3, S4, _, + _, F3, F4, _, + + _, _, _, _, + _, N, N, _, + _, _, _, _, + _, _, _, _ + }, + yslice_prob = {{ypos = 3, prob = 192}} -- occasionally leave the fumarole cap off + }, + flags = "place_center_x,place_center_z,all_floors", + place_offset_y = -2 +}) + +fumarole_clump_noise.offset = fumarole_clump_noise_offset - 0.01 +minetest.register_decoration({ + name = "Double Nether fumarole", + deco_type = "schematic", + place_on = {"nether:rack"}, + sidelen = 8, + noise_params = fumarole_clump_noise, + biomes = {"nether_caverns"}, + y_max = nether.DEPTH, + y_min = nether.DEPTH_FLOOR, + schematic = { + size = {x = 4, y = 5, z = 4}, + data = { -- note that data is upside down + _, _, _, _, + _, N, N, _, + _, _, _, _, + _, _, _, _, + _, _, _, _, + + _, S, S, _, + N, A, A, N, + _, S2, S1, _, + _, F2, F, _, + _, _, FS, _, + + _, S, S, _, + F, A, A, N, -- the F may add slight variance in landforms where it gets exposed + _, S3, S4, _, + _, F3, F4, _, + _, _, _, _, + + _, _, _, _, + _, N, N, _, + _, _, _, _, + _, _, _, _, + _, _, _, _ + } + }, + flags = "place_center_x,place_center_z,all_floors", + place_offset_y = -2, + rotation = "random" +}) \ No newline at end of file diff --git a/nodes.lua b/nodes.lua index ba27164..770ae0c 100644 --- a/nodes.lua +++ b/nodes.lua @@ -139,6 +139,15 @@ stairs.register_stair_and_slab( S("Outer Nether Stair") ) +stairs.register_stair( + "netherrack", + "nether:rack", + {cracky = 2, level = 2}, + {"nether_rack.png"}, + S("Netherrack stair"), + default.node_sound_stone_defaults() +) + -- StairsPlus if minetest.get_modpath("moreblocks") then @@ -152,6 +161,232 @@ if minetest.get_modpath("moreblocks") then end +-- Fumaroles (Chimney's) + +local function fumarole_startTimer(pos, timeout_factor) + + if timeout_factor == nil then timeout_factor = 1 end + local next_timeout = (math.random(50, 900) / 10) * timeout_factor + + minetest.get_meta(pos):set_float("expected_timeout", next_timeout) + minetest.get_node_timer(pos):start(next_timeout) +end + +-- Create an LBM to start fumarole node timers +minetest.register_lbm({ + label = "Start fumarole smoke", + name = "nether:start_fumarole", + nodenames = {"nether:fumarole"}, + run_at_every_load = true, + action = function(pos, node) + local node_above = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}) + if node_above.name == "air" then --and node.param2 % 4 == 0 then + fumarole_startTimer(pos) + end + end +}) + +local function set_fire(pos, extinguish) + local posBelow = {x = pos.x, y = pos.y - 1, z = pos.z} + + if extinguish then + if minetest.get_node(pos).name == "fire:permanent_flame" then minetest.set_node(pos, {name="air"}) end + if minetest.get_node(posBelow).name == "fire:permanent_flame" then minetest.set_node(posBelow, {name="air"}) end + + elseif minetest.get_node(posBelow).name == "air" then + minetest.set_node(posBelow, {name="fire:permanent_flame"}) + elseif minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name="fire:permanent_flame"}) + end +end + +local function fumarole_onTimer(pos, elapsed) + + local expected_timeout = minetest.get_meta(pos):get_float("expected_timeout") + if elapsed > expected_timeout + 10 then + -- The timer didn't fire when it was supposed to, so the chunk was probably inactive and has + -- just been approached again, meaning *every* fumarole's on_timer is about to go off. + -- Skip this event and restart the clock for a future random interval. + fumarole_startTimer(pos, 1) + return false + end + + -- Fumaroles in the Nether can catch fire. + -- (if taken to the surface and used as cottage chimneys, they don't catch fire) + local inNether = pos.y <= nether.DEPTH and pos.y >= nether.DEPTH_FLOOR + local canCatchFire = inNether and minetest.registered_nodes["fire:permanent_flame"] ~= nil + local smoke_offset = 0 + local timeout_factor = 1 + local smoke_time_adj = 1 + + local posAbove = {x = pos.x, y = pos.y + 1, z = pos.z} + local extinguish = minetest.get_node(posAbove).name ~= "air" + + if extinguish or (canCatchFire and math.floor(elapsed) % 7 == 0) then + + if not extinguish then + -- fumarole gasses are igniting + smoke_offset = 1 + timeout_factor = 0.22 -- reduce burning time + end + + set_fire(posAbove, extinguish) + set_fire({x = pos.x + 1, y = pos.y + 1, z = pos.z}, extinguish) + set_fire({x = pos.x - 1, y = pos.y + 1, z = pos.z}, extinguish) + set_fire({x = pos.x, y = pos.y + 1, z = pos.z + 1}, extinguish) + set_fire({x = pos.x, y = pos.y + 1, z = pos.z - 1}, extinguish) + + elseif inNether then + + if math.floor(elapsed) % 3 == 1 then + -- throw up some embers / lava splash + local embers_particlespawn_def = { + amount = 6, + time = 0.1, + minpos = {x=pos.x - 0.1, y=pos.y + 0.0, z=pos.z - 0.1}, + maxpos = {x=pos.x + 0.1, y=pos.y + 0.2, z=pos.z + 0.1}, + minvel = {x = -.5, y = 4.5, z = -.5}, + maxvel = {x = .5, y = 7, z = .5}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 1.4, + maxexptime = 1.4, + minsize = .2, + maxsize = .8, + texture = "^[colorize:#A00:255", + glow = 8 + } + minetest.add_particlespawner(embers_particlespawn_def) + embers_particlespawn_def.texture = "^[colorize:#A50:255" + embers_particlespawn_def.maxvel.y = 3 + embers_particlespawn_def.glow = 12 + minetest.add_particlespawner(embers_particlespawn_def) + + else + -- gas noises + minetest.sound_play("nether_fumarole", { + pos = pos, + max_hear_distance = 60, + gain = 0.24, + pitch = math.random(35, 95) / 100 + }) + end + + else + -- we're not in the Nether, so can afford to be a bit more smokey + timeout_factor = 0.4 + smoke_time_adj = 1.3 + end + + -- let out some smoke + minetest.add_particlespawner({ + amount = 12 * smoke_time_adj, + time = math.random(40, 60) / 10 * smoke_time_adj, + minpos = {x=pos.x - 0.2, y=pos.y + smoke_offset, z=pos.z - 0.2}, + maxpos = {x=pos.x + 0.2, y=pos.y + smoke_offset, z=pos.z + 0.2}, + minvel = {x=0, y=0.7, z=-0}, + maxvel = {x=0, y=0.8, z=-0}, + minacc = {x=0.0,y=0.0,z=-0}, + maxacc = {x=0.0,y=0.1,z=-0}, + minexptime = 5, + maxexptime = 5.5, + minsize = 1.5, + maxsize = 7, + texture = "nether_smoke_puff.png", + }) + + fumarole_startTimer(pos, timeout_factor) + return false +end + + +minetest.register_node("nether:fumarole", { + description="Fumarolic Chimney", + tiles = {"nether_rack.png"}, + on_timer = fumarole_onTimer, + after_place_node = function(pos, placer, itemstack, pointed_thing) + fumarole_onTimer(pos, 1) + return false + end, + is_ground_content = true, + groups = {cracky = 3, level = 2, fumarole=1}, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5000, -0.5000, -0.5000, -0.2500, 0.5000, 0.5000}, + {-0.5000, -0.5000, -0.5000, 0.5000, 0.5000, -0.2500}, + {-0.5000, -0.5000, 0.2500, 0.5000, 0.5000, 0.5000}, + {0.2500, -0.5000, -0.5000, 0.5000, 0.5000, 0.5000} + } + }, + selection_box = {type = 'fixed', fixed = {-.5, -.5, -.5, .5, .5, .5}} +}) + +minetest.register_node("nether:fumarole_slab", { + description="Fumarolic Chimney Slab", + tiles = {"nether_rack.png"}, + is_ground_content = true, + on_timer = fumarole_onTimer, + after_place_node = function(pos, placer, itemstack, pointed_thing) + fumarole_onTimer(pos, 1) + return false + end, + groups = {cracky = 3, level = 2, fumarole=1}, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5000, -0.5000, -0.5000, -0.2500, 0.000, 0.5000}, + {-0.5000, -0.5000, -0.5000, 0.5000, 0.000, -0.2500}, + {-0.5000, -0.5000, 0.2500, 0.5000, 0.000, 0.5000}, + {0.2500, -0.5000, -0.5000, 0.5000, 0.000, 0.5000} + } + }, + selection_box = {type = 'fixed', fixed = {-.5, -.5, -.5, .5, 0, .5}}, + collision_box = {type = 'fixed', fixed = {-.5, -.5, -.5, .5, 0, .5}} +}) + +minetest.register_node("nether:fumarole_corner", { + description="Fumarolic Chimney Corner", + tiles = {"nether_rack.png"}, + is_ground_content = true, + groups = {cracky = 3, level = 2, fumarole=1}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.2500, -0.5000, 0.5000, 0.000, 0.5000, 0.000}, + {-0.5000, -0.5000, 0.2500, 0.000, 0.5000, 0.000}, + {-0.5000, -0.5000, 0.2500, 0.000, 0.000, -0.5000}, + {0.000, -0.5000, -0.5000, 0.5000, 0.000, 0.5000} + } + }, + selection_box = { + type = 'fixed', + fixed = { + {-.5, -.5, -.5, .5, 0, .5}, + {0, 0, .5, -.5, .5, 0}, + } + } + +}) + +-- nether:airlike_darkness is an air node through which light does not propagate. +-- Use of it should be avoided when possible as it has the appearance of a lighting bug. +-- Fumarole decorations use it to stop the propagation of light from the lava below, +-- since engine limitations mean any mesh or nodebox node will light up if it has lava +-- below it. +local airlike_darkness = {} +for k,v in pairs(minetest.registered_nodes["air"]) do airlike_darkness[k] = v end +airlike_darkness.paramtype = "none" +minetest.register_node("nether:airlike_darkness", airlike_darkness) + + -- Crafting minetest.register_craft({ diff --git a/sounds/nether_fumarole.ogg b/sounds/nether_fumarole.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e02c464cb3babd21ba2f2cd2ad0481cdca39c63d GIT binary patch literal 20951 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 Hu0mjfi5Hd& literal 0 HcmV?d00001