920fba34ee
Don't reuse damage_per_second for damage on punch and radiant damage. This allows these to be defined separately, i.e. no longer assuming that all damage is from "heat" and can radiate. This allows for things like thorny plants that hurt if you touch them or stand in them but not if you stand near them. Thanks to WintersKnight94 for reporting this.
131 lines
2.9 KiB
Lua
131 lines
2.9 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local math, minetest, nodecore
|
|
= math, minetest, nodecore
|
|
local math_floor, math_sqrt
|
|
= math.floor, math.sqrt
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local modname = minetest.get_current_modname()
|
|
|
|
minetest.register_node(modname .. ":fire", {
|
|
description = "Fire",
|
|
drawtype = "firelike",
|
|
visual_scale = 1.5,
|
|
tiles = {
|
|
{
|
|
name = "nc_fire_fire.png",
|
|
animation = {
|
|
["type"] = "vertical_frames",
|
|
aspect_w = 24,
|
|
aspect_h = 24,
|
|
length = 0.6
|
|
}
|
|
}
|
|
},
|
|
paramtype = "light",
|
|
light_source = 12,
|
|
groups = {
|
|
igniter = 1,
|
|
flame = 1,
|
|
flame_sound = 1,
|
|
stack_as_node = 1,
|
|
damage_touch = 1,
|
|
damage_radiant = 1
|
|
},
|
|
damage_per_second = 1,
|
|
sunlight_propagates = true,
|
|
floodable = true,
|
|
walkable = false,
|
|
pointable = false,
|
|
diggable = false,
|
|
buildable_to = true,
|
|
drop = ""
|
|
})
|
|
|
|
local function txr(name, opaq)
|
|
local full = modname .. "_" .. name .. ".png"
|
|
if opaq and opaq < 1 then
|
|
full = "(" .. full .. "^[opacity:"
|
|
.. math_floor(256 * math_sqrt(opaq)) .. ")"
|
|
end
|
|
return full
|
|
end
|
|
|
|
local function txrcoal(num)
|
|
local name = txr("ash")
|
|
local base = math_floor(num / 2)
|
|
if base > 0 then
|
|
for i = base, 1, -1 do
|
|
name = name .. "^" .. txr("coal_" .. i)
|
|
end
|
|
end
|
|
local rem = (num / 2) - base
|
|
if rem > 0 then
|
|
name = name .. "^" .. txr("coal_" .. (base + 1), rem)
|
|
end
|
|
return name
|
|
end
|
|
|
|
for num = 1, nodecore.fire_max do
|
|
minetest.register_node(modname .. ":coal" .. num, {
|
|
description = "Charcoal",
|
|
tiles = {txrcoal(num) .. "^[noalpha"},
|
|
groups = {
|
|
crumbly = 1,
|
|
flammable = 5 - math_floor(num / nodecore.fire_max * 4),
|
|
falling_node = 1,
|
|
fire_fuel = num,
|
|
charcoal = num
|
|
},
|
|
crush_damage = 1,
|
|
sounds = nodecore.sounds("nc_terrain_crunchy")
|
|
})
|
|
end
|
|
|
|
local function txrember(num)
|
|
local name = txrcoal(num)
|
|
local base = math_floor(num / 2)
|
|
if base > 0 then
|
|
name = name .. "^" .. txr("ember_" .. base)
|
|
end
|
|
local rem = (num / 2) - base
|
|
if rem > 0 then
|
|
name = name .. "^" .. txr("ember_" .. (base + 1), rem)
|
|
end
|
|
return name
|
|
end
|
|
|
|
for num = 1, nodecore.fire_max do
|
|
minetest.register_node(modname .. ":ember" .. num, {
|
|
description = "Burning Embers",
|
|
tiles = {txrember(num) .. "^[noalpha"},
|
|
paramtype = "light",
|
|
light_source = 6,
|
|
groups = {
|
|
igniter = 1,
|
|
ember = num,
|
|
falling_node = 1,
|
|
stack_as_node = 1,
|
|
damage_touch = 1,
|
|
damage_radiant = 1
|
|
},
|
|
drop = "",
|
|
diggable = false,
|
|
crush_damage = 1,
|
|
sounds = nodecore.sounds("nc_terrain_crunchy")
|
|
})
|
|
end
|
|
minetest.register_alias(modname .. ":fuel", modname .. ":ember2")
|
|
|
|
minetest.register_node(modname .. ":ash", {
|
|
description = "Ash",
|
|
tiles = {modname .. "_ash.png"},
|
|
groups = {
|
|
falling_node = 1,
|
|
falling_repose = 1,
|
|
crumbly = 1
|
|
},
|
|
crush_damage = 0.25,
|
|
sounds = nodecore.sounds("nc_terrain_swishy")
|
|
})
|