Fire: Add 'permanent flame' node
[oweals/minetest_game.git] / mods / fire / init.lua
index f3f6369af96ff5672f4987e46ff4563ca6dc6c45..7c65c5bb717e8fe96344c4c3d30ef1854fa3bbab 100644 (file)
@@ -5,25 +5,31 @@
 fire = {}
 
 
--- Register flame node
+-- Register flame nodes
 
 minetest.register_node("fire:basic_flame", {
-       description = "Fire",
+       description = "Basic Flame",
        drawtype = "firelike",
-       tiles = {{
-               name = "fire_basic_flame_animated.png",
-               animation = {type = "vertical_frames",
-                       aspect_w = 16, aspect_h = 16, length = 1},
-       }},
+       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",
        paramtype = "light",
        light_source = 14,
-       groups = {igniter = 2, dig_immediate = 3},
-       drop = '',
        walkable = false,
        buildable_to = true,
        sunlight_propagates = true,
        damage_per_second = 4,
+       groups = {igniter = 2, dig_immediate = 3},
+       drop = "",
 
        on_construct = function(pos)
                minetest.after(0, fire.on_flame_add_at, pos)
@@ -33,7 +39,36 @@ minetest.register_node("fire:basic_flame", {
                minetest.after(0, fire.on_flame_remove_at, pos)
        end,
 
-       on_blast = function() end, -- unaffected by explosions
+       on_blast = function()
+       end, -- unaffected by explosions
+})
+
+minetest.register_node("fire:permanent_flame", {
+       description = "Permanent Flame",
+       drawtype = "firelike",
+       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",
+       paramtype = "light",
+       light_source = 14,
+       walkable = false,
+       buildable_to = true,
+       sunlight_propagates = true,
+       damage_per_second = 4,
+       groups = {igniter = 2, dig_immediate = 3},
+       drop = "",
+
+       on_blast = function()
+       end,
 })
 
 
@@ -129,38 +164,39 @@ function fire.flame_should_extinguish(pos)
 end
 
 
--- Enable ABMs according to 'disable fire' setting
+-- Extinguish all flames quickly with water, snow, ice
 
-if minetest.setting_getbool("disable_fire") then
+minetest.register_abm({
+       nodenames = {"fire:basic_flame", "fire:permanent_flame"},
+       neighbors = {"group:puts_out_fire"},
+       interval = 3,
+       chance = 2,
+       action = function(p0, node, _, _)
+               minetest.remove_node(p0)
+               minetest.sound_play("fire_extinguish_flame",
+                       {pos = p0, max_hear_distance = 16, gain = 0.25})
+       end,
+})
 
-       -- Extinguish flames quickly with dedicated ABM
 
-       minetest.register_abm({
-               nodenames = {"fire:basic_flame"},
-               interval = 3,
-               chance = 2,
-               action = function(p0, node, _, _)
-                       minetest.remove_node(p0)
-               end,
-       })
+-- Enable the following ABMs according to 'disable fire' setting
 
-else
+if minetest.setting_getbool("disable_fire") then
 
-       -- Extinguish flames quickly with water, snow, ice
+       -- Remove basic flames only
 
        minetest.register_abm({
                nodenames = {"fire:basic_flame"},
-               neighbors = {"group:puts_out_fire"},
-               interval = 3,
+               interval = 7,
                chance = 2,
                action = function(p0, node, _, _)
                        minetest.remove_node(p0)
-                       minetest.sound_play("fire_extinguish_flame",
-                               {pos = p0, max_hear_distance = 16, gain = 0.25})
                end,
        })
 
-       -- Ignite neighboring nodes
+else
+
+       -- Ignite neighboring nodes, add basic flames
 
        minetest.register_abm({
                nodenames = {"group:flammable"},
@@ -179,7 +215,7 @@ else
                end,
        })
 
-       -- Remove flames and flammable nodes
+       -- Remove basic flames and flammable nodes
 
        minetest.register_abm({
                nodenames = {"fire:basic_flame"},