Aaron Suen e4dba54be3 Lode smelting rework.
Separate ore melting and draining processes, to
ease the cognitive leap necessary to figure out
lode smelting.  Players now get feedback when
they have figured out the heating part of the
process, and the visual for cobble with molten
lode in it hints at the draining process.
2019-10-06 10:31:58 -04:00

82 lines
2.1 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local math, minetest, nodecore
= math, minetest, nodecore
local math_exp, math_floor, math_log, math_random
= math.exp, math.floor, math.log, math.random
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local logadj = math_log(2)
local function exporand()
local r = 0
while r == 0 do r = math_random() end
return math_floor(math_exp(-math_log(r) * logadj))
end
nodecore.register_craft({
label = "heat lode cobble",
action = "cook",
touchgroups = {flame = 3},
duration = 30,
cookfx = true,
nodes = {
{
match = {groups = {lode_cobble = true}},
replace = modname .. ":cobble_hot"
}
}
})
nodecore.register_limited_abm({
label = "lode cobble drain",
nodenames = {modname .. ":cobble_hot"},
interval = 1,
chance = 1,
action = function(pos)
local below = {x = pos.x, y = pos.y - 1, z = pos.z}
if nodecore.match(below, {walkable = true}) then return end
minetest.set_node(pos, {name = "nc_terrain:cobble"})
nodecore.node_sound(pos, "place")
return nodecore.item_eject(below, modname
.. ":prill_hot " .. exporand())
end
})
nodecore.register_craft({
label = "lode ore cooling",
action = "cook",
touchgroups = {flame = 0},
duration = 30,
priority = -1,
cookfx = {smoke = true, hiss = true},
nodes = {
{
match = modname .. ":cobble_hot",
replace = modname .. ":cobble"
}
}
})
nodecore.register_craft({
label = "lode ore quenching",
action = "cook",
touchgroups = {flame = 0},
cookfx = true,
check = function(pos)
return #minetest.find_nodes_in_area(
{x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
{x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
{"group:coolant"}) > 0
end,
nodes = {
{
match = modname .. ":cobble_hot",
replace = modname .. ":cobble"
}
}
})
nodecore.register_cook_abm({nodenames = {"group:lode_cobble"}, neighbors = {"group:flame"}})
nodecore.register_cook_abm({nodenames = {modname .. ":cobble_hot"}})