Skip to content

Commit

Permalink
Consolidate ABMs
Browse files Browse the repository at this point in the history
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
  • Loading branch information
paramat committed Feb 14, 2016
1 parent 04f01bc commit 7d2dfe4
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 40 deletions.
52 changes: 20 additions & 32 deletions mods/default/functions.lua
Expand Up @@ -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"},
neighbors = {"group:water"},
interval = 1,
chance = 2,
catch_up = false,
action = function(...)
default.cool_lava_flowing(...)
end,
})

minetest.register_abm({
nodenames = {"default:lava_source"},
nodenames = {"default:lava_source", "default:lava_flowing"},
neighbors = {"group:water"},
interval = 1,
chance = 2,
chance = 1,
catch_up = false,

This comment has been minimized.

Copy link
@HybridDog

HybridDog Feb 14, 2016

Contributor

@paramat, catch_up = false, does nothing because chance and interval are 1, so the line can be removed, can't it?

This comment has been minimized.

Copy link
@paramat

paramat Feb 18, 2016

Author Contributor

Correct, but it's best to keep it there because it stops the 'catch up' calculation code from running, making the ABM slightly faster.

This comment has been minimized.

Copy link
@HybridDog

HybridDog Feb 18, 2016

Contributor

It would be better to disable catch_up automatically if chance and interval are 1.

action = function(...)
default.cool_lava_source(...)
default.cool_lava(...)
end,
})

Expand Down Expand Up @@ -177,18 +164,18 @@ end
minetest.register_abm({
nodenames = {"default:cactus"},
neighbors = {"group:sand"},
interval = 50,
chance = 20,
interval = 12,
chance = 83,
action = function(...)
default.grow_cactus(...)
end
})

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
Expand Down Expand Up @@ -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}
Expand All @@ -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}
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions mods/farming/api.lua
Expand Up @@ -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)

Expand Down
4 changes: 2 additions & 2 deletions mods/fire/init.lua
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions mods/flowers/init.lua
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion mods/stairs/init.lua
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion mods/tnt/init.lua
Expand Up @@ -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,
})
Expand Down

0 comments on commit 7d2dfe4

Please sign in to comment.