# HG changeset patch # User sheepluva # Date 1418769686 -3600 # Node ID d403fd2f9a6fda5096135bafc9e6f53ef5245367 # Parent 4a4a82686e91ec58586816aaf001b0d149b96c17# Parent 31a0e7efa17aef33ab2d64770925521bb1f4ec0d merge'n'magic diff -r 4a4a82686e91 -r d403fd2f9a6f hedgewars/uGearsHandlersRope.pas --- a/hedgewars/uGearsHandlersRope.pas Tue Dec 16 22:30:17 2014 +0100 +++ b/hedgewars/uGearsHandlersRope.pas Tue Dec 16 23:41:26 2014 +0100 @@ -28,12 +28,22 @@ uses uConsts, uFloat, uCollisions, uVariables, uGearsList, uSound, uGearsUtils, uAmmos, uDebug, uUtils, uGearsHedgehog, uGearsRender; +const + IsNilHHFatal = true; + procedure doStepRopeAfterAttack(Gear: PGear); var HHGear: PGear; tX: hwFloat; begin HHGear := Gear^.Hedgehog^.Gear; + if HHGear = nil then + begin + OutError('ERROR: doStepRopeAfterAttack called while HHGear = nil', IsNilHHFatal); + DeleteGear(Gear); + exit() + end; + tX:= HHGear^.X; if WorldWrap(HHGear) and (WorldEdge = weWrap) and ((TestCollisionXwithGear(HHGear, 1) <> 0) or (TestCollisionXwithGear(HHGear, -1) <> 0)) then @@ -122,6 +132,12 @@ wrongSide: boolean; begin 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 @@ -414,6 +430,13 @@ Gear^.Elasticity := Gear^.Elasticity + _1; HHGear := Gear^.Hedgehog^.Gear; + if HHGear = nil then + begin + OutError('ERROR: doStepRopeAttach called while HHGear = nil', IsNilHHFatal); + DeleteGear(Gear); + exit() + end; + DeleteCI(HHGear); if (HHGear^.State and gstMoving) <> 0 then diff -r 4a4a82686e91 -r d403fd2f9a6f hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Tue Dec 16 22:30:17 2014 +0100 +++ b/hedgewars/uGearsRender.pas Tue Dec 16 23:41:26 2014 +0100 @@ -168,6 +168,7 @@ procedure DrawRope(Gear: PGear); var roplen, i: LongInt; begin + if Gear^.Hedgehog^.Gear = nil then exit; if (cReducedQuality and rqSimpleRope) <> 0 then DrawRopeLinesRQ(Gear) else @@ -1204,9 +1205,12 @@ gtAirBomb: DrawSpriteRotated(sprAirBomb, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtTeleport: begin HHGear:= Gear^.Hedgehog^.Gear; - if ((Gear^.State and gstAnimation) <> 0) then - DrawSpriteRotatedF(sprTeleport, x + 1, y - 3, Gear^.Pos, hwSign(Gear^.dX), 0); - DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0); + if HHGear <> nil then + begin + if ((Gear^.State and gstAnimation) <> 0) then + DrawSpriteRotatedF(sprTeleport, x + 1, y - 3, Gear^.Pos, hwSign(Gear^.dX), 0); + DrawSpriteRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0) + end end; gtSwitcher: DrawSprite(sprSwitch, x - 16, y - 56, (GameTicks shr 6) mod 12); gtTarget: begin