Add a delay before mobs start to suffocate

This commit is contained in:
Wuzzy 2020-05-13 22:15:46 +02:00
parent a20637f68c
commit 547080bd98

@ -929,14 +929,25 @@ local do_env_damage = function(self)
and (nodef.groups.disable_suffocation ~= 1) and (nodef.groups.disable_suffocation ~= 1)
and (nodef.groups.opaque == 1) then and (nodef.groups.opaque == 1) then
-- 2 damage per second -- Short grace period before starting to take suffocation damage.
-- TODO: Deal this damage once every 1/2 second -- This is different from players, who take damage instantly.
self.health = self.health - 2 -- This has been done because mobs might briefly be inside solid nodes
-- when e.g. climbing up stairs.
-- This is a bit hacky because it assumes that do_env_damage
-- is called roughly every second only.
self.suffocation_timer = self.suffocation_timer + 1
if self.suffocation_timer >= 3 then
-- 2 damage per second
-- TODO: Deal this damage once every 1/2 second
self.health = self.health - 2
if check_for_death(self, "suffocation", {type = "environment", if check_for_death(self, "suffocation", {type = "environment",
pos = pos, node = self.standing_in}) then pos = pos, node = self.standing_in}) then
return true return true
end
end end
else
self.suffocation_timer = 0
end end
return check_for_death(self, "", {type = "unknown"}) return check_for_death(self, "", {type = "unknown"})
@ -3345,7 +3356,7 @@ minetest.register_entity(name, {
replace_offset = def.replace_offset or 0, replace_offset = def.replace_offset or 0,
on_replace = def.on_replace, on_replace = def.on_replace,
timer = 0, timer = 0,
env_damage_timer = 0, -- only used when state = "attack" env_damage_timer = 0,
tamed = false, tamed = false,
pause_timer = 0, pause_timer = 0,
horny = false, horny = false,
@ -3392,6 +3403,7 @@ minetest.register_entity(name, {
shoot_arrow = def.shoot_arrow, shoot_arrow = def.shoot_arrow,
sounds_child = def.sounds_child, sounds_child = def.sounds_child,
explosion_strength = def.explosion_strength, explosion_strength = def.explosion_strength,
suffocation_timer = 0,
-- End of MCL2 extensions -- End of MCL2 extensions
on_spawn = def.on_spawn, on_spawn = def.on_spawn,