hedgewars/uGears.pas
changeset 2948 3f21a9dc93d0
parent 2947 803b277e4894
child 2955 fb361d137524
--- a/hedgewars/uGears.pas	Sat Mar 06 10:54:24 2010 +0000
+++ b/hedgewars/uGears.pas	Sat Mar 06 10:59:20 2010 +0000
@@ -24,41 +24,41 @@
 
     
 type
-	PGear = ^TGear;
-	TGearStepProcedure = procedure (Gear: PGear);
-	TGear = record
-			NextGear, PrevGear: PGear;
-			Active: Boolean;
-			Invulnerable: Boolean;
-			RenderTimer: Boolean;
-			Ammo : PAmmo;
-			State : Longword;
-			X : hwFloat;
-			Y : hwFloat;
-			dX: hwFloat;
-			dY: hwFloat;
-			Kind: TGearType;
-			Pos: Longword;
-			doStep: TGearStepProcedure;
-			Radius: LongInt;
-			Angle, Power : Longword;
-			DirAngle: real;
-			Timer : LongWord;
-			Elasticity: hwFloat;
-			Friction  : hwFloat;
-			Message, MsgParam : Longword;
-			Hedgehog: pointer;
-			Health, Damage, Karma: LongInt;
-			CollisionIndex: LongInt;
-			Tag: LongInt;
-			Tex: PTexture;
-			Z: Longword;
-			IntersectGear: PGear;
-			TriggerId: Longword;
-			FlightTime: Longword;
-			uid: Longword;
-			SoundChannel: LongInt
-		end;
+    PGear = ^TGear;
+    TGearStepProcedure = procedure (Gear: PGear);
+    TGear = record
+            NextGear, PrevGear: PGear;
+            Active: Boolean;
+            Invulnerable: Boolean;
+            RenderTimer: Boolean;
+            Ammo : PAmmo;
+            State : Longword;
+            X : hwFloat;
+            Y : hwFloat;
+            dX: hwFloat;
+            dY: hwFloat;
+            Kind: TGearType;
+            Pos: Longword;
+            doStep: TGearStepProcedure;
+            Radius: LongInt;
+            Angle, Power : Longword;
+            DirAngle: real;
+            Timer : LongWord;
+            Elasticity: hwFloat;
+            Friction  : hwFloat;
+            Message, MsgParam : Longword;
+            Hedgehog: pointer;
+            Health, Damage, Karma: LongInt;
+            CollisionIndex: LongInt;
+            Tag: LongInt;
+            Tex: PTexture;
+            Z: Longword;
+            IntersectGear: PGear;
+            TriggerId: Longword;
+            FlightTime: Longword;
+            uid: Longword;
+            SoundChannel: LongInt
+        end;
 
 var AllInactive: boolean;
     PrvInactive: boolean;
@@ -94,11 +94,11 @@
 
 implementation
 uses uWorld, uMisc, uStore, uConsole, uSound, uTeams, uRandom, uCollisions, uLand, uIO, uLandGraphics,
-	uAIMisc, uLocale, uAI, uAmmos, uTriggers, uStats, uVisualGears, uScript, 
+    uAIMisc, uLocale, uAI, uAmmos, uTriggers, uStats, uVisualGears, uScript, 
 {$IFDEF GLES11}
-	gles11;
+    gles11;
 {$ELSE}
-	GL;
+    GL;
 {$ENDIF}
 
 const MAXROPEPOINTS = 384;
@@ -133,89 +133,89 @@
 {$INCLUDE "HHHandlers.inc"}
 
 const doStepHandlers: array[TGearType] of TGearStepProcedure = (
-			@doStepBomb,
-			@doStepHedgehog,
-			@doStepGrenade,
-			@doStepHealthTag,
-			@doStepGrave,
-			@doStepUFO,
-			@doStepShotgunShot,
-			@doStepPickHammer,
-			@doStepRope,
-			@doStepSmokeTrace,
-			@doStepExplosion,
-			@doStepMine,
-			@doStepCase,
-			@doStepDEagleShot,
-			@doStepDynamite,
-			@doStepBomb,
-			@doStepCluster,
-			@doStepShover,
-			@doStepFlame,
-			@doStepFirePunch,
-			@doStepActionTimer,
-			@doStepActionTimer,
-			@doStepActionTimer,
-			@doStepParachute,
-			@doStepAirAttack,
-			@doStepAirBomb,
-			@doStepBlowTorch,
-			@doStepGirder,
-			@doStepTeleport,
-			@doStepSwitcher,
-			@doStepTarget,
-			@doStepMortar,
-			@doStepWhip,
-			@doStepKamikaze,
-			@doStepCake,
-			@doStepSeduction,
-			@doStepWatermelon,
-			@doStepCluster,
-			@doStepBomb,
-			@doStepSmokeTrace,
-			@doStepWaterUp,
-			@doStepDrill,
-			@doStepBallgun,
-			@doStepBomb,
-			@doStepRCPlane,
-			@doStepSniperRifleShot,
-			@doStepJetpack,
-			@doStepMolotov,
-			@doStepCase
-			);
+            @doStepBomb,
+            @doStepHedgehog,
+            @doStepGrenade,
+            @doStepHealthTag,
+            @doStepGrave,
+            @doStepUFO,
+            @doStepShotgunShot,
+            @doStepPickHammer,
+            @doStepRope,
+            @doStepSmokeTrace,
+            @doStepExplosion,
+            @doStepMine,
+            @doStepCase,
+            @doStepDEagleShot,
+            @doStepDynamite,
+            @doStepBomb,
+            @doStepCluster,
+            @doStepShover,
+            @doStepFlame,
+            @doStepFirePunch,
+            @doStepActionTimer,
+            @doStepActionTimer,
+            @doStepActionTimer,
+            @doStepParachute,
+            @doStepAirAttack,
+            @doStepAirBomb,
+            @doStepBlowTorch,
+            @doStepGirder,
+            @doStepTeleport,
+            @doStepSwitcher,
+            @doStepTarget,
+            @doStepMortar,
+            @doStepWhip,
+            @doStepKamikaze,
+            @doStepCake,
+            @doStepSeduction,
+            @doStepWatermelon,
+            @doStepCluster,
+            @doStepBomb,
+            @doStepSmokeTrace,
+            @doStepWaterUp,
+            @doStepDrill,
+            @doStepBallgun,
+            @doStepBomb,
+            @doStepRCPlane,
+            @doStepSniperRifleShot,
+            @doStepJetpack,
+            @doStepMolotov,
+            @doStepCase
+            );
 
 procedure InsertGearToList(Gear: PGear);
 var tmp, ptmp: PGear;
 begin
 if GearsList = nil then
-	GearsList:= Gear
-	else begin
-	tmp:= GearsList;
-	ptmp:= GearsList;
-	while (tmp <> nil) and (tmp^.Z <= Gear^.Z) do
-		begin
-		ptmp:= tmp;
-		tmp:= tmp^.NextGear
-		end;
+    GearsList:= Gear
+    else begin
+    tmp:= GearsList;
+    ptmp:= GearsList;
+    while (tmp <> nil) and (tmp^.Z <= Gear^.Z) do
+        begin
+        ptmp:= tmp;
+        tmp:= tmp^.NextGear
+        end;
 
-	if ptmp <> nil then
-		begin
-		Gear^.NextGear:= ptmp^.NextGear;
-		Gear^.PrevGear:= ptmp;
-		if ptmp^.NextGear <> nil then ptmp^.NextGear^.PrevGear:= Gear;
-		ptmp^.NextGear:= Gear
-		end
-	else GearsList:= Gear
-	end
+    if ptmp <> nil then
+        begin
+        Gear^.NextGear:= ptmp^.NextGear;
+        Gear^.PrevGear:= ptmp;
+        if ptmp^.NextGear <> nil then ptmp^.NextGear^.PrevGear:= Gear;
+        ptmp^.NextGear:= Gear
+        end
+    else GearsList:= Gear
+    end
 end;
 
 procedure RemoveGearFromList(Gear: PGear);
 begin
 if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
 if Gear^.PrevGear <> nil then
-	Gear^.PrevGear^.NextGear:= Gear^.NextGear
+    Gear^.PrevGear^.NextGear:= Gear^.NextGear
 else
-	GearsList:= Gear^.NextGear
+    GearsList:= Gear^.NextGear
 end;
 
 function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
@@ -245,10 +245,10 @@
 gear^.SoundChannel:= -1;
 
 if CurrentTeam <> nil then
-	begin
-	gear^.Hedgehog:= CurrentHedgehog;
-	gear^.IntersectGear:= CurrentHedgehog^.Gear
-	end;
+    begin
+    gear^.Hedgehog:= CurrentHedgehog;
+    gear^.IntersectGear:= CurrentHedgehog^.Gear
+    end;
 
 case Kind of
    gtAmmo_Bomb,
@@ -359,10 +359,10 @@
                 gear^.Radius:= 1;
                 gear^.Health:= 5;
                 if (gear^.dY.QWordValue = 0) and (gear^.dX.QWordValue = 0) then
-                	begin
-                	gear^.dY:= (getrandom - _0_8) * _0_03;
-                	gear^.dX:= (getrandom - _0_5) * _0_4
-                	end
+                    begin
+                    gear^.dY:= (getrandom - _0_8) * _0_03;
+                    gear^.dX:= (getrandom - _0_5) * _0_4
+                    end
                 end;
    gtFirePunch: begin
                 gear^.Radius:= 15;
@@ -381,7 +381,7 @@
       gtTarget: begin
                 gear^.Radius:= 10;
                 gear^.Elasticity:= _0_3;
-				gear^.Timer:= 0
+                gear^.Timer:= 0
                 end;
       gtMortar: begin
                 gear^.Radius:= 4;
@@ -441,7 +441,7 @@
 
 procedure DeleteGear(Gear: PGear);
 var team: PTeam;
-	t,i: Longword;
+    t,i: Longword;
     k: boolean;
 begin
 
@@ -450,34 +450,34 @@
 DeleteCI(Gear);
 
 if Gear^.Tex <> nil then
-	begin
-	FreeTexture(Gear^.Tex);
-	Gear^.Tex:= nil
-	end;
+    begin
+    FreeTexture(Gear^.Tex);
+    Gear^.Tex:= nil
+    end;
 
 if Gear^.Kind = gtHedgehog then
-	if (CurAmmoGear <> nil) and (CurrentHedgehog^.Gear = Gear) then
-		begin
-		Gear^.Message:= gm_Destroy;
-		CurAmmoGear^.Message:= gm_Destroy;
-		exit
-		end
-	else
-		begin
-		if (hwRound(Gear^.Y) >= cWaterLine) then
-			begin
-			t:= max(Gear^.Damage, Gear^.Health);
-			Gear^.Damage:= t;
+    if (CurAmmoGear <> nil) and (CurrentHedgehog^.Gear = Gear) then
+        begin
+        Gear^.Message:= gm_Destroy;
+        CurAmmoGear^.Message:= gm_Destroy;
+        exit
+        end
+    else
+        begin
+        if (hwRound(Gear^.Y) >= cWaterLine) then
+            begin
+            t:= max(Gear^.Damage, Gear^.Health);
+            Gear^.Damage:= t;
             if cWaterOpacity < $FF then
-			    AddGear(hwRound(Gear^.X), min(hwRound(Gear^.Y),cWaterLine+cVisibleWater+32), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
-			uStats.HedgehogDamaged(Gear)
-			end;
+                AddGear(hwRound(Gear^.X), min(hwRound(Gear^.Y),cWaterLine+cVisibleWater+32), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
+            uStats.HedgehogDamaged(Gear)
+            end;
 
-		team:= PHedgehog(Gear^.Hedgehog)^.Team;
-		if CurrentHedgehog^.Gear = Gear then
-			FreeActionsList; // to avoid ThinkThread on drawned gear
+        team:= PHedgehog(Gear^.Hedgehog)^.Team;
+        if CurrentHedgehog^.Gear = Gear then
+            FreeActionsList; // to avoid ThinkThread on drawned gear
 
-		PHedgehog(Gear^.Hedgehog)^.Gear:= nil;
+        PHedgehog(Gear^.Hedgehog)^.Gear:= nil;
         if PHedgehog(Gear^.Hedgehog)^.King then
             begin
             // are there any other kings left? Just doing nil check.  Presumably a mortally wounded king will get reaped soon enough
@@ -488,9 +488,9 @@
                 for i:= 0 to Pred(team^.Clan^.TeamsNumber) do
                     TeamGoneEffect(team^.Clan^.Teams[i]^)
             end;
-		inc(KilledHHs);
-		RecountTeamHealth(team)
-		end;
+        inc(KilledHHs);
+        RecountTeamHealth(team)
+        end;
 {$IFDEF DEBUGFILE}
 with Gear^ do AddFileLog('Delete: #' + inttostr(uid) + ' (' + inttostr(hwRound(x)) + ',' + inttostr(hwRound(y)) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + inttostr(ord(Kind)));
 {$ENDIF}
@@ -509,20 +509,20 @@
 CheckNoDamage:= true;
 Gear:= GearsList;
 while Gear <> nil do
-	begin
-	if Gear^.Kind = gtHedgehog then
-		begin
-		if (not isInMultiShoot) then inc(Gear^.Damage, Gear^.Karma);
-		if (Gear^.Damage <> 0) and
-		(not Gear^.Invulnerable) then
-			begin
-			CheckNoDamage:= false;
-			uStats.HedgehogDamaged(Gear);
-			dmg:= Gear^.Damage;
-			if Gear^.Health < dmg then
-				Gear^.Health:= 0
-			else
-				dec(Gear^.Health, dmg);
+    begin
+    if Gear^.Kind = gtHedgehog then
+        begin
+        if (not isInMultiShoot) then inc(Gear^.Damage, Gear^.Karma);
+        if (Gear^.Damage <> 0) and
+        (not Gear^.Invulnerable) then
+            begin
+            CheckNoDamage:= false;
+            uStats.HedgehogDamaged(Gear);
+            dmg:= Gear^.Damage;
+            if Gear^.Health < dmg then
+                Gear^.Health:= 0
+            else
+                dec(Gear^.Health, dmg);
 
             if (PHedgehog(Gear^.Hedgehog)^.Team = CurrentTeam) and
                (Gear^.Damage <> Gear^.Karma) and
@@ -530,18 +530,18 @@
                 not SuddenDeathDmg then
                 Gear^.State:= Gear^.State or gstLoser;
 
-			AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
-					gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
+            AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
+                    gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
 
-			RenderHealth(PHedgehog(Gear^.Hedgehog)^);
-			RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team);
+            RenderHealth(PHedgehog(Gear^.Hedgehog)^);
+            RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team);
 
-			end;
-		if (not isInMultiShoot) then Gear^.Karma:= 0;
-		Gear^.Damage:= 0
-		end;
-	Gear:= Gear^.NextGear
-	end;
+            end;
+        if (not isInMultiShoot) then Gear^.Karma:= 0;
+        Gear^.Damage:= 0
+        end;
+    Gear:= Gear^.NextGear
+    end;
 SuddenDeathDmg:= false;
 end;
 
@@ -554,14 +554,14 @@
 Gear:= GearsList;
 
 while Gear <> nil do
-	begin
-	if Gear^.Kind = gtHedgehog then
+    begin
+    if Gear^.Kind = gtHedgehog then
         begin
-		inc(Gear^.Damage, min(cHealthDecrease, max(0,Gear^.Health - 1 - Gear^.Damage)));
+        inc(Gear^.Damage, min(cHealthDecrease, max(0,Gear^.Health - 1 - Gear^.Damage)));
         if PHedgehog(Gear^.Hedgehog)^.King then
             begin
             flag:= false;
-		    team:= PHedgehog(Gear^.Hedgehog)^.Team;
+            team:= PHedgehog(Gear^.Hedgehog)^.Team;
             for i:= 0 to Pred(team^.HedgehogsNumber) do
                 if (team^.Hedgehogs[i].Gear <> nil) and 
                    (not team^.Hedgehogs[i].King) and 
@@ -570,15 +570,15 @@
             end
         end;
 
-	Gear:= Gear^.NextGear
-	end;
+    Gear:= Gear^.NextGear
+    end;
 end;
 
 procedure ProcessGears;
 const delay: LongWord = 0;
-	step: (stDelay, stChDmg, stSweep, stTurnReact,
-			stAfterDelay, stChWin, stWater, stChWin2, stHealth,
-			stSpawn, stNTurn) = stDelay;
+    step: (stDelay, stChDmg, stSweep, stTurnReact,
+            stAfterDelay, stChWin, stWater, stChWin2, stHealth,
+            stSpawn, stNTurn) = stDelay;
 
 var Gear, t: PGear;
 begin
@@ -586,26 +586,26 @@
 AllInactive:= true;
 
 if (StepSoundTimer > 0) and (StepSoundChannel < 0) then
-	begin
-	WriteLnToConsole('playsteps ...');
-	StepSoundChannel:= LoopSound(sndSteps)
-	end
+    begin
+    WriteLnToConsole('playsteps ...');
+    StepSoundChannel:= LoopSound(sndSteps)
+    end
 else if (StepSoundTimer = 0) and (StepSoundChannel > -1) then
-	begin
-	WriteLnToConsole('stopsteps ...');
-	StopSound(StepSoundChannel);
-	StepSoundChannel:= -1;
-	end;
+    begin
+    WriteLnToConsole('stopsteps ...');
+    StopSound(StepSoundChannel);
+    StepSoundChannel:= -1;
+    end;
 
 if StepSoundTimer > 0 then
-	dec(StepSoundTimer, 1);
+    dec(StepSoundTimer, 1);
 
 t:= GearsList;
 while t <> nil do
-	begin
-	Gear:= t;
-	t:= Gear^.NextGear;
-	if Gear^.Active then
+    begin
+    Gear:= t;
+    t:= Gear^.NextGear;
+    if Gear^.Active then
         begin
         if Gear^.RenderTimer and (Gear^.Timer > 500) and ((Gear^.Timer mod 1000) = 0) then
             begin
@@ -614,134 +614,134 @@
             end;
         Gear^.doStep(Gear);
         end
-	end;
+    end;
 
 if AllInactive then
 case step of
-	stDelay: begin
-		if delay = 0 then
-			delay:= cInactDelay
-		else
-			dec(delay);
+    stDelay: begin
+        if delay = 0 then
+            delay:= cInactDelay
+        else
+            dec(delay);
 
-		if delay = 0 then
-			inc(step)
-		end;
-	stChDmg: if CheckNoDamage then inc(step) else step:= stDelay;
-	stSweep: if SweepDirty then
-				begin
-				SetAllToActive;
-				step:= stChDmg
-				end else inc(step);
-	stTurnReact: begin
-		if (not bBetweenTurns) and (not isInMultiShoot) then
-			begin
-			uStats.TurnReaction;
-			inc(step)
-		end else
-			inc(step, 2);
-		end;
-	stAfterDelay: begin
-		if delay = 0 then
-			delay:= cInactDelay
-		else
-			dec(delay);
+        if delay = 0 then
+            inc(step)
+        end;
+    stChDmg: if CheckNoDamage then inc(step) else step:= stDelay;
+    stSweep: if SweepDirty then
+                begin
+                SetAllToActive;
+                step:= stChDmg
+                end else inc(step);
+    stTurnReact: begin
+        if (not bBetweenTurns) and (not isInMultiShoot) then
+            begin
+            uStats.TurnReaction;
+            inc(step)
+        end else
+            inc(step, 2);
+        end;
+    stAfterDelay: begin
+        if delay = 0 then
+            delay:= cInactDelay
+        else
+            dec(delay);
 
-		if delay = 0 then
-		inc(step)
-		end;
-	stChWin: begin
-			CheckForWin;
-			inc(step)
-			end;
-	stWater: if (not bBetweenTurns) and (not isInMultiShoot) then
-				begin
-				if TotalRounds = cSuddenDTurns + 2 then bWaterRising:= true;
+        if delay = 0 then
+        inc(step)
+        end;
+    stChWin: begin
+            CheckForWin;
+            inc(step)
+            end;
+    stWater: if (not bBetweenTurns) and (not isInMultiShoot) then
+                begin
+                if TotalRounds = cSuddenDTurns + 2 then bWaterRising:= true;
 
-				if bWaterRising then
-				AddGear(0, 0, gtWaterUp, 0, _0, _0, 0);
+                if bWaterRising then
+                AddGear(0, 0, gtWaterUp, 0, _0, _0, 0);
 
-				inc(step)
-				end else inc(step);
-	stChWin2: begin
-			CheckForWin;
-			inc(step)
-			end;
-	stHealth: begin
-			if (TotalRounds = cSuddenDTurns) and (cHealthDecrease = 0) then
-				begin
-				cHealthDecrease:= 5;
-				AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
-				playSound(sndSuddenDeath)
-				end;
+                inc(step)
+                end else inc(step);
+    stChWin2: begin
+            CheckForWin;
+            inc(step)
+            end;
+    stHealth: begin
+            if (TotalRounds = cSuddenDTurns) and (cHealthDecrease = 0) then
+                begin
+                cHealthDecrease:= 5;
+                AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
+                playSound(sndSuddenDeath)
+                end;
 
-			if bBetweenTurns
-				or isInMultiShoot
-				or (TotalRounds = 0) then inc(step)
-			else begin
-				bBetweenTurns:= true;
-				HealthMachine;
+            if bBetweenTurns
+                or isInMultiShoot
+                or (TotalRounds = 0) then inc(step)
+            else begin
+                bBetweenTurns:= true;
+                HealthMachine;
                 if cHealthDecrease > 0 then SuddenDeathDmg:= true;
-				step:= stChDmg
-				end
-			end;
-	stSpawn: begin
-			if not isInMultiShoot then SpawnBoxOfSmth;
-			inc(step)
-			end;
-	stNTurn: begin
-			if isInMultiShoot then
-				isInMultiShoot:= false
-			else begin
-				// delayed till after 0.9.12
-				// reset to default zoom
-				//ZoomValue:= ZoomDefault;
-				with CurrentHedgehog^ do
-					if (Gear <> nil) 
+                step:= stChDmg
+                end
+            end;
+    stSpawn: begin
+            if not isInMultiShoot then SpawnBoxOfSmth;
+            inc(step)
+            end;
+    stNTurn: begin
+            if isInMultiShoot then
+                isInMultiShoot:= false
+            else begin
+                // delayed till after 0.9.12
+                // reset to default zoom
+                //ZoomValue:= ZoomDefault;
+                with CurrentHedgehog^ do
+                    if (Gear <> nil) 
                         and ((Gear^.State and gstAttacked) = 0)
-						and (MultiShootAttacks > 0) then OnUsedAmmo(CurrentHedgehog^);
-				
-				ResetUtilities;
+                        and (MultiShootAttacks > 0) then OnUsedAmmo(CurrentHedgehog^);
+                
+                ResetUtilities;
 
-				FreeActionsList; // could send -left, -right and similar commands, so should be called before /nextturn
+                FreeActionsList; // could send -left, -right and similar commands, so should be called before /nextturn
 
-				ParseCommand('/nextturn', true);
-				SwitchHedgehog;
+                ParseCommand('/nextturn', true);
+                SwitchHedgehog;
 
-				AfterSwitchHedgehog;
-				bBetweenTurns:= false
-				end;
-			step:= Low(step)
-			end;
-	end;
+                AfterSwitchHedgehog;
+                bBetweenTurns:= false
+                end;
+            step:= Low(step)
+            end;
+    end;
 
 if TurnTimeLeft > 0 then
-		if CurrentHedgehog^.Gear <> nil then
-			if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0)
-				and not isInMultiShoot then
-				begin
-				if (TurnTimeLeft = 5000)
+        if CurrentHedgehog^.Gear <> nil then
+            if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0)
+                and not isInMultiShoot then
+                begin
+                if (TurnTimeLeft = 5000)
                     and (not PlacingHogs)
-					and (CurrentHedgehog^.Gear <> nil)
-					and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then
-						PlaySound(sndHurry, CurrentTeam^.voicepack);
-				dec(TurnTimeLeft)
-				end;
+                    and (CurrentHedgehog^.Gear <> nil)
+                    and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then
+                        PlaySound(sndHurry, CurrentTeam^.voicepack);
+                dec(TurnTimeLeft)
+                end;
 
 if skipFlag then
-	begin
-	TurnTimeLeft:= 0;
-	skipFlag:= false
-	end;
+    begin
+    TurnTimeLeft:= 0;
+    skipFlag:= false
+    end;
 
 if ((GameTicks and $FFFF) = $FFFF) then
-	begin
-	if (not CurrentTeam^.ExtDriven) then
-		SendIPCTimeInc;
+    begin
+    if (not CurrentTeam^.ExtDriven) then
+        SendIPCTimeInc;
 
-	if (not CurrentTeam^.ExtDriven) or CurrentTeam^.hasGone then
-		inc(hiTicks) // we do not recieve a message for this
-	end;
+    if (not CurrentTeam^.ExtDriven) or CurrentTeam^.hasGone then
+        inc(hiTicks) // we do not recieve a message for this
+    end;
 
 inc(GameTicks)
 end;
@@ -788,11 +788,11 @@
 procedure ApplyDamage(Gear: PGear; Damage: Longword);
 var s: shortstring;
     vampDmg, tmpDmg, i: Longword;
-	vg: PVisualGear;
+    vg: PVisualGear;
 begin
-	if (Gear^.Kind = gtHedgehog) and (Damage>=1) then
+    if (Gear^.Kind = gtHedgehog) and (Damage>=1) then
     begin
-	AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color);
+    AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color);
     tmpDmg:= min(Damage, max(0,Gear^.Health-Gear^.Damage));
     if (Gear <> CurrentHedgehog^.Gear) and (CurrentHedgehog^.Gear <> nil) and (tmpDmg >= 1) then
         begin
@@ -809,13 +809,13 @@
                 AddCaption(s, CurrentHedgehog^.Team^.Clan^.Color, capgrpAmmoinfo);
                 RenderHealth(CurrentHedgehog^);
                 RecountTeamHealth(CurrentHedgehog^.Team);
-				i:= 0;
-				while i < vampDmg do
-					begin
-					vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtHealth);
-					if vg <> nil then vg^.Frame:= 10;
-					inc(i, 5);
-					end;
+                i:= 0;
+                while i < vampDmg do
+                    begin
+                    vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtHealth);
+                    if vg <> nil then vg^.Frame:= 10;
+                    inc(i, 5);
+                    end;
                 end
             end;
         if ((GameFlags and gfKarma) <> 0) and
@@ -829,7 +829,7 @@
            end;
         end;
     end;
-	inc(Gear^.Damage, Damage);
+    inc(Gear^.Damage, Damage);
 end;
 
 procedure SetAllToActive;
@@ -838,10 +838,10 @@
 AllInactive:= false;
 t:= GearsList;
 while t <> nil do
-	begin
-	t^.Active:= true;
-	t:= t^.NextGear
-	end
+    begin
+    t^.Active:= true;
+    t:= t^.NextGear
+    end
 end;
 
 procedure SetAllHHToActive;
@@ -850,40 +850,40 @@
 AllInactive:= false;
 t:= GearsList;
 while t <> nil do
-	begin
-	if t^.Kind = gtHedgehog then t^.Active:= true;
-	t:= t^.NextGear
-	end
+    begin
+    if t^.Kind = gtHedgehog then t^.Active:= true;
+    t:= t^.NextGear
+    end
 end;
 
 procedure DrawAltWeapon(Gear: PGear; sx, sy: LongInt);
 begin
 with PHedgehog(Gear^.Hedgehog)^ do
-	begin
-	if not (((Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) and ((Gear^.State and gstAttacked) = 0)) then
-		exit;
-	DrawTexture(round(sx + 16), round(sy + 16), ropeIconTex);
-	DrawTextureF(SpritesData[sprAMAmmos].Texture, 0.75, round(sx + 30), round(sy + 30), ord(Ammo^[CurSlot, CurAmmo].AmmoType) - 1, 1, 32, 32);
-	end;
+    begin
+    if not (((Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) and ((Gear^.State and gstAttacked) = 0)) then
+        exit;
+    DrawTexture(round(sx + 16), round(sy + 16), ropeIconTex);
+    DrawTextureF(SpritesData[sprAMAmmos].Texture, 0.75, round(sx + 30), round(sy + 30), ord(Ammo^[CurSlot, CurAmmo].AmmoType) - 1, 1, 32, 32);
+    end;
 end;
 
 procedure DrawHH(Gear: PGear);
 var i, t: LongInt;
-	amt: TAmmoType;
-	hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt;  // hedgehog, crosshair, temp, sprite, direction
-	lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real;  // laser, change
-	defaultPos, HatVisible: boolean;
-	VertexBuffer: array [0..1] of TVertex2f;
+    amt: TAmmoType;
+    hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt;  // hedgehog, crosshair, temp, sprite, direction
+    lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real;  // laser, change
+    defaultPos, HatVisible: boolean;
+    VertexBuffer: array [0..1] of TVertex2f;
 begin
 
 if PHedgehog(Gear^.Hedgehog)^.Unplaced then exit;
 m:= 1;
 if ((Gear^.State and gstHHHJump) <> 0) and not cArtillery then m:= -1;
 if (Gear^.State and gstHHDeath) <> 0 then
-	begin
-	DrawSprite(sprHHDeath, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 26 + WorldDy, Gear^.Pos);
-	exit
-	end;
+    begin
+    DrawSprite(sprHHDeath, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 26 + WorldDy, Gear^.Pos);
+    exit
+    end;
 
 defaultPos:= true;
 HatVisible:= false;
@@ -892,142 +892,142 @@
 sy:= hwRound(Gear^.Y) - 3 + WorldDy;
 if ((Gear^.State and gstWinner) <> 0) and
    ((CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtPickHammer)) then
-	begin
-	DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX),
-			2,
-			0,
-			0);
-	defaultPos:= false
-	end;
+    begin
+    DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX),
+            2,
+            0,
+            0);
+    defaultPos:= false
+    end;
 if (Gear^.State and gstDrowning) <> 0 then
-	begin
-	DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX),
-			1,
-			7,
-			0);
-	defaultPos:= false
-	end else
+    begin
+    DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX),
+            1,
+            7,
+            0);
+    defaultPos:= false
+    end else
 if (Gear^.State and gstLoser) <> 0 then // for now using the jackhammer for its kind of bemused "oops" look
-	begin
-	DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX),
-			2,
-			3,
-			0);
-	defaultPos:= false
-	end else
+    begin
+    DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX),
+            2,
+            3,
+            0);
+    defaultPos:= false
+    end else
 
 if (Gear^.State and gstHHDriven) <> 0 then
-	begin
-	if ((Gear^.State and gstHHThinking) = 0) and
+    begin
+    if ((Gear^.State and gstHHThinking) = 0) and
        ShowCrosshair and
        ((Gear^.State and (gstAttacked or gstAnimation)) = 0) then
-		begin
+        begin
 (* These calculations are a little complex for a few reasons:
    1: I need to draw the laser from weapon origin to nearest land
    2: I need to start the beam outside the hedgie for attractiveness.
    3: I need to extend the beam beyond land.
    This routine perhaps should be pushed into uStore or somesuch instead of continuuing the increase in size of this function.
 *)
-		dx:= hwSign(Gear^.dX) * m * Sin(Gear^.Angle * pi / cMaxAngle);
-		dy:= - Cos(Gear^.Angle * pi / cMaxAngle);
-		if cLaserSighting then
-			begin
-			lx:= hwRound(Gear^.X);
-			ly:= hwRound(Gear^.Y);
-			lx:= lx + dx * 16;
-			ly:= ly + dy * 16;
+        dx:= hwSign(Gear^.dX) * m * Sin(Gear^.Angle * pi / cMaxAngle);
+        dy:= - Cos(Gear^.Angle * pi / cMaxAngle);
+        if cLaserSighting then
+            begin
+            lx:= hwRound(Gear^.X);
+            ly:= hwRound(Gear^.Y);
+            lx:= lx + dx * 16;
+            ly:= ly + dy * 16;
 
-			ax:= dx * 4;
-			ay:= dy * 4;
+            ax:= dx * 4;
+            ay:= dy * 4;
 
-			tx:= round(lx);
-			ty:= round(ly);
-			hx:= tx;
-			hy:= ty;
-			while ((ty and LAND_HEIGHT_MASK) = 0) and
-				((tx and LAND_WIDTH_MASK) = 0) and
-				(Land[ty, tx] = 0) do
-				begin
-				lx:= lx + ax;
-				ly:= ly + ay;
-				tx:= round(lx);
-				ty:= round(ly)
-				end;
-			// reached edge of land. assume infinite beam. Extend it way out past camera
-			if ((ty and LAND_HEIGHT_MASK) <> 0) or ((tx and LAND_WIDTH_MASK) <> 0) then
-				begin
-				tx:= round(lx + ax * (LAND_WIDTH div 4));
-				ty:= round(ly + ay * (LAND_WIDTH div 4));
-				end;
+            tx:= round(lx);
+            ty:= round(ly);
+            hx:= tx;
+            hy:= ty;
+            while ((ty and LAND_HEIGHT_MASK) = 0) and
+                ((tx and LAND_WIDTH_MASK) = 0) and
+                (Land[ty, tx] = 0) do
+                begin
+                lx:= lx + ax;
+                ly:= ly + ay;
+                tx:= round(lx);
+                ty:= round(ly)
+                end;
+            // reached edge of land. assume infinite beam. Extend it way out past camera
+            if ((ty and LAND_HEIGHT_MASK) <> 0) or ((tx and LAND_WIDTH_MASK) <> 0) then
+                begin
+                tx:= round(lx + ax * (LAND_WIDTH div 4));
+                ty:= round(ly + ay * (LAND_WIDTH div 4));
+                end;
 
-			//if (abs(lx-tx)>8) or (abs(ly-ty)>8) then
-				begin
-				glDisable(GL_TEXTURE_2D);
-				glEnable(GL_LINE_SMOOTH);
+            //if (abs(lx-tx)>8) or (abs(ly-ty)>8) then
+                begin
+                glDisable(GL_TEXTURE_2D);
+                glEnable(GL_LINE_SMOOTH);
 
-				glLineWidth(1.0);
+                glLineWidth(1.0);
 
-				glColor4ub($FF, $00, $00, $C0);
-				VertexBuffer[0].X:= hx + WorldDx;
-				VertexBuffer[0].Y:= hy + WorldDy;
-				VertexBuffer[1].X:= tx + WorldDx;
-				VertexBuffer[1].Y:= ty + WorldDy;
+                glColor4ub($FF, $00, $00, $C0);
+                VertexBuffer[0].X:= hx + WorldDx;
+                VertexBuffer[0].Y:= hy + WorldDy;
+                VertexBuffer[1].X:= tx + WorldDx;
+                VertexBuffer[1].Y:= ty + WorldDy;
 
-				glEnableClientState(GL_VERTEX_ARRAY);
-				glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
-				glDrawArrays(GL_LINES, 0, Length(VertexBuffer));
-				glColor4f(1, 1, 1, 1);
-				glEnable(GL_TEXTURE_2D);
-				glDisable(GL_LINE_SMOOTH);
-				end;
-			end;
-		// draw crosshair
-		cx:= Round(hwRound(Gear^.X) + dx * 80);
-		cy:= Round(hwRound(Gear^.Y) + dy * 80);
-		DrawRotatedTex(PHedgehog(Gear^.Hedgehog)^.Team^.CrosshairTex,
-				12, 12, cx + WorldDx, cy + WorldDy, 0,
-				hwSign(Gear^.dX) * (Gear^.Angle * 180.0) / cMaxAngle);
-		end;
-	hx:= hwRound(Gear^.X) + 1 + 8 * hwSign(Gear^.dX) + WorldDx;
-	hy:= hwRound(Gear^.Y) - 2 + WorldDy;
-	aangle:= Gear^.Angle * 180 / cMaxAngle - 90;
+                glEnableClientState(GL_VERTEX_ARRAY);
+                glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
+                glDrawArrays(GL_LINES, 0, Length(VertexBuffer));
+                glColor4f(1, 1, 1, 1);
+                glEnable(GL_TEXTURE_2D);
+                glDisable(GL_LINE_SMOOTH);
+                end;
+            end;
+        // draw crosshair
+        cx:= Round(hwRound(Gear^.X) + dx * 80);
+        cy:= Round(hwRound(Gear^.Y) + dy * 80);
+        DrawRotatedTex(PHedgehog(Gear^.Hedgehog)^.Team^.CrosshairTex,
+                12, 12, cx + WorldDx, cy + WorldDy, 0,
+                hwSign(Gear^.dX) * (Gear^.Angle * 180.0) / cMaxAngle);
+        end;
+    hx:= hwRound(Gear^.X) + 1 + 8 * hwSign(Gear^.dX) + WorldDx;
+    hy:= hwRound(Gear^.Y) - 2 + WorldDy;
+    aangle:= Gear^.Angle * 180 / cMaxAngle - 90;
 
-	if CurAmmoGear <> nil then
-	begin
-		case CurAmmoGear^.Kind of
-			gtShotgunShot: begin
-					if (CurAmmoGear^.State and gstAnimation <> 0) then
-						DrawRotated(sprShotgun, hx, hy, hwSign(Gear^.dX), aangle)
-					else
-						DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
-				end;
-			gtDEagleShot: DrawRotated(sprDEagle, hx, hy, hwSign(Gear^.dX), aangle);
-			gtSniperRifleShot: begin
-					if (CurAmmoGear^.State and gstAnimation <> 0) then
-			            DrawRotatedF(sprSniperRifle, hx, hy, 1, hwSign(Gear^.dX), aangle)
-					else
-			            DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle)
-				end;
-			gtBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle);
-			gtRCPlane: begin
-				DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0);
-				defaultPos:= false
-				end;
-			gtRope: begin
-				if Gear^.X < CurAmmoGear^.X then
-					begin
-					dAngle:= 0;
-					hAngle:= 180;
-					i:= 1
-					end else
-					begin
-					dAngle:= 180;
-					hAngle:= 0;
-					i:= -1
-					end;
+    if CurAmmoGear <> nil then
+    begin
+        case CurAmmoGear^.Kind of
+            gtShotgunShot: begin
+                    if (CurAmmoGear^.State and gstAnimation <> 0) then
+                        DrawRotated(sprShotgun, hx, hy, hwSign(Gear^.dX), aangle)
+                    else
+                        DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
+                end;
+            gtDEagleShot: DrawRotated(sprDEagle, hx, hy, hwSign(Gear^.dX), aangle);
+            gtSniperRifleShot: begin
+                    if (CurAmmoGear^.State and gstAnimation <> 0) then
+                        DrawRotatedF(sprSniperRifle, hx, hy, 1, hwSign(Gear^.dX), aangle)
+                    else
+                        DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle)
+                end;
+            gtBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle);
+            gtRCPlane: begin
+                DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0);
+                defaultPos:= false
+                end;
+            gtRope: begin
+                if Gear^.X < CurAmmoGear^.X then
+                    begin
+                    dAngle:= 0;
+                    hAngle:= 180;
+                    i:= 1
+                    end else
+                    begin
+                    dAngle:= 180;
+                    hAngle:= 0;
+                    i:= -1
+                    end;
                 sx:= hwRound(Gear^.X) + WorldDx;
                 sy:= hwRound(Gear^.Y) + WorldDy;
                if ((Gear^.State and gstWinner) = 0) then
@@ -1042,16 +1042,16 @@
                            DrawRotatedTextureF(HatTex, 1.0, -1.0, -6.0, sx, sy, 0, i, 32, 32,
                                i*DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + hAngle);
                    end;
-				DrawAltWeapon(Gear, sx, sy);
-				defaultPos:= false
-				end;
-			gtBlowTorch: begin
-				DrawRotated(sprBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
-				DrawHedgehog(sx, sy,
-						hwSign(Gear^.dX),
-						3,
-						PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
-						0);
+                DrawAltWeapon(Gear, sx, sy);
+                defaultPos:= false
+                end;
+            gtBlowTorch: begin
+                DrawRotated(sprBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
+                DrawHedgehog(sx, sy,
+                        hwSign(Gear^.dX),
+                        3,
+                        PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
+                        0);
                 with PHedgehog(Gear^.Hedgehog)^ do
                     if (HatTex <> nil) then
                        DrawTextureF(HatTex,
@@ -1062,137 +1062,137 @@
                            hwSign(Gear^.dX),
                            32,
                            32);
-				defaultPos:= false
-				end;
-			gtShover: DrawRotated(sprHandBaseball, hx, hy, hwSign(Gear^.dX), aangle + 180);
-			gtFirePunch: begin
-				DrawHedgehog(sx, sy,
-						hwSign(Gear^.dX),
-						1,
-						4,
-						0);
-				defaultPos:= false
-				end;
-			gtPickHammer: begin
+                defaultPos:= false
+                end;
+            gtShover: DrawRotated(sprHandBaseball, hx, hy, hwSign(Gear^.dX), aangle + 180);
+            gtFirePunch: begin
+                DrawHedgehog(sx, sy,
+                        hwSign(Gear^.dX),
+                        1,
+                        4,
+                        0);
+                defaultPos:= false
+                end;
+            gtPickHammer: begin
                 defaultPos:= false;
                 dec(sy,20);
                 end;
-			gtTeleport: defaultPos:= false;
-			gtWhip: begin
-				DrawRotatedF(sprWhip,
-						sx,
-						sy,
-						1,
-						hwSign(Gear^.dX),
-						0);
-				defaultPos:= false
-				end;
-			gtKamikaze: begin
-				if CurAmmoGear^.Pos = 0 then
-					DrawHedgehog(sx, sy,
-							hwSign(Gear^.dX),
-							1,
-							6,
-							0)
-				else
-					DrawRotatedF(sprKamikaze,
-							hwRound(Gear^.X) + WorldDx,
-							hwRound(Gear^.Y) + WorldDy,
-							CurAmmoGear^.Pos - 1,
-							hwSign(Gear^.dX),
-							aangle);
-				defaultPos:= false
-				end;
-			gtSeduction: begin
-				if CurAmmoGear^.Pos >= 6 then
-					DrawHedgehog(sx, sy,
-							hwSign(Gear^.dX),
-							2,
-							2,
-							0)
-				else
-					begin
-					DrawRotatedF(sprDress,
-							hwRound(Gear^.X) + WorldDx,
-							hwRound(Gear^.Y) + WorldDy,
-							CurAmmoGear^.Pos,
-							hwSign(Gear^.dX),
-							0);
-					DrawSprite(sprCensored, hwRound(Gear^.X) - 32 + WorldDx, hwRound(Gear^.Y) - 20 + WorldDy, 0)
-					end;
-				defaultPos:= false
-				end;
-		end;
+            gtTeleport: defaultPos:= false;
+            gtWhip: begin
+                DrawRotatedF(sprWhip,
+                        sx,
+                        sy,
+                        1,
+                        hwSign(Gear^.dX),
+                        0);
+                defaultPos:= false
+                end;
+            gtKamikaze: begin
+                if CurAmmoGear^.Pos = 0 then
+                    DrawHedgehog(sx, sy,
+                            hwSign(Gear^.dX),
+                            1,
+                            6,
+                            0)
+                else
+                    DrawRotatedF(sprKamikaze,
+                            hwRound(Gear^.X) + WorldDx,
+                            hwRound(Gear^.Y) + WorldDy,
+                            CurAmmoGear^.Pos - 1,
+                            hwSign(Gear^.dX),
+                            aangle);
+                defaultPos:= false
+                end;
+            gtSeduction: begin
+                if CurAmmoGear^.Pos >= 6 then
+                    DrawHedgehog(sx, sy,
+                            hwSign(Gear^.dX),
+                            2,
+                            2,
+                            0)
+                else
+                    begin
+                    DrawRotatedF(sprDress,
+                            hwRound(Gear^.X) + WorldDx,
+                            hwRound(Gear^.Y) + WorldDy,
+                            CurAmmoGear^.Pos,
+                            hwSign(Gear^.dX),
+                            0);
+                    DrawSprite(sprCensored, hwRound(Gear^.X) - 32 + WorldDx, hwRound(Gear^.Y) - 20 + WorldDy, 0)
+                    end;
+                defaultPos:= false
+                end;
+        end;
 
-		case CurAmmoGear^.Kind of
-			gtShotgunShot,
-			gtDEagleShot,
-			gtSniperRifleShot,
-			gtShover: begin
-				DrawHedgehog(sx, sy,
-						hwSign(Gear^.dX),
-						0,
-						4,
-						0);
-				defaultPos:= false;
-				HatVisible:= true
-			end
-		end
-	end else
+        case CurAmmoGear^.Kind of
+            gtShotgunShot,
+            gtDEagleShot,
+            gtSniperRifleShot,
+            gtShover: begin
+                DrawHedgehog(sx, sy,
+                        hwSign(Gear^.dX),
+                        0,
+                        4,
+                        0);
+                defaultPos:= false;
+                HatVisible:= true
+            end
+        end
+    end else
 
-	if ((Gear^.State and gstHHJumping) <> 0) then
-	begin
+    if ((Gear^.State and gstHHJumping) <> 0) then
+    begin
     DrawHedgehog(sx, sy,
         hwSign(Gear^.dX)*m,
         1,
         1,
         0);
-	HatVisible:= true;
-	defaultPos:= false
-	end else
+    HatVisible:= true;
+    defaultPos:= false
+    end else
 
-	if (Gear^.Message and (gm_Left or gm_Right) <> 0) and (not isCursorVisible) then
-		begin
-		DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX),
-			0,
-			PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
-			0);
-		defaultPos:= false;
-		HatVisible:= true
-		end
-	else
+    if (Gear^.Message and (gm_Left or gm_Right) <> 0) and (not isCursorVisible) then
+        begin
+        DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX),
+            0,
+            PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
+            0);
+        defaultPos:= false;
+        HatVisible:= true
+        end
+    else
 
-	if ((Gear^.State and gstAnimation) <> 0) then
-		begin
-		DrawRotatedF(Wavez[TWave(Gear^.Tag)].Sprite,
-				sx,
-				sy,
-				Gear^.Pos,
-				hwSign(Gear^.dX),
-				0.0);
-		defaultPos:= false
-		end
-	else
-	if ((Gear^.State and gstAttacked) = 0) then
-	begin
-		amt:= CurrentHedgehog^.Ammo^[CurrentHedgehog^.CurSlot, CurrentHedgehog^.CurAmmo].AmmoType;
-		case amt of
-			amBazooka,
-			amMortar: DrawRotated(sprHandBazooka, hx, hy, hwSign(Gear^.dX), aangle);
-			amMolotov: DrawRotated(sprHandMolotov, hx, hy, hwSign(Gear^.dX), aangle);
-			amBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle);
-			amDrill: DrawRotated(sprHandDrill, hx, hy, hwSign(Gear^.dX), aangle);
-			amRope: DrawRotated(sprHandRope, hx, hy, hwSign(Gear^.dX), aangle);
-			amShotgun: DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
-			amDEagle: DrawRotated(sprHandDEagle, hx, hy, hwSign(Gear^.dX), aangle);
-			amSniperRifle: DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle);
-			amBlowTorch: DrawRotated(sprHandBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
-			amRCPlane: begin
-				DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0);
-				defaultPos:= false
-				end;
-			amGirder: begin
+    if ((Gear^.State and gstAnimation) <> 0) then
+        begin
+        DrawRotatedF(Wavez[TWave(Gear^.Tag)].Sprite,
+                sx,
+                sy,
+                Gear^.Pos,
+                hwSign(Gear^.dX),
+                0.0);
+        defaultPos:= false
+        end
+    else
+    if ((Gear^.State and gstAttacked) = 0) then
+    begin
+        amt:= CurrentHedgehog^.Ammo^[CurrentHedgehog^.CurSlot, CurrentHedgehog^.CurAmmo].AmmoType;
+        case amt of
+            amBazooka,
+            amMortar: DrawRotated(sprHandBazooka, hx, hy, hwSign(Gear^.dX), aangle);
+            amMolotov: DrawRotated(sprHandMolotov, hx, hy, hwSign(Gear^.dX), aangle);
+            amBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle);
+            amDrill: DrawRotated(sprHandDrill, hx, hy, hwSign(Gear^.dX), aangle);
+            amRope: DrawRotated(sprHandRope, hx, hy, hwSign(Gear^.dX), aangle);
+            amShotgun: DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
+            amDEagle: DrawRotated(sprHandDEagle, hx, hy, hwSign(Gear^.dX), aangle);
+            amSniperRifle: DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle);
+            amBlowTorch: DrawRotated(sprHandBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
+            amRCPlane: begin
+                DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0);
+                defaultPos:= false
+                end;
+            amGirder: begin
                 DrawSpriteClipped(sprGirder,
                                   sx-256,
                                   sy-256,
@@ -1201,124 +1201,124 @@
                                   cWaterLine+WorldDy,
                                   LongInt(leftX)+WorldDx);
                 end;
-		end;
+        end;
 
-		case amt of
-			amAirAttack,
-			amMineStrike: DrawRotated(sprHandAirAttack, sx, hwRound(Gear^.Y) + WorldDy, hwSign(Gear^.dX), 0);
-			amPickHammer: DrawHedgehog(sx, sy,
-						hwSign(Gear^.dX),
-						1,
-						2,
-						0);
-			amTeleport: DrawRotatedF(sprTeleport, sx, sy, 0, hwSign(Gear^.dX), 0);
-			amKamikaze: DrawHedgehog(sx, sy,
-						hwSign(Gear^.dX),
-						1,
-						5,
-						0);
-			amWhip: DrawRotatedF(sprWhip,
-						sx,
-						sy,
-						0,
-						hwSign(Gear^.dX),
-						0);
-		else
-			DrawHedgehog(sx, sy,
-				hwSign(Gear^.dX),
-				0,
-				4,
-				0);
+        case amt of
+            amAirAttack,
+            amMineStrike: DrawRotated(sprHandAirAttack, sx, hwRound(Gear^.Y) + WorldDy, hwSign(Gear^.dX), 0);
+            amPickHammer: DrawHedgehog(sx, sy,
+                        hwSign(Gear^.dX),
+                        1,
+                        2,
+                        0);
+            amTeleport: DrawRotatedF(sprTeleport, sx, sy, 0, hwSign(Gear^.dX), 0);
+            amKamikaze: DrawHedgehog(sx, sy,
+                        hwSign(Gear^.dX),
+                        1,
+                        5,
+                        0);
+            amWhip: DrawRotatedF(sprWhip,
+                        sx,
+                        sy,
+                        0,
+                        hwSign(Gear^.dX),
+                        0);
+        else
+            DrawHedgehog(sx, sy,
+                hwSign(Gear^.dX),
+                0,
+                4,
+                0);
 
-			HatVisible:= true;
-			with PHedgehog(Gear^.Hedgehog)^ do
-				if (HatTex <> nil)
-				and (HatVisibility > 0) then
-					DrawTextureF(HatTex,
-						HatVisibility,
-						sx,
-						hwRound(Gear^.Y) - 8 + WorldDy,
-						0,
-						hwSign(Gear^.dX),
-						32,
-						32);
-		end;
+            HatVisible:= true;
+            with PHedgehog(Gear^.Hedgehog)^ do
+                if (HatTex <> nil)
+                and (HatVisibility > 0) then
+                    DrawTextureF(HatTex,
+                        HatVisibility,
+                        sx,
+                        hwRound(Gear^.Y) - 8 + WorldDy,
+                        0,
+                        hwSign(Gear^.dX),
+                        32,
+                        32);
+        end;
 
-		case amt of
-			amBaseballBat: DrawRotated(sprHandBaseball,
-					hwRound(Gear^.X) + 1 - 4 * hwSign(Gear^.dX) + WorldDx,
-					hwRound(Gear^.Y) + 6 + WorldDy, hwSign(Gear^.dX), aangle);
-		end;
+        case amt of
+            amBaseballBat: DrawRotated(sprHandBaseball,
+                    hwRound(Gear^.X) + 1 - 4 * hwSign(Gear^.dX) + WorldDx,
+                    hwRound(Gear^.Y) + 6 + WorldDy, hwSign(Gear^.dX), aangle);
+        end;
 
-		defaultPos:= false
-	end;
+        defaultPos:= false
+    end;
 
 end else // not gstHHDriven
-	begin
-	if (Gear^.Damage > 0)
-	and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
-		begin
-		DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX),
-			2,
-			1,
-			Gear^.DirAngle);
-		defaultPos:= false
-		end else
+    begin
+    if (Gear^.Damage > 0)
+    and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
+        begin
+        DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX),
+            2,
+            1,
+            Gear^.DirAngle);
+        defaultPos:= false
+        end else
 
-	if ((Gear^.State and gstHHJumping) <> 0) then
-		begin
-		DrawHedgehog(sx, sy,
-			hwSign(Gear^.dX)*m,
-			1,
-			1,
-			0);
-		defaultPos:= false
-		end;
-	end;
+    if ((Gear^.State and gstHHJumping) <> 0) then
+        begin
+        DrawHedgehog(sx, sy,
+            hwSign(Gear^.dX)*m,
+            1,
+            1,
+            0);
+        defaultPos:= false
+        end;
+    end;
 
 with PHedgehog(Gear^.Hedgehog)^ do
-	begin
-	if defaultPos then
-		begin
-		DrawRotatedF(sprHHIdle,
-			sx,
-			sy,
-			(RealTicks div 128 + Gear^.Pos) mod 19,
-			hwSign(Gear^.dX),
-			0);
-		HatVisible:= true;
-		end;
+    begin
+    if defaultPos then
+        begin
+        DrawRotatedF(sprHHIdle,
+            sx,
+            sy,
+            (RealTicks div 128 + Gear^.Pos) mod 19,
+            hwSign(Gear^.dX),
+            0);
+        HatVisible:= true;
+        end;
 
-	if HatVisible then
-		if HatVisibility < 1.0 then
-			HatVisibility:= HatVisibility + 0.2
-		else
-	else
-		if HatVisibility > 0.0 then
-			HatVisibility:= HatVisibility - 0.2;
+    if HatVisible then
+        if HatVisibility < 1.0 then
+            HatVisibility:= HatVisibility + 0.2
+        else
+    else
+        if HatVisibility > 0.0 then
+            HatVisibility:= HatVisibility - 0.2;
 
-	if (HatTex <> nil)
-	and (HatVisibility > 0) then
-		if DefaultPos then
-			DrawTextureF(HatTex,
-				HatVisibility,
-				sx,
-				hwRound(Gear^.Y) - 8 + WorldDy,
-				(RealTicks div 128 + Gear^.Pos) mod 19,
-				hwSign(Gear^.dX),
-				32,
-				32)
-		else
-			DrawTextureF(HatTex,
-				HatVisibility,
-				sx,
-				hwRound(Gear^.Y) - 8 + WorldDy,
-				0,
-				hwSign(Gear^.dX)*m,
-				32,
-				32);
-	end;
+    if (HatTex <> nil)
+    and (HatVisibility > 0) then
+        if DefaultPos then
+            DrawTextureF(HatTex,
+                HatVisibility,
+                sx,
+                hwRound(Gear^.Y) - 8 + WorldDy,
+                (RealTicks div 128 + Gear^.Pos) mod 19,
+                hwSign(Gear^.dX),
+                32,
+                32)
+        else
+            DrawTextureF(HatTex,
+                HatVisibility,
+                sx,
+                hwRound(Gear^.Y) - 8 + WorldDy,
+                0,
+                hwSign(Gear^.dX)*m,
+                32,
+                32);
+    end;
 if (Gear^.State and gstHHDriven) <> 0 then
     begin
 (*    if (CurAmmoGear = nil) then
@@ -1332,60 +1332,60 @@
         begin
         case CurAmmoGear^.Kind of
             gtJetpack: begin
-	                   DrawSprite(sprJetpack, sx-32, sy-32, 0);
-	                   if (CurAmmoGear^.MsgParam and gm_Up) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 1);
-	                   if (CurAmmoGear^.MsgParam and gm_Left) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 2);
-	                   if (CurAmmoGear^.MsgParam and gm_Right) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 3);
+                       DrawSprite(sprJetpack, sx-32, sy-32, 0);
+                       if (CurAmmoGear^.MsgParam and gm_Up) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 1);
+                       if (CurAmmoGear^.MsgParam and gm_Left) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 2);
+                       if (CurAmmoGear^.MsgParam and gm_Right) <> 0 then DrawSprite(sprJetpack, sx-32, sy-32, 3);
                        if CurAmmoGear^.Tex <> nil then DrawCentered(sx, sy - 40, CurAmmoGear^.Tex);
-					   DrawAltWeapon(Gear, sx, sy)
+                       DrawAltWeapon(Gear, sx, sy)
                        end;
             end;
         end
     end;
 
 with PHedgehog(Gear^.Hedgehog)^ do
-	begin
-	if ((Gear^.State and not gstWinner) = 0)
-		or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then
-		begin
-		t:= hwRound(Gear^.Y) - cHHRadius - 12 + WorldDy;
-		if (cTagsMask and htTransparent) <> 0 then
-			glColor4f(1, 1, 1, 0.5);
-		if ((cTagsMask and htHealth) <> 0) then
-			begin
-			dec(t, HealthTagTex^.h + 2);
-			DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex)
-			end;
-		if (cTagsMask and htName) <> 0 then
-			begin
-			dec(t, NameTagTex^.h + 2);
-			DrawCentered(hwRound(Gear^.X) + WorldDx, t, NameTagTex)
-			end;
-		if (cTagsMask and htTeamName) <> 0 then
-			begin
-			dec(t, Team^.NameTagTex^.h + 2);
-			DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex)
-			end;
-		if (cTagsMask and htTransparent) <> 0 then
-			glColor4f(1, 1, 1, 1)
-		end;
-	if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog
-		begin
-		if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then
-			DrawSprite(sprFinger, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 64 + WorldDy,
-						GameTicks div 32 mod 16);
+    begin
+    if ((Gear^.State and not gstWinner) = 0)
+        or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then
+        begin
+        t:= hwRound(Gear^.Y) - cHHRadius - 12 + WorldDy;
+        if (cTagsMask and htTransparent) <> 0 then
+            glColor4f(1, 1, 1, 0.5);
+        if ((cTagsMask and htHealth) <> 0) then
+            begin
+            dec(t, HealthTagTex^.h + 2);
+            DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex)
+            end;
+        if (cTagsMask and htName) <> 0 then
+            begin
+            dec(t, NameTagTex^.h + 2);
+            DrawCentered(hwRound(Gear^.X) + WorldDx, t, NameTagTex)
+            end;
+        if (cTagsMask and htTeamName) <> 0 then
+            begin
+            dec(t, Team^.NameTagTex^.h + 2);
+            DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex)
+            end;
+        if (cTagsMask and htTransparent) <> 0 then
+            glColor4f(1, 1, 1, 1)
+        end;
+    if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog
+        begin
+        if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then
+            DrawSprite(sprFinger, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 64 + WorldDy,
+                        GameTicks div 32 mod 16);
 
-		if (Gear^.State and gstDrowning) = 0 then
-			if (Gear^.State and gstHHThinking) <> 0 then
-				DrawSprite(sprQuestion, hwRound(Gear^.X) - 10 + WorldDx, hwRound(Gear^.Y) - cHHRadius - 34 + WorldDy, 0)
-		end
-	end;
+        if (Gear^.State and gstDrowning) = 0 then
+            if (Gear^.State and gstHHThinking) <> 0 then
+                DrawSprite(sprQuestion, hwRound(Gear^.X) - 10 + WorldDx, hwRound(Gear^.Y) - cHHRadius - 34 + WorldDy, 0)
+        end
+    end;
 
 if Gear^.Invulnerable then
     begin
     glColor4f(1, 1, 1, 0.25 + abs(1 - ((RealTicks div 2) mod 1500) / 750));
-	DrawSprite(sprInvulnerable, sx - 24, sy - 24, 0);
-	glColor4f(1, 1, 1, 1);
+    DrawSprite(sprInvulnerable, sx - 24, sy - 24, 0);
+    glColor4f(1, 1, 1, 1);
     end;
 if cVampiric and
    (CurrentHedgehog^.Gear <> nil) and
@@ -1393,141 +1393,141 @@
     begin
     glColor4f(1, 1, 1, 0.25 + abs(1 - (RealTicks mod 1500) / 750));
     DrawSprite(sprVampiric, sx - 24, sy - 24, 0);
-	glColor4f(1, 1, 1, 1);
+    glColor4f(1, 1, 1, 1);
     end;
 end;
 
 procedure DrawRopeLinesRQ(Gear: PGear);
 begin
 with RopePoints do
-	begin
-	rounded[Count].X:= hwRound(Gear^.X);
-	rounded[Count].Y:= hwRound(Gear^.Y);
-	rounded[Count + 1].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X);
-	rounded[Count + 1].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y);
-	end;
+    begin
+    rounded[Count].X:= hwRound(Gear^.X);
+    rounded[Count].Y:= hwRound(Gear^.Y);
+    rounded[Count + 1].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X);
+    rounded[Count + 1].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y);
+    end;
 
 if (RopePoints.Count > 0) or (Gear^.Elasticity.QWordValue > 0) then
-	begin
-	glDisable(GL_TEXTURE_2D);
-	//glEnable(GL_LINE_SMOOTH);
+    begin
+    glDisable(GL_TEXTURE_2D);
+    //glEnable(GL_LINE_SMOOTH);
 
-	glPushMatrix;
+    glPushMatrix;
 
-	glTranslatef(WorldDx, WorldDy, 0);
+    glTranslatef(WorldDx, WorldDy, 0);
 
-	glLineWidth(4.0);
+    glLineWidth(4.0);
 
-	glColor4f(0.8, 0.8, 0.8, 1);
+    glColor4f(0.8, 0.8, 0.8, 1);
 
-	glEnableClientState(GL_VERTEX_ARRAY);
-	glVertexPointer(2, GL_FLOAT, 0, @RopePoints.rounded[0]);
-	glDrawArrays(GL_LINE_STRIP, 0, RopePoints.Count + 2);
-	glColor4f(1, 1, 1, 1);
+    glEnableClientState(GL_VERTEX_ARRAY);
+    glVertexPointer(2, GL_FLOAT, 0, @RopePoints.rounded[0]);
+    glDrawArrays(GL_LINE_STRIP, 0, RopePoints.Count + 2);
+    glColor4f(1, 1, 1, 1);
 
-	glPopMatrix;
+    glPopMatrix;
 
-	glEnable(GL_TEXTURE_2D);
-	//glDisable(GL_LINE_SMOOTH)
-	end
+    glEnable(GL_TEXTURE_2D);
+    //glDisable(GL_LINE_SMOOTH)
+    end
 end;
 
 procedure DrawRope(Gear: PGear);
 var roplen: LongInt;
-	i: Longword;
+    i: Longword;
 
-	procedure DrawRopeLine(X1, Y1, X2, Y2: LongInt);
-	var  eX, eY, dX, dY: LongInt;
-		i, sX, sY, x, y, d: LongInt;
-		b: boolean;
-	begin
-	if (X1 = X2) and (Y1 = Y2) then
-	begin
-	//OutError('WARNING: zero length rope line!', false);
-	exit
-	end;
-	eX:= 0;
-	eY:= 0;
-	dX:= X2 - X1;
-	dY:= Y2 - Y1;
+    procedure DrawRopeLine(X1, Y1, X2, Y2: LongInt);
+    var  eX, eY, dX, dY: LongInt;
+        i, sX, sY, x, y, d: LongInt;
+        b: boolean;
+    begin
+    if (X1 = X2) and (Y1 = Y2) then
+    begin
+    //OutError('WARNING: zero length rope line!', false);
+    exit
+    end;
+    eX:= 0;
+    eY:= 0;
+    dX:= X2 - X1;
+    dY:= Y2 - Y1;
 
-	if (dX > 0) then sX:= 1
-	else
-	if (dX < 0) then
-		begin
-		sX:= -1;
-		dX:= -dX
-		end else sX:= dX;
+    if (dX > 0) then sX:= 1
+    else
+    if (dX < 0) then
+        begin
+        sX:= -1;
+        dX:= -dX
+        end else sX:= dX;
 
-	if (dY > 0) then sY:= 1
-	else
-	if (dY < 0) then
-		begin
-		sY:= -1;
-		dY:= -dY
-		end else sY:= dY;
+    if (dY > 0) then sY:= 1
+    else
+    if (dY < 0) then
+        begin
+        sY:= -1;
+        dY:= -dY
+        end else sY:= dY;
 
-		if (dX > dY) then d:= dX
-					else d:= dY;
+        if (dX > dY) then d:= dX
+                    else d:= dY;
 
-		x:= X1;
-		y:= Y1;
+        x:= X1;
+        y:= Y1;
 
-		for i:= 0 to d do
-			begin
-			inc(eX, dX);
-			inc(eY, dY);
-			b:= false;
-			if (eX > d) then
-				begin
-				dec(eX, d);
-				inc(x, sX);
-				b:= true
-				end;
-			if (eY > d) then
-				begin
-				dec(eY, d);
-				inc(y, sY);
-				b:= true
-				end;
-			if b then
-				begin
-				inc(roplen);
-				if (roplen mod 4) = 0 then DrawSprite(sprRopeNode, x - 2, y - 2, 0)
-				end
-		end
-	end;
+        for i:= 0 to d do
+            begin
+            inc(eX, dX);
+            inc(eY, dY);
+            b:= false;
+            if (eX > d) then
+                begin
+                dec(eX, d);
+                inc(x, sX);
+                b:= true
+                end;
+            if (eY > d) then
+                begin
+                dec(eY, d);
+                inc(y, sY);
+                b:= true
+                end;
+            if b then
+                begin
+                inc(roplen);
+                if (roplen mod 4) = 0 then DrawSprite(sprRopeNode, x - 2, y - 2, 0)
+                end
+        end
+    end;
 begin
-	if cReducedQuality then
-		DrawRopeLinesRQ(Gear)
-	else
-		begin
-		roplen:= 0;
-		if RopePoints.Count > 0 then
-			begin
-			i:= 0;
-			while i < Pred(RopePoints.Count) do
-					begin
-					DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
-								hwRound(RopePoints.ar[Succ(i)].X) + WorldDx, hwRound(RopePoints.ar[Succ(i)].Y) + WorldDy);
-					inc(i)
-					end;
-			DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
-						hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy);
-			DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
-						hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
-			end else
-			if Gear^.Elasticity.QWordValue > 0 then
-			DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
-						hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
-		end;
+    if cReducedQuality then
+        DrawRopeLinesRQ(Gear)
+    else
+        begin
+        roplen:= 0;
+        if RopePoints.Count > 0 then
+            begin
+            i:= 0;
+            while i < Pred(RopePoints.Count) do
+                    begin
+                    DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
+                                hwRound(RopePoints.ar[Succ(i)].X) + WorldDx, hwRound(RopePoints.ar[Succ(i)].Y) + WorldDy);
+                    inc(i)
+                    end;
+            DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
+                        hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy);
+            DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
+                        hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
+            end else
+            if Gear^.Elasticity.QWordValue > 0 then
+            DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
+                        hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
+        end;
 
 
 if RopePoints.Count > 0 then
-	DrawRotated(sprRopeHook, hwRound(RopePoints.ar[0].X) + WorldDx, hwRound(RopePoints.ar[0].Y) + WorldDy, 1, RopePoints.HookAngle)
-	else
-	if Gear^.Elasticity.QWordValue > 0 then
-		DrawRotated(sprRopeHook, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
+    DrawRotated(sprRopeHook, hwRound(RopePoints.ar[0].X) + WorldDx, hwRound(RopePoints.ar[0].Y) + WorldDy, 1, RopePoints.HookAngle)
+    else
+    if Gear^.Elasticity.QWordValue > 0 then
+        DrawRotated(sprRopeHook, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
 end;
 
 procedure DrawGears;
@@ -1536,10 +1536,10 @@
 begin
 Gear:= GearsList;
 while Gear<>nil do
-	begin
-	case Gear^.Kind of
+    begin
+    case Gear^.Kind of
        gtAmmo_Bomb: DrawRotated(sprBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
-	gtMolotov: DrawRotated(sprMolotov, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
+    gtMolotov: DrawRotated(sprMolotov, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
 
        gtRCPlane: begin
                   if (Gear^.Tag = -1) then
@@ -1547,7 +1547,7 @@
                   else
                      DrawRotated(sprPlane, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,0,DxDy2Angle(Gear^.dY, Gear^.dX));
                   if ((TrainingFlags and tfRCPlane) <> 0) and (TrainingTargetGear <> nil) and ((Gear^.State and gstDrowning) = 0) then
-					 DrawRotatedf(sprFinger, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, GameTicks div 32 mod 16, 0, DxDy2Angle(Gear^.X - TrainingTargetGear^.X, TrainingTargetGear^.Y - Gear^.Y));
+                     DrawRotatedf(sprFinger, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, GameTicks div 32 mod 16, 0, DxDy2Angle(Gear^.X - TrainingTargetGear^.X, TrainingTargetGear^.Y - Gear^.Y));
                   end;
        gtBall: DrawRotatedf(sprBalls, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tag,0, DxDy2Angle(Gear^.dY, Gear^.dX));
 
@@ -1602,9 +1602,9 @@
          gtCluster: DrawSprite(sprClusterParticle, hwRound(Gear^.X) - 8 + WorldDx, hwRound(Gear^.Y) - 8 + WorldDy, 0);
            gtFlame: DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (GameTicks div 128 + LongWord(Gear^.Tag)) mod 8, 1, 16, 16);
        gtParachute: begin
-					DrawSprite(sprParachute, hwRound(Gear^.X) - 24 + WorldDx, hwRound(Gear^.Y) - 48 + WorldDy, 0);
-					DrawAltWeapon(Gear, hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy)
-					end;
+                    DrawSprite(sprParachute, hwRound(Gear^.X) - 24 + WorldDx, hwRound(Gear^.Y) - 48 + WorldDy, 0);
+                    DrawAltWeapon(Gear, hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy)
+                    end;
        gtAirAttack: if Gear^.Tag > 0 then DrawSprite(sprAirplane, hwRound(Gear^.X) - SpritesData[sprAirplane].Width div 2 + WorldDx, hwRound(Gear^.Y) - SpritesData[sprAirplane].Height div 2 + WorldDy, 0)
                                      else DrawSprite(sprAirplane, hwRound(Gear^.X) - SpritesData[sprAirplane].Width div 2 + WorldDx, hwRound(Gear^.Y) - SpritesData[sprAirplane].Height div 2 + WorldDy, 1);
          gtAirBomb: DrawRotated(sprAirBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
@@ -1615,10 +1615,10 @@
                     end;
         gtSwitcher: DrawSprite(sprSwitch, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 56 + WorldDy, (GameTicks shr 6) mod 12);
           gtTarget: begin
-					glColor4f(1, 1, 1, Gear^.Timer / 1000);
-					DrawSprite(sprTarget, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0);
-					glColor4f(1, 1, 1, 1);
-					end;
+                    glColor4f(1, 1, 1, Gear^.Timer / 1000);
+                    DrawSprite(sprTarget, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0);
+                    glColor4f(1, 1, 1, 1);
+                    end;
           gtMortar: DrawRotated(sprMortar, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
           gtCake: if Gear^.Pos = 6 then
                      DrawRotatedf(sprCakeWalk, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (GameTicks div 40) mod 6, hwSign(Gear^.dX), Gear^.DirAngle * hwSign(Gear^.dX) + 90)
@@ -1638,46 +1638,46 @@
 procedure FreeGearsList;
 var t, tt: PGear;
 begin
-	tt:= GearsList;
-	GearsList:= nil;
-	while tt <> nil do
-	begin
-		t:= tt;
-		tt:= tt^.NextGear;
-		Dispose(t)
-	end;
+    tt:= GearsList;
+    GearsList:= nil;
+    while tt <> nil do
+    begin
+        t:= tt;
+        tt:= tt^.NextGear;
+        Dispose(t)
+    end;
 end;
 
 procedure AddMiscGears;
 var i: LongInt;
-	Gear: PGear;
+    Gear: PGear;
 begin
 AddGear(0, 0, gtATStartGame, 0, _0, _0, 2000);
 
 if (TrainingFlags and tfSpawnTargets) <> 0 then
-	begin
-	TrainingTargetGear:= AddGear(0, 0, gtTarget, 0, _0, _0, 0);
-	FindPlace(TrainingTargetGear, false, 0, LAND_WIDTH);
-	end;
+    begin
+    TrainingTargetGear:= AddGear(0, 0, gtTarget, 0, _0, _0, 0);
+    FindPlace(TrainingTargetGear, false, 0, LAND_WIDTH);
+    end;
 
 if ((GameFlags and gfForts) = 0) then
-	begin
-	// TODO: exclude each other or allow both, mines and explosives, on same map?
-	if ((GameFlags and gfMines) <> 0) then
-		for i:= 0 to Pred(cLandAdditions) do
-			begin
-			Gear:= AddGear(0, 0, gtMine, 0, _0, _0, 0);
-			Gear^.TriggerId:= i + 1;
-			FindPlace(Gear, false, 0, LAND_WIDTH);
-			end;
+    begin
+    // TODO: exclude each other or allow both, mines and explosives, on same map?
+    if ((GameFlags and gfMines) <> 0) then
+        for i:= 0 to Pred(cLandAdditions) do
+            begin
+            Gear:= AddGear(0, 0, gtMine, 0, _0, _0, 0);
+            Gear^.TriggerId:= i + 1;
+            FindPlace(Gear, false, 0, LAND_WIDTH);
+            end;
 //  No game flag for this for now
-//	if ((GameFlags and gfExplosives) <> 0) then
-		for i:= 0 to Pred(cExplosives) do
-			begin
-			Gear:= AddGear(0, 0, gtExplosives, 0, _0, _0, 0);
-			FindPlace(Gear, false, 0, LAND_WIDTH);
-			end;
-	end;
+//  if ((GameFlags and gfExplosives) <> 0) then
+        for i:= 0 to Pred(cExplosives) do
+            begin
+            Gear:= AddGear(0, 0, gtExplosives, 0, _0, _0, 0);
+            FindPlace(Gear, false, 0, LAND_WIDTH);
+            end;
+    end;
 
 if (GameFlags and gfLowGravity) <> 0 then
     cGravity:= cMaxWindSpeed / 2;
@@ -1710,56 +1710,56 @@
 if (Mask and EXPLAutoSound) <> 0 then PlaySound(sndExplosion);
 
 if (Mask and EXPLAllDamageInRadius) = 0 then
-	dmgRadius:= Radius shl 1
+    dmgRadius:= Radius shl 1
 else
-	dmgRadius:= Radius;
+    dmgRadius:= Radius;
 
 Gear:= GearsList;
 while Gear <> nil do
-	begin
-	dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
-	if (dmg > 1) and
-		((Gear^.State and gstNoDamage) = 0) then
-		begin
-		dmg:= ModifyDamage(min(dmg div 2, Radius), Gear);
-		case Gear^.Kind of
-			gtHedgehog,
-				gtMine,
-				gtCase,
-				gtTarget,
-				gtFlame,
-				gtExplosives: begin
-						//{$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF}
-						if (Mask and EXPLNoDamage) = 0 then
-							begin
-							if not Gear^.Invulnerable then
+    begin
+    dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
+    if (dmg > 1) and
+        ((Gear^.State and gstNoDamage) = 0) then
+        begin
+        dmg:= ModifyDamage(min(dmg div 2, Radius), Gear);
+        case Gear^.Kind of
+            gtHedgehog,
+                gtMine,
+                gtCase,
+                gtTarget,
+                gtFlame,
+                gtExplosives: begin
+                        //{$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF}
+                        if (Mask and EXPLNoDamage) = 0 then
+                            begin
+                            if not Gear^.Invulnerable then
                                 ApplyDamage(Gear, dmg)
                             else
                                 Gear^.State:= Gear^.State or gstWinner;
-							end;
-						if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then
-							begin
-							DeleteCI(Gear);
-							Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X));
-							Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - int2hwFloat(Y));
-							Gear^.State:= (Gear^.State or gstMoving) and (not gstLoser);
-							if not Gear^.Invulnerable then
-								Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner);
-							Gear^.Active:= true;
-							FollowGear:= Gear
-							end;
-						end;
-				gtGrave: begin
-						Gear^.dY:= - _0_004 * dmg;
-						Gear^.Active:= true;
-						end;
-			end;
-		end;
-	Gear:= Gear^.NextGear
-	end;
+                            end;
+                        if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then
+                            begin
+                            DeleteCI(Gear);
+                            Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X));
+                            Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - int2hwFloat(Y));
+                            Gear^.State:= (Gear^.State or gstMoving) and (not gstLoser);
+                            if not Gear^.Invulnerable then
+                                Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner);
+                            Gear^.Active:= true;
+                            FollowGear:= Gear
+                            end;
+                        end;
+                gtGrave: begin
+                        Gear^.dY:= - _0_004 * dmg;
+                        Gear^.Active:= true;
+                        end;
+            end;
+        end;
+    Gear:= Gear^.NextGear
+    end;
 
 if (Mask and EXPLDontDraw) = 0 then
-	if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius);
+    if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius);
 
 uAIMisc.AwareOfExplosion(0, 0, 0)
 end;
@@ -1771,34 +1771,34 @@
 Gear^.Radius:= cShotgunRadius;
 t:= GearsList;
 while t <> nil do
-	begin
-	dmg:= ModifyDamage(min(Gear^.Radius + t^.Radius - hwRound(Distance(Gear^.X - t^.X, Gear^.Y - t^.Y)), 25), t);
-	if dmg > 0 then
-	case t^.Kind of
-		gtHedgehog,
-			gtMine,
-			gtCase,
-			gtTarget,
-			gtExplosives: begin
+    begin
+    dmg:= ModifyDamage(min(Gear^.Radius + t^.Radius - hwRound(Distance(Gear^.X - t^.X, Gear^.Y - t^.Y)), 25), t);
+    if dmg > 0 then
+    case t^.Kind of
+        gtHedgehog,
+            gtMine,
+            gtCase,
+            gtTarget,
+            gtExplosives: begin
                     if (not t^.Invulnerable) then
                         ApplyDamage(t, dmg)
                     else
                         Gear^.State:= Gear^.State or gstWinner;
 
-					DeleteCI(t);
-					t^.dX:= t^.dX + Gear^.dX * dmg * _0_01 + SignAs(cHHKick, Gear^.dX);
-					t^.dY:= t^.dY + Gear^.dY * dmg * _0_01;
-					t^.State:= t^.State or gstMoving;
-					t^.Active:= true;
-					FollowGear:= t
-					end;
-			gtGrave: begin
-					t^.dY:= - _0_1;
-					t^.Active:= true
-					end;
-		end;
-	t:= t^.NextGear
-	end;
+                    DeleteCI(t);
+                    t^.dX:= t^.dX + Gear^.dX * dmg * _0_01 + SignAs(cHHKick, Gear^.dX);
+                    t^.dY:= t^.dY + Gear^.dY * dmg * _0_01;
+                    t^.State:= t^.State or gstMoving;
+                    t^.Active:= true;
+                    FollowGear:= t
+                    end;
+            gtGrave: begin
+                    t^.dY:= - _0_1;
+                    t^.Active:= true
+                    end;
+        end;
+    t:= t^.NextGear
+    end;
 if (GameFlags and gfSolidLand) = 0 then DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cShotgunRadius)
 end;
 
@@ -1812,28 +1812,28 @@
 
 if (Ammo^.Kind = gtFlame) and (i > 0) then Ammo^.Health:= 0;
 while i > 0 do
-	begin
-	dec(i);
-	Gear:= t^.ar[i];
+    begin
+    dec(i);
+    Gear:= t^.ar[i];
     tmpDmg:= ModifyDamage(Damage, Gear);
-	if (Gear^.State and gstNoDamage) = 0 then
-		begin
-		if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then Gear^.FlightTime:= 1;
-		
-		case Gear^.Kind of
-			gtHedgehog,
-			gtMine,
-			gtTarget,
-			gtCase,
-			gtExplosives: begin
-					if (Ammo^.Kind = gtDrill) then begin Ammo^.Timer:= 0; exit; end;
+    if (Gear^.State and gstNoDamage) = 0 then
+        begin
+        if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then Gear^.FlightTime:= 1;
+        
+        case Gear^.Kind of
+            gtHedgehog,
+            gtMine,
+            gtTarget,
+            gtCase,
+            gtExplosives: begin
+                    if (Ammo^.Kind = gtDrill) then begin Ammo^.Timer:= 0; exit; end;
                     if (not Gear^.Invulnerable) then
                         ApplyDamage(Gear, tmpDmg)
                     else
                         Gear^.State:= Gear^.State or gstWinner;
                     if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then ApplyDamage(Gear, tmpDmg * 100); // crank up damage for explosives + blowtorch
 
-					DeleteCI(Gear);
+                    DeleteCI(Gear);
                     if (Gear^.Kind = gtHedgehog) and PHedgehog(Gear^.Hedgehog)^.King then
                         begin
                         Gear^.dX:= Ammo^.dX * Power * _0_005;
@@ -1845,88 +1845,88 @@
                         Gear^.dY:= Ammo^.dY * Power * _0_01
                         end;
 
-					Gear^.Active:= true;
-					Gear^.State:= Gear^.State or gstMoving;
+                    Gear^.Active:= true;
+                    Gear^.State:= Gear^.State or gstMoving;
 
-					if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
-						begin
-						if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX))
-							or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
-						if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX))
-							or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
-						if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX))
-							or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
-						end;
-					
+                    if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
+                        begin
+                        if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX))
+                            or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
+                        if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX))
+                            or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
+                        if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX))
+                            or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
+                        end;
+                    
                     if (Ammo^.Kind <> gtFlame) or ((Ammo^.State and gsttmpFlag) = 0) then FollowGear:= Gear
-					end;
-		end
-		end;
-	end;
+                    end;
+        end
+        end;
+    end;
 if i <> 0 then SetAllToActive
 end;
 
 procedure AssignHHCoords;
 var i, t, p, j: LongInt;
-	ar: array[0..Pred(cMaxHHs)] of PHedgehog;
-	Count: Longword;
+    ar: array[0..Pred(cMaxHHs)] of PHedgehog;
+    Count: Longword;
 begin
 if (GameFlags and gfPlaceHog) <> 0 then PlacingHogs:= true;
 if (GameFlags and (gfForts or gfDivideTeams)) <> 0 then
-	begin
-	t:= 0;
-	TryDo(ClansCount = 2, 'More or less than 2 clans on map in divided teams mode!', true);
-	for p:= 0 to 1 do
-		begin
-		with ClansArray[p]^ do
-			for j:= 0 to Pred(TeamsNumber) do
-				with Teams[j]^ do
-					for i:= 0 to cMaxHHIndex do
-						with Hedgehogs[i] do
-							if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
-								begin
+    begin
+    t:= 0;
+    TryDo(ClansCount = 2, 'More or less than 2 clans on map in divided teams mode!', true);
+    for p:= 0 to 1 do
+        begin
+        with ClansArray[p]^ do
+            for j:= 0 to Pred(TeamsNumber) do
+                with Teams[j]^ do
+                    for i:= 0 to cMaxHHIndex do
+                        with Hedgehogs[i] do
+                            if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
+                                begin
                                 if PlacingHogs then Unplaced:= true
                                 else FindPlace(Gear, false, t, t + LAND_WIDTH div 2);// could make Gear == nil;
-								if Gear <> nil then
-									begin
-									Gear^.Pos:= GetRandom(49);
-									Gear^.dX.isNegative:= p = 1;
-									end
-								end;
-		t:= LAND_WIDTH div 2
-		end
-	end else // mix hedgehogs
-	begin
-	Count:= 0;
-	for p:= 0 to Pred(TeamsCount) do
-		with TeamsArray[p]^ do
-		begin
-		for i:= 0 to cMaxHHIndex do
-			with Hedgehogs[i] do
-				if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
-					begin
-					ar[Count]:= @Hedgehogs[i];
-					inc(Count)
-					end;
-		end;
+                                if Gear <> nil then
+                                    begin
+                                    Gear^.Pos:= GetRandom(49);
+                                    Gear^.dX.isNegative:= p = 1;
+                                    end
+                                end;
+        t:= LAND_WIDTH div 2
+        end
+    end else // mix hedgehogs
+    begin
+    Count:= 0;
+    for p:= 0 to Pred(TeamsCount) do
+        with TeamsArray[p]^ do
+        begin
+        for i:= 0 to cMaxHHIndex do
+            with Hedgehogs[i] do
+                if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
+                    begin
+                    ar[Count]:= @Hedgehogs[i];
+                    inc(Count)
+                    end;
+        end;
     // unC0Rr, while it is true user can watch value on map screen, IMO this (and check above) should be enforced in UI
     // - is there a good place to put values for the different widgets to check?  Right now they are kind of disconnected.
     //it would be nice if divide teams, forts mode and hh per map could all be checked by the team widget, or maybe disable start button
-	TryDo(Count <= MaxHedgehogs, 'Too many hedgehogs for this map! (max # is ' + inttostr(MaxHedgehogs) + ')', true);
-	while (Count > 0) do
-		begin
-		i:= GetRandom(Count);
+    TryDo(Count <= MaxHedgehogs, 'Too many hedgehogs for this map! (max # is ' + inttostr(MaxHedgehogs) + ')', true);
+    while (Count > 0) do
+        begin
+        i:= GetRandom(Count);
         if PlacingHogs then ar[i]^.Unplaced:= true
         else FindPlace(ar[i]^.Gear, false, 0, LAND_WIDTH);
-		if ar[i]^.Gear <> nil then
-			begin
-			ar[i]^.Gear^.dX.isNegative:= hwRound(ar[i]^.Gear^.X) > LAND_WIDTH div 2;
-			ar[i]^.Gear^.Pos:= GetRandom(19)
-			end;
-		ar[i]:= ar[Count - 1];
-		dec(Count)
-		end
-	end
+        if ar[i]^.Gear <> nil then
+            begin
+            ar[i]^.Gear^.dX.isNegative:= hwRound(ar[i]^.Gear^.X) > LAND_WIDTH div 2;
+            ar[i]^.Gear^.Pos:= GetRandom(19)
+            end;
+        ar[i]:= ar[Count - 1];
+        dec(Count)
+        end
+    end
 end;
 
 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
@@ -1937,12 +1937,12 @@
 rY:= sqr(rY);
 
 while t <> nil do
-	begin
-	if (t <> Gear) and (t^.Kind = Kind) then
-		if not((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1) then
-		exit(t);
-	t:= t^.NextGear
-	end;
+    begin
+    if (t <> Gear) and (t^.Kind = Kind) then
+        if not((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1) then
+        exit(t);
+    t:= t^.NextGear
+    end;
 
 CheckGearNear:= nil
 end;
@@ -1952,19 +1952,19 @@
 begin
 t:= GearsList;
 while t <> nil do
-	begin
-	if (t^.Kind = gtHedgehog) and (t^.Y < Ammo^.Y) then
-		if not (hwSqr(Ammo^.X - t^.X) + hwSqr(Ammo^.Y - t^.Y - int2hwFloat(cHHRadius)) * 2 > _2) then
-			begin
+    begin
+    if (t^.Kind = gtHedgehog) and (t^.Y < Ammo^.Y) then
+        if not (hwSqr(Ammo^.X - t^.X) + hwSqr(Ammo^.Y - t^.Y - int2hwFloat(cHHRadius)) * 2 > _2) then
+            begin
             ApplyDamage(t, 5);
-			t^.dX:= t^.dX + (t^.X - Ammo^.X) * _0_02;
-			t^.dY:= - _0_25;
-			t^.Active:= true;
-			DeleteCI(t);
-			FollowGear:= t
-			end;
-	t:= t^.NextGear
-	end;
+            t^.dX:= t^.dX + (t^.X - Ammo^.X) * _0_02;
+            t^.dY:= - _0_25;
+            t^.Active:= true;
+            DeleteCI(t);
+            FollowGear:= t
+            end;
+    t:= t^.NextGear
+    end;
 end;}
 
 function CheckGearsNear(mX, mY: LongInt; Kind: TGearsType; rX, rY: LongInt): PGear;
@@ -1974,12 +1974,12 @@
 rX:= sqr(rX);
 rY:= sqr(rY);
 while t <> nil do
-	begin
-	if t^.Kind in Kind then
-		if not (hwSqr(int2hwFloat(mX) - t^.X) / rX + hwSqr(int2hwFloat(mY) - t^.Y) / rY > _1) then
-			exit(t);
-	t:= t^.NextGear
-	end;
+    begin
+    if t^.Kind in Kind then
+        if not (hwSqr(int2hwFloat(mX) - t^.X) / rX + hwSqr(int2hwFloat(mY) - t^.Y) / rY > _1) then
+            exit(t);
+    t:= t^.NextGear
+    end;
 CheckGearsNear:= nil
 end;
 
@@ -1990,10 +1990,10 @@
 
 t:= GearsList;
 while t <> nil do
-	begin
-	if t^.Kind = Kind then inc(count);
-	t:= t^.NextGear
-	end;
+    begin
+    if t^.Kind = Kind then inc(count);
+    t:= t^.NextGear
+    end;
 CountGears:= count;
 end;
 
@@ -2015,14 +2015,14 @@
 
 // avoid health crates if all hogs are invulnerable
 if (t < 13) and ((GameFlags and gfInvulnerable) <> 0) then t:= t * 13 div 20 + 7;
-	
+    
 //case getrandom(20) of
 case t of
      0..6: begin
         FollowGear:= AddGear(0, 0, gtCase, 0, _0, _0, 0);
         FollowGear^.Health:= 25;
         FollowGear^.Pos:= posCaseHealth;
-		AddCaption(GetEventString(eidNewHealthPack), cWhiteColor, capgrpGameState);
+        AddCaption(GetEventString(eidNewHealthPack), cWhiteColor, capgrpGameState);
         end;
      7..13: begin
         t:= 0;
@@ -2044,7 +2044,7 @@
               end;
             FollowGear^.Pos:= posCaseAmmo;
             FollowGear^.State:= Longword(i);
-			AddCaption(GetEventString(eidNewAmmoPack), cWhiteColor, capgrpGameState);
+            AddCaption(GetEventString(eidNewAmmoPack), cWhiteColor, capgrpGameState);
             end
         end;
      14..19: begin
@@ -2067,112 +2067,112 @@
               end;
             FollowGear^.Pos:= posCaseUtility;
             FollowGear^.State:= Longword(i);
-			AddCaption(GetEventString(eidNewUtilityPack), cWhiteColor, capgrpGameState);
+            AddCaption(GetEventString(eidNewUtilityPack), cWhiteColor, capgrpGameState);
             end
         end;
      end;
 // handles case of no ammo or utility crates - considered also placing booleans in uAmmos and altering probabilities
 if (FollowGear <> nil) then
-	begin
-	FindPlace(FollowGear, true, 0, LAND_WIDTH);
+    begin
+    FindPlace(FollowGear, true, 0, LAND_WIDTH);
 
-	if (FollowGear <> nil) then
-		PlaySound(sndReinforce, CurrentTeam^.voicepack)
-	end
+    if (FollowGear <> nil) then
+        PlaySound(sndReinforce, CurrentTeam^.voicepack)
+    end
 end;
 
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt);
 
-	function CountNonZeroz(x, y, r, c: LongInt): LongInt;
-	var i: LongInt;
-		count: LongInt = 0;
-	begin
-	if (y and LAND_HEIGHT_MASK) = 0 then
-		for i:= max(x - r, 0) to min(x + r, LAND_WIDTH - 4) do
-			if Land[y, i] <> 0 then
+    function CountNonZeroz(x, y, r, c: LongInt): LongInt;
+    var i: LongInt;
+        count: LongInt = 0;
+    begin
+    if (y and LAND_HEIGHT_MASK) = 0 then
+        for i:= max(x - r, 0) to min(x + r, LAND_WIDTH - 4) do
+            if Land[y, i] <> 0 then
                begin
                inc(count);
                if count = c then exit(count)
                end;
-	CountNonZeroz:= count;
-	end;
+    CountNonZeroz:= count;
+    end;
 
 var x: LongInt;
-	y, sy: LongInt;
-	ar: array[0..511] of TPoint;
-	ar2: array[0..1023] of TPoint;
-	cnt, cnt2: Longword;
-	delta: LongInt;
+    y, sy: LongInt;
+    ar: array[0..511] of TPoint;
+    ar2: array[0..1023] of TPoint;
+    cnt, cnt2: Longword;
+    delta: LongInt;
 begin
 delta:= 250;
 cnt2:= 0;
 repeat
-	x:= Left + LongInt(GetRandom(Delta));
-	repeat
-		inc(x, Delta);
-		cnt:= 0;
+    x:= Left + LongInt(GetRandom(Delta));
+    repeat
+        inc(x, Delta);
+        cnt:= 0;
         if topY > 1024 then
-		    y:= 1024-Gear^.Radius * 2
+            y:= 1024-Gear^.Radius * 2
         else
-		    y:= topY-Gear^.Radius * 2;
-		while y < LAND_HEIGHT do
-			begin
-			repeat
-				inc(y, 2);
-			until (y >= LAND_HEIGHT) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) = 0);
+            y:= topY-Gear^.Radius * 2;
+        while y < LAND_HEIGHT do
+            begin
+            repeat
+                inc(y, 2);
+            until (y >= LAND_HEIGHT) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) = 0);
 
-			sy:= y;
+            sy:= y;
 
-			repeat
-				inc(y);
-			until (y >= LAND_HEIGHT) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) <> 0);
+            repeat
+                inc(y);
+            until (y >= LAND_HEIGHT) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) <> 0);
             
             if (y - sy > Gear^.Radius * 2) and
                (((Gear^.Kind = gtExplosives)
-			       and (y < LAND_HEIGHT-1)
-			       and (CheckGearsNear(x, y - Gear^.Radius, [gtFlame, gtHedgehog, gtMine, gtCase, gtExplosives], 60, 60) = nil)
+                   and (y < LAND_HEIGHT-1)
+                   and (CheckGearsNear(x, y - Gear^.Radius, [gtFlame, gtHedgehog, gtMine, gtCase, gtExplosives], 60, 60) = nil)
                    and (CountNonZeroz(x, y+1, Gear^.Radius - 1, Gear^.Radius+1) > Gear^.Radius)) 
                or
                  ((Gear^.Kind <> gtExplosives)
-			       and (y < LAND_HEIGHT)
-				   and (CheckGearsNear(x, y - Gear^.Radius, [gtFlame, gtHedgehog, gtMine, gtCase, gtExplosives], 110, 110) = nil))) then
-				begin
-				ar[cnt].X:= x;
-				if withFall then ar[cnt].Y:= sy + Gear^.Radius
-							else ar[cnt].Y:= y - Gear^.Radius;
-				inc(cnt)
-				end;
+                   and (y < LAND_HEIGHT)
+                   and (CheckGearsNear(x, y - Gear^.Radius, [gtFlame, gtHedgehog, gtMine, gtCase, gtExplosives], 110, 110) = nil))) then
+                begin
+                ar[cnt].X:= x;
+                if withFall then ar[cnt].Y:= sy + Gear^.Radius
+                            else ar[cnt].Y:= y - Gear^.Radius;
+                inc(cnt)
+                end;
 
-			inc(y, 45)
-			end;
+            inc(y, 45)
+            end;
 
-		if cnt > 0 then
-			with ar[GetRandom(cnt)] do
-				begin
-				ar2[cnt2].x:= x;
-				ar2[cnt2].y:= y;
-				inc(cnt2)
-				end
-	until (x + Delta > Right);
+        if cnt > 0 then
+            with ar[GetRandom(cnt)] do
+                begin
+                ar2[cnt2].x:= x;
+                ar2[cnt2].y:= y;
+                inc(cnt2)
+                end
+    until (x + Delta > Right);
 
-	dec(Delta, 60)
+    dec(Delta, 60)
 until (cnt2 > 0) or (Delta < 70);
 
 if cnt2 > 0 then
-	with ar2[GetRandom(cnt2)] do
-		begin
-		Gear^.X:= int2hwFloat(x);
-		Gear^.Y:= int2hwFloat(y);
-		{$IFDEF DEBUGFILE}
-		AddFileLog('Assigned Gear coordinates (' + inttostr(x) + ',' + inttostr(y) + ')');
-		{$ENDIF}
-		end
-	else
-	begin
-	OutError('Can''t find place for Gear', false);
-	DeleteGear(Gear);
-	Gear:= nil
-	end
+    with ar2[GetRandom(cnt2)] do
+        begin
+        Gear^.X:= int2hwFloat(x);
+        Gear^.Y:= int2hwFloat(y);
+        {$IFDEF DEBUGFILE}
+        AddFileLog('Assigned Gear coordinates (' + inttostr(x) + ',' + inttostr(y) + ')');
+        {$ENDIF}
+        end
+    else
+    begin
+    OutError('Can''t find place for Gear', false);
+    DeleteGear(Gear);
+    Gear:= nil
+    end
 end;
 
 function ModifyDamage(dmg: Longword; Gear: PGear): Longword;
@@ -2196,33 +2196,33 @@
 GearByUID:= nil;
 gear:= GearsList;
 while gear <> nil do
-	begin
-	if gear^.uid = uid then
-		begin
-			GearByUID:= gear;
-			exit
-		end;
-	gear:= gear^.NextGear
-	end
+    begin
+    if gear^.uid = uid then
+        begin
+            GearByUID:= gear;
+            exit
+        end;
+    gear:= gear^.NextGear
+    end
 end;
 
 procedure init_uGears;
 begin
-	CurAmmoGear:= nil;
-	GearsList:= nil;
-	KilledHHs:= 0;
-	SuddenDeathDmg:= false;
-	SpeechType:= 1;
-	TrainingTargetGear:= nil;
-	skipFlag:= false;
-	
-	AllInactive:= false;
-	PrvInactive:= false;
+    CurAmmoGear:= nil;
+    GearsList:= nil;
+    KilledHHs:= 0;
+    SuddenDeathDmg:= false;
+    SpeechType:= 1;
+    TrainingTargetGear:= nil;
+    skipFlag:= false;
+    
+    AllInactive:= false;
+    PrvInactive:= false;
 end;
 
 procedure free_uGears;
 begin
-	FreeGearsList();
+    FreeGearsList();
 end;
 
 end.