# HG changeset patch # User Wuzzy # Date 1509159201 -7200 # Node ID 28782e03b8f08ea0b44789fc0cd92101830f63ff # Parent 8aa82e350b8e19c82d2bdba1e7a63ceaa9953952 Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge diff -r 8aa82e350b8e -r 28782e03b8f0 ChangeLog.txt --- a/ChangeLog.txt Fri Oct 27 19:54:27 2017 +0200 +++ b/ChangeLog.txt Sat Oct 28 04:53:21 2017 +0200 @@ -45,7 +45,7 @@ * Fixed air strikes drops being off-center * Fixed hedgehogs getting hurt while firing deagle / sniper rifle bullet in certain situations * Fixed bee, mine, sticky mine, air mine, seduction, resurrector not working correctly across wrap world edge - * Fixed teleportation being able to teleport in land if you clicked across the wrap world edge + * Fixed teleportation being able to teleport in land if you clicked across the wrap or bounce world edge * Fixed turn not ending when sticky mine was trapped on rubberband * Rope is now destroyed when attempting to shoot it through wrap or bouncy world edge * Fixed possible to move rope angle below 0° while having secondary weapon selected diff -r 8aa82e350b8e -r 28782e03b8f0 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Fri Oct 27 19:54:27 2017 +0200 +++ b/hedgewars/uGearsHandlersMess.pas Sat Oct 28 04:53:21 2017 +0200 @@ -2872,7 +2872,8 @@ valid:= false; lx:= Gear^.Target.X - SpritesData[sprHHTelepMask].Width div 2; // left - lx:= CalcWorldWrap(lx, SpritesData[sprHHTelepMask].Width); // Take world edge into account + if WorldEdge <> weBounce then + lx:= CalcWorldWrap(lx, SpritesData[sprHHTelepMask].Width div 2); // Take world edge into account ty:= Gear^.Target.Y - SpritesData[sprHHTelepMask].Height div 2; // top // remember original target location @@ -2888,6 +2889,9 @@ dec(Gear^.Target.Y); end; + if (WorldEdge = weBounce) and ((Gear^.Target.X < LeftX) or (Gear^.Target.X > RightX)) then + valid:= false; + if not valid then begin HHGear^.Message := HHGear^.Message and (not gmAttack); diff -r 8aa82e350b8e -r 28782e03b8f0 hedgewars/uIO.pas --- a/hedgewars/uIO.pas Fri Oct 27 19:54:27 2017 +0200 +++ b/hedgewars/uIO.pas Sat Oct 28 04:53:21 2017 +0200 @@ -491,7 +491,8 @@ TargetPoint.X:= CursorPoint.X - WorldDx; TargetPoint.Y:= cScreenHeight - CursorPoint.Y - WorldDy; end; - TargetPoint.X:= CalcWorldWrap(TargetPoint.X, 0); + if (WorldEdge <> weBounce) then + TargetPoint.X:= CalcWorldWrap(TargetPoint.X, 0); SendIPCXY('p', TargetPoint.X, TargetPoint.Y); end else diff -r 8aa82e350b8e -r 28782e03b8f0 hedgewars/uUtils.pas --- a/hedgewars/uUtils.pas Fri Oct 27 19:54:27 2017 +0200 +++ b/hedgewars/uUtils.pas Sat Oct 28 04:53:21 2017 +0200 @@ -600,15 +600,19 @@ function CalcWorldWrap(X, radius: LongInt): LongInt; begin if WorldEdge = weWrap then - if X < LongInt(leftX) then - X:= X + (LongInt(rightX) - LongInt(leftX)) - else if X > LongInt(rightX) then - X:= X - (LongInt(rightX) - LongInt(leftX)) + begin + if X < leftX then + X:= X + (rightX - leftX) + else if X > rightX then + X:= X - (rightX - leftX); + end else if WorldEdge = weBounce then - if X - radius < LongInt(leftX) then - X:= LongInt(leftX) + radius - else if X + radius > LongInt(rightX) then - X:= LongInt(rightX) - radius; + begin + if (X + radius) < leftX then + X:= leftX + radius + else if (X - radius) > rightX then + X:= rightX - radius; + end; CalcWorldWrap:= X; end;