diff -r 13f68f3e7153 -r f1b6070a6e14 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Mon Aug 06 15:56:03 2018 +0200 +++ b/hedgewars/uGearsHandlersMess.pas Mon Aug 06 18:55:22 2018 +0200 @@ -325,11 +325,20 @@ tX:= Gear^.X; gX:= hwRound(Gear^.X); gY:= hwRound(Gear^.Y); - if (Gear^.Kind <> gtGenericFaller) and WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.AdvBounce <> 0) and + Gear^.State := Gear^.State and (not gstCollision); + + // World wrap + if (Gear^.Kind <> gtGenericFaller) and WorldWrap(Gear) and (WorldEdge = weWrap) and ((TestCollisionXwithGear(Gear, 1) <> 0) or (TestCollisionXwithGear(Gear, -1) <> 0)) then begin - Gear^.X:= tX; - Gear^.dX.isNegative:= (gX > LongInt(leftX) + Gear^.Radius*2) + // Collision with land that *just* behind the other side of the world wrap edge + if (not Gear^.Sticky) then + begin + Gear^.X:= tX; + Gear^.dX.isNegative:= (gX > LongInt(leftX) + Gear^.Radius*2); + Gear^.dX := Gear^.dX * Gear^.Friction; + end; + Gear^.State := Gear^.State or gstCollision; end; // clip velocity at 2 - over 1 per pixel, but really shouldn't cause many actual problems. @@ -344,7 +353,6 @@ Gear^.dY:= Gear^.dY * _0_999 end; - Gear^.State := Gear^.State and (not gstCollision); collV := 0; collH := 0; tdX := Gear^.dX;