diff --git a/mine_gas/init.lua b/mine_gas/init.lua index b69f39f..91495a4 100644 --- a/mine_gas/init.lua +++ b/mine_gas/init.lua @@ -1,6 +1,8 @@ local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") +dofile(MP.."/wisp.lua") + local gas_desc local gas_usage diff --git a/mine_gas/textures/mine_gas_wisp.png b/mine_gas/textures/mine_gas_wisp.png new file mode 100644 index 0000000..bf918e0 Binary files /dev/null and b/mine_gas/textures/mine_gas_wisp.png differ diff --git a/mine_gas/textures/mine_gas_wisp_inventory.png b/mine_gas/textures/mine_gas_wisp_inventory.png new file mode 100644 index 0000000..c042871 Binary files /dev/null and b/mine_gas/textures/mine_gas_wisp_inventory.png differ diff --git a/mine_gas/wisp.lua b/mine_gas/wisp.lua new file mode 100644 index 0000000..574a2c7 --- /dev/null +++ b/mine_gas/wisp.lua @@ -0,0 +1,77 @@ +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +minetest.register_node("mine_gas:gas_wisp", { + description = S("Gas Wisp"), + _doc_items_longdesc = nil, + _doc_items_usagehelp = nil, + walkable = false, + diggable = false, + buildable_to = true, + drawtype = "plantlike", + waving = 1, + drowning = 1, + damage_per_second = 4, + post_effect_color = {a = 20, r = 20, g = 20, b = 250}, + tiles = {{name = "mine_gas_wisp.png", animation = + { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5, + }, + }}, + light_source = 10, + use_texture_alpha = true, + groups = {not_in_creative_inventory=0}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 0, + -- * bit 4 (0x10, decimal 16) - Makes the plant mesh 1.4x larger + inventory_image = "mine_gas_wisp_inventory.png", + drop = {}, + sunlight_propagates = true, + --on_blast = function() end, -- unaffected by explosions +}) + +minetest.register_abm({ + label = "mine_gas:gas wisp movement", + nodenames = {"mine_gas:gas_wisp"}, + neighbors = {"mine_gas:gas"}, + interval = 1.0, + chance = 10, + catch_up = true, + action = function(pos, node) + local next_pos = {x=pos.x+math.random(1,3)-2, y=pos.y+math.random(1,3)-2, z=pos.z+math.random(1,3)-2} + local next_node = minetest.get_node(next_pos) + if next_node.name == "mine_gas:gas" then + minetest.swap_node(next_pos, node) + minetest.swap_node(pos, next_node) + end + pos = next_pos + + end, +}) + +minetest.register_abm({ + label = "mine_gas:gas wisp extinguish", + nodenames = {"mine_gas:gas_wisp"}, + neighbors = {"air"}, + interval = 10, + chance = 1, + catch_up = true, + action = function(pos, node) + for y = -1, 1 do + for x = -1, 1 do + for z = -1, 1 do + if minetest.get_node({x=pos.x+x, y=pos.y+y, z=pos.z+z}).name == "mine_gas:gas" then + -- there's gas adjacent, don't extinguish + return + end + end + end + end + -- no gas adjacent, extinguish + minetest.set_node(pos, {name="air"}) + end, +}) \ No newline at end of file