Fix mobs getting stuck in water, fix mobs falling off cliffs, and lower spider speed so cliff_danger check is properly applied.

This commit is contained in:
MysticTempest 2020-07-24 21:15:40 -05:00
parent bf38131520
commit 56958ab0c9
2 changed files with 26 additions and 11 deletions

View file

@ -298,11 +298,6 @@ end
-- Returns true is node can deal damage to self -- Returns true is node can deal damage to self
local is_node_dangerous = function(self, nodename) local is_node_dangerous = function(self, nodename)
local nn = nodename local nn = nodename
if self.water_damage > 0 then
if minetest.get_item_group(nn, "water") ~= 0 then
return true
end
end
if self.lava_damage > 0 then if self.lava_damage > 0 then
if minetest.get_item_group(nn, "lava") ~= 0 then if minetest.get_item_group(nn, "lava") ~= 0 then
return true return true
@ -313,6 +308,21 @@ local is_node_dangerous = function(self, nodename)
return true return true
end end
end end
if minetest.registered_nodes[nn].damage_per_second > 0 then
return true
end
return false
end
-- Returns true if node is a water hazard
local is_node_waterhazard = function(self, nodename)
local nn = nodename
if self.water_damage > 0 then
if minetest.get_item_group(nn, "water") ~= 0 then
return true
end
end
if minetest.registered_nodes[nn].drowning > 0 then if minetest.registered_nodes[nn].drowning > 0 then
if self.breath_max ~= -1 then if self.breath_max ~= -1 then
-- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case
@ -322,9 +332,6 @@ local is_node_dangerous = function(self, nodename)
end end
end end
end end
if minetest.registered_nodes[nn].damage_per_second > 0 then
return true
end
return false return false
end end
@ -2049,7 +2056,7 @@ local do_states = function(self, dtime)
if flight_check(self) then if flight_check(self) then
is_in_danger = is_node_dangerous(self, self.standing_in) is_in_danger = is_node_dangerous(self, self.standing_in)
elseif (is_node_dangerous(self, self.standing_in) or elseif (is_node_dangerous(self, self.standing_in) or
is_node_dangerous(self, self.standing_on)) then is_node_dangerous(self, self.standing_on)) or (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then
is_in_danger = true is_in_danger = true
end end
@ -3221,6 +3228,12 @@ local mob_step = function(self, dtime)
runaway_from(self) runaway_from(self)
if is_at_cliff_or_danger(self) then
set_velocity(self, 0)
self.state = "stand"
set_animation(self, "stand")
end
end end

View file

@ -37,7 +37,8 @@ local spider = {
-- TODO: sounds: walk, death -- TODO: sounds: walk, death
distance = 16, distance = 16,
}, },
walk_velocity = 3.9, walk_velocity = 1.3,
run_velocity = 2.8,
jump = true, jump = true,
jump_height = 4, jump_height = 4,
view_range = 16, view_range = 16,
@ -72,7 +73,8 @@ cave_spider.hp_min = 1
cave_spider.hp_max = 12 cave_spider.hp_max = 12
cave_spider.collisionbox = {-0.35, -0.01, -0.35, 0.35, 0.49, 0.35} cave_spider.collisionbox = {-0.35, -0.01, -0.35, 0.35, 0.49, 0.35}
cave_spider.visual_size = {x=1.66666, y=1.5} cave_spider.visual_size = {x=1.66666, y=1.5}
cave_spider.walk_velocity = 4.1 cave_spider.walk_velocity = 1.3
cave_spider.run_velocity = 3.2
mobs:register_mob("mobs_mc:cave_spider", cave_spider) mobs:register_mob("mobs_mc:cave_spider", cave_spider)