init; updated fire-handling for use in newer luanti-versions
This commit is contained in:
commit
f389357776
34 changed files with 914 additions and 0 deletions
239
abms.lua
Normal file
239
abms.lua
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- DRIFTING SMOKE
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
-- WHITE, BOTTOM SMOKE
|
||||
-- Closest to fire, hotter, faster, more dense
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_d",
|
||||
},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z}, 2)
|
||||
then
|
||||
local white_or_grey = math.random(2)
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = {x=pos.x-0.1, y=pos.y+0.5, z=pos.z-0.3},
|
||||
maxpos = {x=pos.x+0.1, y=pos.y+1.0, z=pos.z+0.1},
|
||||
minvel = {x=-0.1, y=0.3, z=-0.3},
|
||||
maxvel = {x=0.1, y=0.6, z=-0.5},
|
||||
minacc = {x=0.0,y=0.3,z=-0.3},
|
||||
maxacc = {x=0.0,y=0.6,z=-0.5},
|
||||
minexptime = 1,
|
||||
maxexptime = 3,
|
||||
minsize = 8,
|
||||
maxsize = 12,
|
||||
collisiondetection = true,
|
||||
texture = "smoke_"..white_or_grey..".png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- GREY, MIDDLE SMOKE
|
||||
-- Cooler, slower, not as dense.
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_d",
|
||||
},
|
||||
-- The white and black smoke interval/chance are 1/2.
|
||||
-- Grey smoke is in the middle and has to be there to connect the two.
|
||||
-- So it's interval/chance is 1/1.
|
||||
-- ~ LazyJ, 2014_07_28
|
||||
interval = 1,
|
||||
chance = 2,
|
||||
action = function(pos, node)
|
||||
local mgrey_or_dgrey = math.random(2)
|
||||
-- The nodes.lua file does a space check for this area to determine whether
|
||||
-- to use drifting smoke or non-drifting smoke. That *would* be enough *if*
|
||||
-- nothing is built in this area *after* the smoke has been set in motion.
|
||||
-- So I added an extra space check here just for that possibility.
|
||||
-- ~ LazyJ, 2014_07_31
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-1}, 3)
|
||||
then
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = {x=pos.x-0.2, y=pos.y+0.5, z=pos.z-1.0},
|
||||
maxpos = {x=pos.x+0.2, y=pos.y+1.0, z=pos.z-0.5},
|
||||
minvel = {x=-0.1, y=0.3, z=-0.3},
|
||||
maxvel = {x=0.1, y=0.6, z=-0.5},
|
||||
minacc = {x=0.0,y=0.3,z=-0.3},
|
||||
maxacc = {x=0.0,y=0.6,z=-0.5},
|
||||
minexptime = 1,
|
||||
maxexptime = 6,
|
||||
minsize = 6,
|
||||
maxsize = 11,
|
||||
collisiondetection = true,
|
||||
texture = "smoke2_"..mgrey_or_dgrey..".png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- BLACK, TOP SMOKE
|
||||
-- Farthest from the fire, coolest, slowest, more spread out.
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_d",
|
||||
},
|
||||
interval = 1,
|
||||
chance = 4,
|
||||
action = function(pos, node)
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-1}, 7) and
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-2}, 7) and
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-3}, 7) and
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-4}, 7) and
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z-5}, 7)
|
||||
then
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = {x=pos.x-0.4, y=pos.y+0.5, z=pos.z-0.4},
|
||||
maxpos = {x=pos.x+0.4, y=pos.y+1.0, z=pos.z+0.4},
|
||||
minvel = {x=-0.1, y=0.3, z=-0.3},
|
||||
maxvel = {x=0.1, y=0.6, z=-0.5},
|
||||
minacc = {x=0.0,y=0.3,z=-0.3},
|
||||
maxacc = {x=0.0,y=0.6,z=-0.5},
|
||||
minexptime = 2,
|
||||
maxexptime = 4,
|
||||
minsize = 6,
|
||||
maxsize = 10,
|
||||
collisiondetection = true,
|
||||
texture = "black_smoke.png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- NON-DRIFTING SMOKE
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
-- WHITE, BOTTOM SMOKE
|
||||
-- Closest to fire, hotter, faster, more dense
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_v",
|
||||
},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z}, 2)
|
||||
then
|
||||
local white_or_grey = math.random(2)
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = {x=pos.x, y=pos.y+0.2, z=pos.z},
|
||||
maxpos = {x=pos.x, y=pos.y+1.5, z=pos.z},
|
||||
minvel = {x=0.0, y=0.1, z=0.0},
|
||||
maxvel = {x=0.0, y=0.6, z=0.0},
|
||||
minacc = {x=0.0,y=0.1,z=0.0},
|
||||
maxacc = {x=0.0,y=0.6,z=0.0},
|
||||
minexptime = 1.0,
|
||||
maxexptime = 3.0,
|
||||
minsize = 7,
|
||||
-- a maxsize larger than 10 and the biggest smoke particle gets stuck
|
||||
-- in a 1x1 chimney flue. ~ LazyJ, 2014_07_30
|
||||
maxsize = 10,
|
||||
collisiondetection = true,
|
||||
texture = "smoke_"..white_or_grey..".png"
|
||||
--texture = "top_03.png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- GREY, MIDDLE SMOKE
|
||||
-- Cooler, slower, not as dense.
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_v",
|
||||
},
|
||||
-- The white and black smoke interval/chance are 1/2.
|
||||
-- Grey smoke is in the middle and has to be there to connect the two.
|
||||
-- So it's interval/chance is 1/1.
|
||||
-- ~ LazyJ, 2014_07_28
|
||||
interval = 1,
|
||||
chance = 3,
|
||||
action = function(pos, node)
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z}, 5)
|
||||
then
|
||||
local mgrey_or_dgrey = math.random(2)
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 8,
|
||||
minpos = {x=pos.x, y=pos.y+0.2, z=pos.z},
|
||||
maxpos = {x=pos.x, y=pos.y+1.5, z=pos.z},
|
||||
minvel = {x=0.0, y=0.4, z=0.0},
|
||||
maxvel = {x=0.0, y=1.0, z=0.0},
|
||||
minacc = {x=0.0,y=0.4,z=0.0},
|
||||
maxacc = {x=0.0,y=1.0,z=0.0},
|
||||
minexptime = 3,
|
||||
maxexptime = 7,
|
||||
minsize = 6,
|
||||
-- a maxsize larger than 10 and the biggest smoke particle gets stuck
|
||||
-- in a 1x1 chimney flue. ~ LazyJ, 2014_07_30
|
||||
maxsize = 9,
|
||||
collisiondetection = true,
|
||||
texture = "smoke2_"..mgrey_or_dgrey..".png"
|
||||
-- texture = "top_02.png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
-- BLACK, TOP SMOKE
|
||||
-- Farthest from the fire, coolest, slowest, more spread out.
|
||||
minetest.register_abm({
|
||||
nodenames = {
|
||||
"group:smoky_v",
|
||||
},
|
||||
interval = 1,
|
||||
chance = 4,
|
||||
action = function(pos, node)
|
||||
if
|
||||
fake_fire.check_for_air({x=pos.x, y=pos.y+1, z=pos.z}, 7)
|
||||
then
|
||||
minetest.add_particlespawner({
|
||||
amount = 1,
|
||||
time = 1,
|
||||
minpos = {x=pos.x, y=pos.y+0.2, z=pos.z},
|
||||
maxpos = {x=pos.x, y=pos.y+1.5, z=pos.z},
|
||||
minvel = {x=0.0, y=0.9, z=0.0},
|
||||
maxvel = {x=0.0, y=1.5, z=0.0},
|
||||
minacc = {x=0.0,y=1.5,z=0.0},
|
||||
maxacc = {x=0.0,y=0.9,z=0.0},
|
||||
minexptime = 1,
|
||||
maxexptime = 5,
|
||||
minsize = 4,
|
||||
maxsize = 7,
|
||||
collisiondetection = true,
|
||||
texture = "black_smoke.png"
|
||||
--texture = "top_01.png"
|
||||
})
|
||||
end
|
||||
end
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue