diff -r e0cdb6ae88ab -r d5fce8a02092 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Sat Jul 11 02:12:02 2020 +0300 +++ b/hedgewars/uGearsHandlersMess.pas Sat Jul 11 17:35:36 2020 +0300 @@ -7471,10 +7471,36 @@ end end; +procedure doStepSentryWater(Gear: PGear); +begin + if Gear^.Tag < 0 then + begin + CheckGearDrowning(Gear); + exit; + end; + + Gear^.Y := int2hwFloat(cWaterLine - 3 * Gear^.Radius); + if TestCollisionYwithGear(Gear, -1) <> 0 then + begin + Gear^.Tag := -1; + exit; + end; +end; + procedure doStepSentryDeploy(Gear: PGear); begin Gear^.Tag := -1; - if Gear^.dY.isNegative or (TestCollisionYwithGear(Gear, 1) = 0) then + if hwRound(Gear^.Y) + 3 * Gear^.Radius >= cWaterLine then + begin + Gear^.Y := int2hwFloat(cWaterLine - 3 * Gear^.Radius); + if Gear^.Timer > 0 then dec(Gear^.Timer); + if Gear^.Timer = 0 then + begin + Gear^.Tag := 0; + Gear^.doStep := @doStepSentryWater; + end; + end + else if Gear^.dY.isNegative or (TestCollisionYwithGear(Gear, 1) = 0) then doStepFallingGear(Gear) else begin