Add a delay before mobs start to suffocate
This commit is contained in:
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,
|
||||||
|
|
Loading…
Reference in New Issue