Consolidate ABMs

Spread ABM intervals evenly across 1 to 16 seconds
16s ensures no nodes are missed when player walks past
Adjust chance values to compensate, for identical action rates
Combine lavacooling ABMs into one, return to chance = 1
Grass growth: add 'neighbors = "air"' to avoid
processing the thousands of underground dirt nodes
Grass death: Reduce action rate to that of grass growth
Fire: Use chance = 1 for flame extinguishing
and flame removal when mod is disabled
This commit is contained in:
paramat 2016-02-13 08:33:58 +00:00
parent 04f01bc57f
commit 7d2dfe4101
6 changed files with 28 additions and 40 deletions

@ -88,37 +88,24 @@ end
-- Lavacooling
--
default.cool_lava_source = function(pos)
minetest.set_node(pos, {name = "default:obsidian"})
minetest.sound_play("default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.25})
end
default.cool_lava_flowing = function(pos)
minetest.set_node(pos, {name = "default:stone"})
default.cool_lava = function(pos, node)
if node.name == "default:lava_source" then
minetest.set_node(pos, {name = "default:obsidian"})
else -- Lava flowing
minetest.set_node(pos, {name = "default:stone"})
end
minetest.sound_play("default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.25})
end
minetest.register_abm({
nodenames = {"default:lava_flowing"},
nodenames = {"default:lava_source", "default:lava_flowing"},
neighbors = {"group:water"},
interval = 1,
chance = 2,
chance = 1,
catch_up = false,
action = function(...)
default.cool_lava_flowing(...)
end,
})
minetest.register_abm({
nodenames = {"default:lava_source"},
neighbors = {"group:water"},
interval = 1,
chance = 2,
catch_up = false,
action = function(...)
default.cool_lava_source(...)
default.cool_lava(...)
end,
})
@ -177,8 +164,8 @@ end
minetest.register_abm({
nodenames = {"default:cactus"},
neighbors = {"group:sand"},
interval = 50,
chance = 20,
interval = 12,
chance = 83,
action = function(...)
default.grow_cactus(...)
end
@ -186,9 +173,9 @@ minetest.register_abm({
minetest.register_abm({
nodenames = {"default:papyrus"},
neighbors = {"default:dirt", "default:dirt_with_grass", "default:sand"},
interval = 50,
chance = 20,
neighbors = {"default:dirt", "default:dirt_with_grass"},
interval = 14,
chance = 71,
action = function(...)
default.grow_papyrus(...)
end
@ -358,8 +345,9 @@ minetest.register_abm({
minetest.register_abm({
nodenames = {"default:dirt"},
interval = 2,
chance = 200,
neighbors = {"air"},
interval = 6,
chance = 67,
catch_up = false,
action = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
@ -384,8 +372,8 @@ minetest.register_abm({
minetest.register_abm({
nodenames = {"default:dirt_with_grass", "default:dirt_with_dry_grass"},
interval = 2,
chance = 20,
interval = 8,
chance = 50,
catch_up = false,
action = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
@ -407,7 +395,7 @@ minetest.register_abm({
minetest.register_abm({
nodenames = {"default:cobble"},
neighbors = {"group:water"},
interval = 17,
interval = 16,
chance = 200,
catch_up = false,
action = function(pos, node)

@ -264,8 +264,8 @@ farming.register_plant = function(name, def)
minetest.register_abm({
nodenames = {"group:" .. pname, "group:seed"},
neighbors = {"group:soil"},
interval = 90,
chance = 2,
interval = 9,
chance = 20,
action = function(pos, node)
local plant_height = minetest.get_item_group(node.name, pname)

@ -170,7 +170,7 @@ minetest.register_abm({
nodenames = {"fire:basic_flame", "fire:permanent_flame"},
neighbors = {"group:puts_out_fire"},
interval = 3,
chance = 2,
chance = 1,
catch_up = false,
action = function(p0, node, _, _)
minetest.remove_node(p0)
@ -189,7 +189,7 @@ if minetest.setting_getbool("disable_fire") then
minetest.register_abm({
nodenames = {"fire:basic_flame"},
interval = 7,
chance = 2,
chance = 1,
catch_up = false,
action = function(p0, node, _, _)
minetest.remove_node(p0)

@ -76,8 +76,8 @@ end
minetest.register_abm({
nodenames = {"group:flora"},
neighbors = {"default:dirt_with_grass", "default:desert_sand"},
interval = 50,
chance = 25,
interval = 13,
chance = 96,
action = function(pos, node)
pos.y = pos.y - 1
local under = minetest.get_node(pos)

@ -233,7 +233,7 @@ end
if replace then
minetest.register_abm({
nodenames = {"group:slabs_replace"},
interval = 8,
interval = 16,
chance = 1,
action = function(pos, node)
node.name = minetest.registered_nodes[node.name].replace_name

@ -376,7 +376,7 @@ minetest.register_node("tnt:gunpowder_burning", {
minetest.register_abm({
nodenames = {"tnt:tnt", "tnt:gunpowder"},
neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"},
interval = 1,
interval = 4,
chance = 1,
action = burn,
})