hedgewars/GSHandlers.inc
changeset 3143 682bc7f99c63
parent 3139 a075f5344796
child 3145 a9af6bf223cf
equal deleted inserted replaced
3142:1a488adc676c 3143:682bc7f99c63
    21      d: LongInt;
    21      d: LongInt;
    22 begin
    22 begin
    23     gi:= GearsList;
    23     gi:= GearsList;
    24     while gi <> nil do
    24     while gi <> nil do
    25         begin
    25         begin
    26         d:= r - hwRound(Distance(gi^.X - x, gi^.Y - y));
    26         if (gi^.Kind = gtHedgehog) then
    27         if (d > 1) and (gi^.Kind = gtHedgehog) and not gi^.Invulnerable and (GetRandom(2) = 0) then
       
    28             begin
    27             begin
    29             if (CurrentHedgehog^.Gear = gi) then
    28             d:= r - hwRound(Distance(gi^.X - x, gi^.Y - y));
    30                 PlaySound(sndOops, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
    29             if (d > 1) and not gi^.Invulnerable and (GetRandom(2) = 0) then
    31             else
       
    32                 begin
    30                 begin
    33                 if (gi^.State and gstMoving) = 0 then
    31                 if (CurrentHedgehog^.Gear = gi) then
    34                     gi^.State:= gi^.State or gstLoser;
    32                     PlaySound(sndOops, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
    35                 if d > r div 2 then
       
    36                     PlaySound(sndNooo, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
       
    37                 else
    33                 else
    38                     PlaySound(sndUhOh, PHedgehog(gi^.Hedgehog)^.Team^.voicepack);
    34                     begin
       
    35                     if (gi^.State and gstMoving) = 0 then
       
    36                         gi^.State:= gi^.State or gstLoser;
       
    37                     if d > r div 2 then
       
    38                         PlaySound(sndNooo, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
       
    39                     else
       
    40                         PlaySound(sndUhOh, PHedgehog(gi^.Hedgehog)^.Team^.voicepack);
       
    41                     end;
    39                 end;
    42                 end;
    40             end;
    43             end;
    41         gi:= gi^.NextGear
    44         gi:= gi^.NextGear
    42         end;
    45         end;
    43 end;
    46 end;
   136 ////////////////////////////////////////////////////////////////////////////////
   139 ////////////////////////////////////////////////////////////////////////////////
   137 ////////////////////////////////////////////////////////////////////////////////
   140 ////////////////////////////////////////////////////////////////////////////////
   138 procedure CalcRotationDirAngle(Gear: PGear);
   141 procedure CalcRotationDirAngle(Gear: PGear);
   139 var dAngle: real;
   142 var dAngle: real;
   140 begin
   143 begin
   141 dAngle:= (hwAbs(Gear^.dX) + hwAbs(Gear^.dY)).QWordValue / $80000000;
   144 dAngle:= (Gear^.dX.QWordValue + Gear^.dY.QWordValue) / $80000000;
   142 if not Gear^.dX.isNegative then
   145 if not Gear^.dX.isNegative then
   143     Gear^.DirAngle:= Gear^.DirAngle + dAngle
   146     Gear^.DirAngle:= Gear^.DirAngle + dAngle
   144 else
   147 else
   145     Gear^.DirAngle:= Gear^.DirAngle - dAngle;
   148     Gear^.DirAngle:= Gear^.DirAngle - dAngle;
   146 
   149 
   331             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0);
   334             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0);
   332     end;
   335     end;
   333 end;
   336 end;
   334 ////////////////////////////////////////////////////////////////////////////////
   337 ////////////////////////////////////////////////////////////////////////////////
   335 procedure doStepMolotov(Gear: PGear);
   338 procedure doStepMolotov(Gear: PGear);
   336 var i: LongInt;
   339 var i, gX, gY: LongInt;
   337     dX, dY: hwFloat;
   340     dX, dY: hwFloat;
   338     Fire: PGear;
   341     Fire: PGear;
   339 begin
   342 begin
   340     AllInactive:= false;
   343     AllInactive:= false;
   341     
   344     
   342     doStepFallingGear(Gear);
   345     doStepFallingGear(Gear);
   343     CalcRotationDirAngle(Gear);
   346     CalcRotationDirAngle(Gear);
   344 
   347 
   345     if (Gear^.State and gstCollision) <> 0 then begin
   348     if (Gear^.State and gstCollision) <> 0 then begin
   346         PlaySound(sndMolotov);
   349         PlaySound(sndMolotov);
       
   350         gX:= hwRound(Gear^.X);
       
   351         gY:= hwRound(Gear^.Y);
   347         //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound);
   352         //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound);
   348         for i:= 0 to 20 do begin
   353         for i:= 0 to 20 do begin
   349                 dX:= AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
   354                 dX:= AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
   350                 dY:= AngleSin(i * 8) * _0_5 * (GetRandom + _1);
   355                 dY:= AngleSin(i * 8) * _0_5 * (GetRandom + _1);
   351                 Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
   356                 Fire:= AddGear(gX, gY, gtFlame, 0, dX, dY, 0);
   352                 Fire^.State:= Fire^.State or gsttmpFlag;
   357                 Fire^.State:= Fire^.State or gsttmpFlag;
   353                 Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
   358                 Fire:= AddGear(gX, gY, gtFlame, 0, dX, -dY, 0);
   354                 Fire^.State:= Fire^.State or gsttmpFlag;
   359                 Fire^.State:= Fire^.State or gsttmpFlag;
   355                 Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, dY, 0);
   360                 Fire:= AddGear(gX, gY, gtFlame, 0, -dX, dY, 0);
   356                 Fire^.State:= Fire^.State or gsttmpFlag;
   361                 Fire^.State:= Fire^.State or gsttmpFlag;
   357                 Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, -dY, 0);
   362                 Fire:= AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0);
   358                 Fire^.State:= Fire^.State or gsttmpFlag;
   363                 Fire^.State:= Fire^.State or gsttmpFlag;
   359         end;
   364         end;
   360         DeleteGear(Gear);
   365         DeleteGear(Gear);
   361         exit
   366         exit
   362     end;
   367     end;
   470 end;
   475 end;
   471 
   476 
   472 ////////////////////////////////////////////////////////////////////////////////
   477 ////////////////////////////////////////////////////////////////////////////////
   473 procedure doStepBeeWork(Gear: PGear);
   478 procedure doStepBeeWork(Gear: PGear);
   474 var t: hwFloat;
   479 var t: hwFloat;
       
   480     gX,gY: LongInt;
   475     nuw: boolean;
   481     nuw: boolean;
   476 const uw: boolean = false;
   482 const uw: boolean = false;
   477 begin
   483 begin
   478 AllInactive:= false;
   484 AllInactive:= false;
       
   485 gX:= hwRound(Gear^.X);
       
   486 gY:= hwRound(Gear^.Y);
   479 nuw:= (cWaterLine < hwRound(Gear^.Y) + Gear^.Radius);
   487 nuw:= (cWaterLine < hwRound(Gear^.Y) + Gear^.Radius);
   480 if nuw and not uw then
   488 if nuw and not uw then
   481     begin
   489     begin
   482     AddVisualGear(hwRound(Gear^.X), cWaterLine, vgtSplash);
   490     AddVisualGear(gX, cWaterLine, vgtSplash);
   483     AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), cWaterLine, vgtDroplet);
   491     AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
   484     AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), cWaterLine, vgtDroplet);
   492     AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
   485     AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), cWaterLine, vgtDroplet);
   493     AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
   486     AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), cWaterLine, vgtDroplet);
   494     AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
   487     StopSound(Gear^.SoundChannel);
   495     StopSound(Gear^.SoundChannel);
   488     Gear^.SoundChannel:= LoopSound(sndBeeWater);
   496     Gear^.SoundChannel:= LoopSound(sndBeeWater);
   489     uw:= nuw
   497     uw:= nuw
   490     end
   498     end
   491 else if not nuw and uw then
   499 else if not nuw and uw then
   492     begin
   500     begin
   493     AddVisualGear(hwRound(Gear^.X), cWaterLine, vgtSplash);
   501     AddVisualGear(gX, cWaterLine, vgtSplash);
   494     StopSound(Gear^.SoundChannel);
   502     StopSound(Gear^.SoundChannel);
   495     Gear^.SoundChannel:= LoopSound(sndBee);
   503     Gear^.SoundChannel:= LoopSound(sndBee);
   496     uw:= nuw
   504     uw:= nuw
   497     end;
   505     end;
   498 
   506 
   499 
   507 
   500 t:= Distance(Gear^.dX, Gear^.dY);
   508 t:= Distance(Gear^.dX, Gear^.dY);
   501 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - hwRound(Gear^.X)));
   509 Gear^.dX:= Gear^.Elasticity * (Gear^.dX + _0_000004 * (TargetPoint.X - gX));
   502 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - hwRound(Gear^.Y)));
   510 Gear^.dY:= Gear^.Elasticity * (Gear^.dY + _0_000004 * (TargetPoint.Y - gY));
   503 
   511 
   504 t:= t / Distance(Gear^.dX, Gear^.dY);
   512 t:= t / Distance(Gear^.dX, Gear^.dY);
   505 Gear^.dX:= Gear^.dX * t;
   513 Gear^.dX:= Gear^.dX * t;
   506 Gear^.dY:= Gear^.dY * t;
   514 Gear^.dY:= Gear^.dY * t;
   507 Gear^.X:= Gear^.X + Gear^.dX;
   515 Gear^.X:= Gear^.X + Gear^.dX;
  1388     else if Gear^.dX.isNegative and (Gear^.dX < -_0_03) and TestCollisionXwithGear(Gear, -1) then
  1396     else if Gear^.dX.isNegative and (Gear^.dX < -_0_03) and TestCollisionXwithGear(Gear, -1) then
  1389         inc(Gear^.Damage, hwRound(Gear^.dX * -_50));
  1397         inc(Gear^.Damage, hwRound(Gear^.dX * -_50));
  1390     
  1398     
  1391     doStepFallingGear(Gear);
  1399     doStepFallingGear(Gear);
  1392     CalcRotationDirAngle(Gear);
  1400     CalcRotationDirAngle(Gear);
  1393     CheckGearDrowning(Gear)
  1401     //CheckGearDrowning(Gear)
  1394     end
  1402     end
  1395 else 
  1403 else 
  1396     begin
  1404     begin
  1397     Gear^.State:= Gear^.State or gsttmpFlag;
  1405     Gear^.State:= Gear^.State or gsttmpFlag;
  1398     AddGearCI(Gear)
  1406     AddGearCI(Gear)
  1602 end;
  1610 end;
  1603 
  1611 
  1604 ////////////////////////////////////////////////////////////////////////////////
  1612 ////////////////////////////////////////////////////////////////////////////////
  1605 procedure doStepFlame(Gear: PGear);
  1613 procedure doStepFlame(Gear: PGear);
  1606 var i: Integer;
  1614 var i: Integer;
       
  1615 gX,gY: LongInt;
  1607 begin
  1616 begin
  1608     if (Gear^.State and gsttmpFlag) = 0 then AllInactive:= false;
  1617     if (Gear^.State and gsttmpFlag) = 0 then AllInactive:= false;
  1609 
  1618 
  1610 if not TestCollisionYwithGear(Gear, 1) then
  1619 if not TestCollisionYwithGear(Gear, 1) then
  1611     begin
  1620     begin
  1612     AllInactive:= false;
  1621     AllInactive:= false;
  1613     if hwAbs(Gear^.dX) > _0_01 then
  1622     if Gear^.dX.QWordValue > _0_01.QWordValue then
  1614         Gear^.dX:= Gear^.dX * _0_995;
  1623         Gear^.dX:= Gear^.dX * _0_995;
  1615      if (Gear^.State and gsttmpFlag) <> 0 then Gear^.dY:= Gear^.dY + _2*cGravity else
       
  1616     Gear^.dY:= Gear^.dY + cGravity;
  1624     Gear^.dY:= Gear^.dY + cGravity;
  1617     if hwAbs(Gear^.dY) > _0_2 then Gear^.dY:= Gear^.dY * _0_995;
  1625     if (Gear^.State and gsttmpFlag) <> 0 then Gear^.dY:= Gear^.dY + cGravity;
       
  1626     if Gear^.dY.QWordValue > _0_2.QWordValue then Gear^.dY:= Gear^.dY * _0_995;
  1618 
  1627 
  1619     if (Gear^.State and gsttmpFlag) <> 0 then Gear^.X:= Gear^.X + Gear^.dX else
  1628     if (Gear^.State and gsttmpFlag) <> 0 then Gear^.X:= Gear^.X + Gear^.dX else
  1620     Gear^.X:= Gear^.X + Gear^.dX + cWindSpeed * 640;
  1629     Gear^.X:= Gear^.X + Gear^.dX + cWindSpeed * 640;
  1621     Gear^.Y:= Gear^.Y + Gear^.dY;
  1630     Gear^.Y:= Gear^.Y + Gear^.dY;
  1622 
  1631 
  1623     if (hwRound(Gear^.Y) > cWaterLine) then
  1632     if (hwRound(Gear^.Y) > cWaterLine) then
  1624         begin
  1633         begin
       
  1634         gX:= hwRound(Gear^.X);
  1625         for i:= 0 to 3 do
  1635         for i:= 0 to 3 do
  1626             AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), cWaterLine - 16 + Random(16), vgtSteam);
  1636             AddVisualGear(gX - 16 + Random(32), cWaterLine - 16 + Random(16), vgtSteam);
  1627         PlaySound(sndVaporize);
  1637         PlaySound(sndVaporize);
  1628         DeleteGear(Gear);
  1638         DeleteGear(Gear);
  1629         exit
  1639         exit
  1630         end
  1640         end
  1631     end else begin
  1641     end else begin
  1644 // Standard fire
  1654 // Standard fire
  1645             if (Gear^.State and gsttmpFlag) = 0 then
  1655             if (Gear^.State and gsttmpFlag) = 0 then
  1646                 begin
  1656                 begin
  1647                 Gear^.Radius:= 9;
  1657                 Gear^.Radius:= 9;
  1648                 AmmoShove(Gear, 4, 100);
  1658                 AmmoShove(Gear, 4, 100);
       
  1659                 gX:= hwRound(Gear^.X);
       
  1660                 gY:= hwRound(Gear^.Y);
  1649                 Gear^.Radius:= 1;
  1661                 Gear^.Radius:= 1;
  1650                 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 4, EXPLNoDamage);
  1662                 doMakeExplosion(gX, gY, 4, EXPLNoDamage);
  1651                 if ((GameTicks and $7) = 0) and (Random(2) = 0) then
  1663                 if ((GameTicks and $7) = 0) and (Random(2) = 0) then
  1652                   for i:= 1 to Random(2)+1 do
  1664                   for i:= 1 to Random(2)+1 do
  1653                     AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 2, vgtSmoke);
  1665                     AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
  1654                 if Gear^.Health > 0 then dec(Gear^.Health);
  1666                 if Gear^.Health > 0 then dec(Gear^.Health);
  1655                 Gear^.Timer:= 450 - Gear^.Tag * 8
  1667                 Gear^.Timer:= 450 - Gear^.Tag * 8
  1656                 end
  1668                 end
  1657                 else begin
  1669                 else begin
  1658 // Modified fire
  1670 // Modified fire
  1659                 if ((GameTicks and $7FF) = 0) and ((GameFlags and gfSolidLand) = 0) then begin
  1671                 if ((GameTicks and $7FF) = 0) and ((GameFlags and gfSolidLand) = 0) then begin
  1660                     DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 4);
  1672                     DrawExplosion(gX, gY, 4);
  1661                     
  1673                     
  1662                     for i:= 0 to Random(3) do
  1674                     for i:= 0 to Random(3) do
  1663                       AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 2, vgtSmoke);
  1675                       AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
  1664                 end;
  1676                 end;
  1665                 // This one is interesting.  I think I understand the purpose, but I wonder if a bit more fuzzy of kicking could be done with getrandom.
  1677                 // This one is interesting.  I think I understand the purpose, but I wonder if a bit more fuzzy of kicking could be done with getrandom.
  1666                 Gear^.Timer:= 100 - Gear^.Tag * 3;
  1678                 Gear^.Timer:= 100 - Gear^.Tag * 3;
  1667                 if (Gear^.Damage > 3000+Gear^.Tag*1500) then Gear^.Health:= 0
  1679                 if (Gear^.Damage > 3000+Gear^.Tag*1500) then Gear^.Health:= 0
  1668                 end
  1680                 end
  1669             end
  1681             end
  1670         end;
  1682         end;
  1671 if Gear^.Health = 0 then begin
  1683 if Gear^.Health = 0 then begin
       
  1684   gX:= hwRound(Gear^.X);
       
  1685   gY:= hwRound(Gear^.Y);
  1672   if (Gear^.State and gsttmpFlag) = 0 then begin
  1686   if (Gear^.State and gsttmpFlag) = 0 then begin
  1673     if ((GameTicks and $3) = 0) and (Random(1) = 0) then begin
  1687     if ((GameTicks and $3) = 0) and (Random(1) = 0) then begin
  1674       for i:= 1 to Random(2)+1 do begin
  1688       for i:= 1 to Random(2)+1 do begin
  1675         AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 2, vgtSmoke);
  1689         AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
  1676       end;
  1690       end;
  1677     end;
  1691     end;
  1678   end else begin
  1692   end else begin
  1679     for i:= 0 to Random(3) do begin
  1693     for i:= 0 to Random(3) do begin
  1680       AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 2, vgtSmoke);
  1694       AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
  1681     end;
  1695     end;
  1682   end;
  1696   end;
  1683   
  1697   
  1684   DeleteGear(Gear)
  1698   DeleteGear(Gear)
  1685   end;
  1699   end;
  2471 
  2485 
  2472 ////////////////////////////////////////////////////////////////////////////////
  2486 ////////////////////////////////////////////////////////////////////////////////
  2473 procedure doStepBallgunWork(Gear: PGear);
  2487 procedure doStepBallgunWork(Gear: PGear);
  2474 var HHGear: PGear;
  2488 var HHGear: PGear;
  2475     rx, ry: hwFloat;
  2489     rx, ry: hwFloat;
       
  2490     gX, gY: LongInt;
  2476 begin
  2491 begin
  2477     AllInactive:= false;
  2492     AllInactive:= false;
  2478     dec(Gear^.Timer);
  2493     dec(Gear^.Timer);
  2479     HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
  2494     HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
  2480     HedgehogChAngle(HHGear);
  2495     HedgehogChAngle(HHGear);
       
  2496     gX:= hwRound(Gear^.X);
       
  2497     gY:= hwRound(Gear^.Y);
  2481     if (Gear^.Timer mod 100) = 0 then
  2498     if (Gear^.Timer mod 100) = 0 then
  2482         begin
  2499         begin
  2483         rx:= rndSign(getRandom * _0_1);
  2500         rx:= rndSign(getRandom * _0_1);
  2484         ry:= rndSign(getRandom * _0_1);
  2501         ry:= rndSign(getRandom * _0_1);
  2485 
  2502 
  2486         AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtBall, 0,
  2503         AddGear(gx, gy, gtBall, 0,
  2487                 SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
  2504                 SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
  2488                 AngleCos(HHGear^.Angle) * ( - _0_8) + ry,
  2505                 AngleCos(HHGear^.Angle) * ( - _0_8) + ry,
  2489                 0);
  2506                 0);
  2490 
  2507 
  2491         PlaySound(sndGun);
  2508         PlaySound(sndGun);
  2927 if Gear^.Timer > 250 then DeleteGear(Gear);
  2944 if Gear^.Timer > 250 then DeleteGear(Gear);
  2928 end;
  2945 end;
  2929 
  2946 
  2930 procedure doStepBigExplosion(Gear: PGear);
  2947 procedure doStepBigExplosion(Gear: PGear);
  2931 var i: LongWord;
  2948 var i: LongWord;
  2932 begin
  2949 gX,gY: LongInt;
  2933 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeRing);
  2950 begin
  2934 for i:= 0 to 46 do AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFire);
  2951 gX:= hwRound(Gear^.X);
  2935 for i:= 0 to 15 do AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtExplPart);
  2952 gY:= hwRound(Gear^.Y);
  2936 for i:= 0 to 15 do AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtExplPart2);
  2953 AddVisualGear(gX, gY, vgtSmokeRing);
       
  2954 for i:= 0 to 46 do AddVisualGear(gX, gY, vgtFire);
       
  2955 for i:= 0 to 15 do AddVisualGear(gX, gY, vgtExplPart);
       
  2956 for i:= 0 to 15 do AddVisualGear(gX, gY, vgtExplPart2);
  2937 Gear^.doStep:= @doStepBigExplosionWork
  2957 Gear^.doStep:= @doStepBigExplosionWork
  2938 end;
  2958 end;
  2939 
  2959 
  2940 ////////////////////////////////////////////////////////////////////////////////
  2960 ////////////////////////////////////////////////////////////////////////////////
  2941 procedure doStepEggWork(Gear: PGear);
  2961 procedure doStepEggWork(Gear: PGear);
  2943      i: LongInt;
  2963      i: LongInt;
  2944 begin
  2964 begin
  2945     AllInactive:= false;
  2965     AllInactive:= false;
  2946     Gear^.dX:= Gear^.dX;
  2966     Gear^.dX:= Gear^.dX;
  2947     doStepFallingGear(Gear);
  2967     doStepFallingGear(Gear);
  2948     CheckGearDrowning(Gear);
  2968 //    CheckGearDrowning(Gear); // already checked for in doStepFallingGear
  2949     CalcRotationDirAngle(Gear);
  2969     CalcRotationDirAngle(Gear);
  2950 
  2970 
  2951     if (Gear^.State and gstCollision) <> 0 then
  2971     if (Gear^.State and gstCollision) <> 0 then
  2952     begin
  2972     begin
  2953         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, EXPLPoisoned or EXPLNoGfx);
  2973         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, EXPLPoisoned or EXPLNoGfx);