vapors
parent
dc9f144de1
commit
286c9c86fc
59
fluids.lua
59
fluids.lua
|
@ -208,24 +208,48 @@ local function register_fluid(modname, name, info)
|
|||
|
||||
if info.evap_chance > 0 then
|
||||
|
||||
-- evaporation
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:"..gname},
|
||||
neighbors = {"group:"..gname, "air"},
|
||||
interval = info.evap_interval,
|
||||
chance = info.evap_chance,
|
||||
action = function(pos)
|
||||
local mylevel = minetest.get_node_level(pos)
|
||||
if math.random(16 - minetest.get_node_light(pos)) == 1 then
|
||||
if mylevel > info.evap_rate then
|
||||
minetest.set_node_level(pos, mylevel - info.evap_rate)
|
||||
else
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
if info.vapor == true then
|
||||
-- evaporation to flammable vapors
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:"..gname},
|
||||
neighbors = {"air"},
|
||||
interval = info.evap_interval,
|
||||
chance = info.evap_chance,
|
||||
action = function(pos)
|
||||
local mylevel = minetest.get_node_level(pos)
|
||||
if math.random(16 - minetest.get_node_light(pos)) == 1 then
|
||||
if mylevel > info.evap_rate then
|
||||
minetest.set_node_level(pos, mylevel - info.evap_rate)
|
||||
|
||||
local vn = minetest.find_node_near(pos, 1, {"air"})
|
||||
if vn then
|
||||
minetest.set_node(vn, {name = "bitumen:vapor_2"})
|
||||
end
|
||||
else
|
||||
minetest.set_node(pos, {name = "bitumen:vapor_2"})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
})
|
||||
else
|
||||
-- normal evaporation
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:"..gname},
|
||||
neighbors = {"air"},
|
||||
interval = info.evap_interval,
|
||||
chance = info.evap_chance,
|
||||
action = function(pos)
|
||||
local mylevel = minetest.get_node_level(pos)
|
||||
if math.random(16 - minetest.get_node_light(pos)) == 1 then
|
||||
if mylevel > info.evap_rate then
|
||||
minetest.set_node_level(pos, mylevel - info.evap_rate)
|
||||
else
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- de-stagnation (faster flowing)
|
||||
|
@ -382,6 +406,7 @@ register_fluid("bitumen", "mineral_spirits", {
|
|||
colorize = "^[colorize:white:160",
|
||||
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
||||
|
||||
vapor = true,
|
||||
evap_interval = 10,
|
||||
evap_chance = 10,
|
||||
evap_rate = 5,
|
||||
|
@ -394,6 +419,7 @@ register_fluid("bitumen", "gasoline", {
|
|||
colorize = "^[colorize:yellow:160",
|
||||
post_effect_color = {a = 103, r = 30, g = 76, b = 90},
|
||||
|
||||
vapor = true,
|
||||
evap_interval = 20,
|
||||
evap_chance = 10,
|
||||
evap_rate = 5,
|
||||
|
@ -418,6 +444,7 @@ register_fluid("bitumen", "kerosene", {
|
|||
colorize = "^[colorize:white:100",
|
||||
post_effect_color = {a = 103, r = 80, g = 76, b = 190},
|
||||
|
||||
vapor = true,
|
||||
evap_interval = 20,
|
||||
evap_chance = 20,
|
||||
evap_rate = 8,
|
||||
|
|
1
init.lua
1
init.lua
|
@ -90,6 +90,7 @@ dofile(modpath.."/burner.lua")
|
|||
-- next core nodes
|
||||
dofile(modpath.."/fluids.lua")
|
||||
dofile(modpath.."/concrete.lua")
|
||||
dofile(modpath.."/vapors.lua")
|
||||
|
||||
|
||||
-- now the kitchen sink
|
||||
|
|
|
@ -0,0 +1,179 @@
|
|||
|
||||
|
||||
-- more concentrated
|
||||
minetest.register_node("bitumen:vapor_2", {
|
||||
description = "Vapor",
|
||||
drawtype = "airlike",
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
-- post_effect_color = info.post_effect_color,
|
||||
|
||||
-- tiles = { "default_copper_block.png" },
|
||||
groups = { not_in_creative_inventory = 1 },
|
||||
})
|
||||
|
||||
|
||||
-- less concentrated
|
||||
minetest.register_node("bitumen:vapor_1", {
|
||||
description = "Vapor",
|
||||
drawtype = "airlike",
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
-- tiles = { "default_steel_block.png" },
|
||||
groups = { not_in_creative_inventory = 1 },
|
||||
})
|
||||
|
||||
|
||||
--[[ for testing
|
||||
minetest.register_node("bitumen:vapor_gen", {
|
||||
description = "Vapor Generator",
|
||||
tiles = { "default_steel_block.png" },
|
||||
groups = { cracky = 1 },
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"bitumen:vapor_gen"},
|
||||
neighbors = {"air"},
|
||||
interval = 3,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
pos.y = pos.y + 1
|
||||
|
||||
minetest.set_node(pos, {name="bitumen:vapor_2"})
|
||||
end
|
||||
})
|
||||
|
||||
]]
|
||||
|
||||
|
||||
-- move around randomly
|
||||
minetest.register_abm({
|
||||
nodenames = {"bitumen:vapor_2", "bitumen:vapor_1"},
|
||||
neighbors = {"air"},
|
||||
interval = 4,
|
||||
chance = 8,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
|
||||
local name = node.name
|
||||
|
||||
local air_nodes = minetest.find_nodes_in_area(
|
||||
{x=pos.x - 1, y=pos.y - 1, z=pos.z - 1},
|
||||
{x=pos.x + 1, y=pos.y, z=pos.z + 1},
|
||||
"air"
|
||||
)
|
||||
|
||||
-- try to go down first
|
||||
if #air_nodes > 0 and math.random(6) > 1 then
|
||||
local off = math.random(#air_nodes)
|
||||
--print("off "..dump(off).. " - " .. dump(#air_nodes))
|
||||
minetest.set_node(pos, {name="air"})
|
||||
minetest.set_node(air_nodes[off], {name=name})
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- go up if there's no down
|
||||
air_nodes = 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},
|
||||
"air"
|
||||
)
|
||||
|
||||
if #air_nodes > 0 then
|
||||
off = math.random(#air_nodes)
|
||||
|
||||
minetest.set_node(pos, {name="air"})
|
||||
minetest.set_node(air_nodes[off], {name=name})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- diffuse away completely
|
||||
minetest.register_abm({
|
||||
nodenames = {"bitumen:vapor_1"},
|
||||
neighbors = {"air"},
|
||||
interval = 8,
|
||||
chance = 16,
|
||||
action = function(pos, node)
|
||||
local air_nodes = 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},
|
||||
"air"
|
||||
)
|
||||
|
||||
if #air_nodes > 12 then
|
||||
minetest.set_node(pos, {name="air"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- diffuse
|
||||
minetest.register_abm({
|
||||
nodenames = {"bitumen:vapor_2"},
|
||||
neighbors = {"air"},
|
||||
interval = 4,
|
||||
chance = 4,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
|
||||
|
||||
local air_nodes = 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},
|
||||
"air"
|
||||
)
|
||||
|
||||
if #air_nodes > 0 then
|
||||
local off = math.random(#air_nodes)
|
||||
--print("off "..dump(off).. " - " .. dump(#air_nodes))
|
||||
minetest.set_node(pos, {name="bitumen:vapor_1"})
|
||||
minetest.set_node(air_nodes[off], {name="bitumen:vapor_1"})
|
||||
end
|
||||
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- go up in flames
|
||||
minetest.register_abm({
|
||||
nodenames = {"bitumen:vapor_1", "bitumen:vapor_2"},
|
||||
neighbors = {"group:igniter", "default:torch"},
|
||||
interval = 1,
|
||||
chance = 3,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
|
||||
local air_nodes = 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},
|
||||
{"air", "group:flammable"}
|
||||
)
|
||||
|
||||
if #air_nodes > 0 then
|
||||
|
||||
local off = math.random(#air_nodes)
|
||||
local num = math.random(#air_nodes / 2)
|
||||
|
||||
for i = 1,num do
|
||||
--local theirlevel = minetest.get_node_level(fp)
|
||||
local fp = air_nodes[((i + off) % #air_nodes) + 1]
|
||||
|
||||
minetest.set_node(fp, {name="fire:basic_flame"})
|
||||
end
|
||||
end
|
||||
|
||||
minetest.set_node(pos, {name="fire:basic_flame"})
|
||||
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue