a7b84724c8
- Smoke API uses expandable options param instead of positional - Separate burst qty from automatically adjusted rate - Backward compat with old API for now - Standardize burst of smoke puffs for crafting - Torches emit small smoke particles at increasing rate as they start to wear out, to warn players holding them to light another - Torches now emit a puff of smoke upon snuffing
125 lines
3.0 KiB
Lua
125 lines
3.0 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local minetest, nodecore, vector
|
|
= minetest, nodecore, vector
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
local modname = minetest.get_current_modname()
|
|
|
|
local cob = ""
|
|
local loose = ""
|
|
for i = 0, 31 do
|
|
cob = cob .. ":0," .. (i * 16) .. "=nc_terrain_cobble.png"
|
|
loose = loose .. ":0," .. (i * 16) .. "=nc_api_loose.png"
|
|
end
|
|
local function tile(suff)
|
|
return {
|
|
name = "[combine:16x512:0,0=nc_terrain_lava.png" .. cob .. suff,
|
|
animation = {
|
|
["type"] = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 8
|
|
}
|
|
}
|
|
end
|
|
|
|
local amalgam = modname .. ":amalgam"
|
|
local lavasrc = "nc_terrain:lava_source"
|
|
|
|
minetest.register_node(amalgam, {
|
|
description = "Amalgamation",
|
|
old_names = {"nc_terrain:amalgam"},
|
|
tiles = {tile("")},
|
|
paramtype = "light",
|
|
light_source = 3,
|
|
stack_max = 1,
|
|
groups = {
|
|
cracky = 1,
|
|
igniter = 1,
|
|
stack_as_node = 1,
|
|
amalgam = 1,
|
|
cobbley = 1
|
|
},
|
|
alternate_loose = {
|
|
tiles = {tile(loose)},
|
|
repack_level = 2,
|
|
groups = {
|
|
cracky = 0,
|
|
crumbly = 2,
|
|
falling_repose = 3
|
|
},
|
|
sounds = nodecore.sounds("nc_terrain_chompy")
|
|
},
|
|
crush_damage = 2,
|
|
sounds = nodecore.sounds("nc_terrain_stony"),
|
|
})
|
|
|
|
minetest.register_abm({
|
|
label = "lava quench",
|
|
interval = 1,
|
|
chance = 2,
|
|
nodenames = {lavasrc},
|
|
neighbors = {"group:coolant"},
|
|
action = function(pos)
|
|
nodecore.sound_play("nc_api_craft_hiss", {gain = 0.25, pos = pos})
|
|
nodecore.smokeburst(pos)
|
|
nodecore.dynamic_shade_add(pos, 1)
|
|
return nodecore.set_loud(pos, {name = amalgam})
|
|
end
|
|
})
|
|
|
|
minetest.register_abm({
|
|
label = "amalgam melt",
|
|
interval = 1,
|
|
chance = 2,
|
|
nodenames = {"group:amalgam"},
|
|
arealoaded = 1,
|
|
action = function(pos)
|
|
if nodecore.quenched(pos) then return end
|
|
return nodecore.set_loud(pos, {name = lavasrc})
|
|
end
|
|
})
|
|
|
|
nodecore.register_aism({
|
|
label = "amalgam stack melt",
|
|
interval = 1,
|
|
chance = 2,
|
|
arealoaded = 1,
|
|
itemnames = {"group:amalgam"},
|
|
action = function(stack, data)
|
|
if nodecore.quenched(data.pos) then return end
|
|
if stack:get_count() == 1 and data.node then
|
|
local def = minetest.registered_nodes[data.node.name]
|
|
if def and def.groups and def.groups.is_stack_only then
|
|
nodecore.set_loud(data.pos, {name = lavasrc})
|
|
stack:take_item(1)
|
|
return stack
|
|
end
|
|
end
|
|
for rel in nodecore.settlescan() do
|
|
local p = vector.add(data.pos, rel)
|
|
if nodecore.buildable_to(p) then
|
|
nodecore.set_loud(p, {name = lavasrc})
|
|
stack:take_item(1)
|
|
return stack
|
|
end
|
|
end
|
|
end
|
|
})
|
|
|
|
nodecore.register_falling_node_step(function(self)
|
|
if not (self.node and self.node.name) then return end
|
|
if minetest.get_item_group(self.node.name, "amalgam") <= 0 then return end
|
|
|
|
local pos = self.object:get_pos()
|
|
|
|
if (not pos)
|
|
or nodecore.quenched(pos)
|
|
or not nodecore.buildable_to(pos) then return end
|
|
|
|
nodecore.set_loud(pos, {name = lavasrc})
|
|
self.object:remove()
|
|
|
|
return true
|
|
end)
|