# HG changeset patch # User sheepluva # Date 1418769686 -3600 # Node ID d403fd2f9a6fda5096135bafc9e6f53ef5245367 # Parent 4a4a82686e91ec58586816aaf001b0d149b96c17# Parent 31a0e7efa17aef33ab2d64770925521bb1f4ec0d merge'n'magic diff -r 31a0e7efa17a -r d403fd2f9a6f hedgewars/uGearsHandlersRope.pas --- a/hedgewars/uGearsHandlersRope.pas Tue Dec 16 14:32:53 2014 -0500 +++ b/hedgewars/uGearsHandlersRope.pas Tue Dec 16 23:41:26 2014 +0100 @@ -28,6 +28,9 @@ uses uConsts, uFloat, uCollisions, uVariables, uGearsList, uSound, uGearsUtils, uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender; +const + IsNilHHFatal = true; + procedure doStepRopeAfterAttack(Gear: PGear); var HHGear: PGear; @@ -36,6 +39,7 @@ HHGear := Gear^.Hedgehog^.Gear; if HHGear = nil then begin + OutError('ERROR: doStepRopeAfterAttack called while HHGear = nil', IsNilHHFatal); DeleteGear(Gear); exit() end; @@ -127,15 +131,24 @@ haveDivided: boolean; wrongSide: boolean; begin - if GameTicks mod 4 <> 0 then exit; - HHGear := Gear^.Hedgehog^.Gear; if HHGear = nil then begin + OutError('ERROR: doStepRopeWork called while HHGear = nil', IsNilHHFatal); DeleteGear(Gear); exit() end; + if ((HHGear^.State and gstHHDriven) = 0) or + (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then + begin + PlaySound(sndRopeRelease); + RopeDeleteMe(Gear, HHGear); + exit + end; + + if GameTicks mod 4 <> 0 then exit; + tX:= HHGear^.X; if WorldWrap(HHGear) and (WorldEdge = weWrap) and ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then @@ -148,14 +161,6 @@ end; tX:= HHGear^.X; - if ((HHGear^.State and gstHHDriven) = 0) or - (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then - begin - PlaySound(sndRopeRelease); - RopeDeleteMe(Gear, HHGear); - exit - end; - HHGear^.dX.QWordValue:= HHGear^.dX.QWordValue shl 2; HHGear^.dY.QWordValue:= HHGear^.dY.QWordValue shl 2; if (Gear^.Message and gmLeft <> 0) and (TestCollisionXwithGear(HHGear, -1) = 0) then @@ -427,6 +432,7 @@ HHGear := Gear^.Hedgehog^.Gear; if HHGear = nil then begin + OutError('ERROR: doStepRopeAttach called while HHGear = nil', IsNilHHFatal); DeleteGear(Gear); exit() end;