# 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