Implement mob suffocation

This commit is contained in:
Wuzzy 2019-01-31 07:23:35 +01:00
parent c9fb060ea0
commit 139b1000ff
2 changed files with 15 additions and 10 deletions

@ -699,19 +699,24 @@ local do_env_damage = function(self)
if check_for_death(self, "dps", {type = "environment", if check_for_death(self, "dps", {type = "environment",
pos = pos, node = self.standing_in}) then return end pos = pos, node = self.standing_in}) then return end
end end
--[[
--- suffocation inside solid node
if self.suffocation ~= 0
and nodef.walkable == true
and nodef.groups.disable_suffocation ~= 1
and nodef.drawtype == "normal" then
self.health = self.health - self.suffocation --- suffocation inside solid node
-- FIXME: Redundant with mcl_playerplus
if (self.suffocation == true)
and (nodef.walkable == nil or nodef.walkable == true)
and (nodef.collision_box == nil or nodef.collision_box.type == "regular")
and (nodef.node_box == nil or nodef.node_box.type == "regular")
and (nodef.groups.disable_suffocation ~= 1)
and (nodef.groups.opaque == 1) 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 return end pos = pos, node = self.standing_in}) then return end
end end
]]
check_for_death(self, "", {type = "unknown"}) check_for_death(self, "", {type = "unknown"})
end end
@ -2995,7 +3000,7 @@ minetest.register_entity(name, {
sunlight_damage = def.sunlight_damage or 0, sunlight_damage = def.sunlight_damage or 0,
water_damage = def.water_damage or 0, water_damage = def.water_damage or 0,
lava_damage = def.lava_damage or 0, lava_damage = def.lava_damage or 0,
suffocation = def.suffocation or 2, suffocation = def.suffocation or true,
fall_damage = def.fall_damage or 1, fall_damage = def.fall_damage or 1,
fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10) fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10)
drops = def.drops or {}, drops = def.drops or {},

@ -61,7 +61,7 @@ functions needed for the mob to work properly which contains the following:
in lava or fire. in lava or fire.
'light_damage' holds the damage per second inflicted to mobs when it's too 'light_damage' holds the damage per second inflicted to mobs when it's too
bright (above 13 light). bright (above 13 light).
'suffocation' when true causes mobs to suffocate inside solid blocks. 'suffocation' when true causes mobs to suffocate inside solid blocks (2 damage per second).
'floats' when set to 1 mob will float in water, 0 has them sink. 'floats' when set to 1 mob will float in water, 0 has them sink.
'follow' mobs follow player when holding any of the items which appear 'follow' mobs follow player when holding any of the items which appear
on this table, the same items can be fed to a mob to tame or on this table, the same items can be fed to a mob to tame or