hedgewars/uGearsHandlersMess.pas
branch0.9.25
changeset 14589 9c03b3cd6d16
parent 14588 e27f1d1c1da9
child 15333 c4d68ab7aecb
equal deleted inserted replaced
14588:e27f1d1c1da9 14589:9c03b3cd6d16
  2079                 // Remove land created by frozen air mine sprite pixel-perfectly
  2079                 // Remove land created by frozen air mine sprite pixel-perfectly
  2080                 EraseLand(
  2080                 EraseLand(
  2081                     hwRound(Gear^.X) - SpritesData[sprFrozenAirMine].Width div 2,
  2081                     hwRound(Gear^.X) - SpritesData[sprFrozenAirMine].Width div 2,
  2082                     hwRound(Gear^.Y) - SpritesData[sprFrozenAirMine].Height div 2,
  2082                     hwRound(Gear^.Y) - SpritesData[sprFrozenAirMine].Height div 2,
  2083                     sprFrozenAirMine, 0, 0, false, false, false, false);
  2083                     sprFrozenAirMine, 0, 0, false, false, false, false);
  2084             DeleteGear(Gear)
  2084             DeleteGear(Gear);
       
  2085             exit
  2085             end;
  2086             end;
  2086         doStepFallingGear(Gear);
  2087         doStepFallingGear(Gear);
  2087         exit
  2088         exit
  2088         end;
  2089         end;
  2089     isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
  2090     isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
  2433 end;
  2434 end;
  2434 
  2435 
  2435 procedure doStepCase(Gear: PGear);
  2436 procedure doStepCase(Gear: PGear);
  2436 var
  2437 var
  2437     i, x, y: LongInt;
  2438     i, x, y: LongInt;
       
  2439     Boom: LongWord;
  2438     k: TGearType;
  2440     k: TGearType;
  2439     dX, dY: HWFloat;
  2441     dX, dY: HWFloat;
  2440     hog: PHedgehog;
  2442     hog: PHedgehog;
  2441     sparkles: PVisualGear;
  2443     sparkles: PVisualGear;
  2442 begin
  2444 begin
  2458     if ((k <> gtExplosives) and (Gear^.Damage > 0)) or ((k = gtExplosives) and (Gear^.Health<=0)) then
  2460     if ((k <> gtExplosives) and (Gear^.Damage > 0)) or ((k = gtExplosives) and (Gear^.Health<=0)) then
  2459         begin
  2461         begin
  2460         x := hwRound(Gear^.X);
  2462         x := hwRound(Gear^.X);
  2461         y := hwRound(Gear^.Y);
  2463         y := hwRound(Gear^.Y);
  2462         hog:= Gear^.Hedgehog;
  2464         hog:= Gear^.Hedgehog;
  2463 
  2465         Boom:= Gear^.Boom;
  2464         DeleteGear(Gear);
  2466         DeleteGear(Gear);
  2465         // <-- delete gear!
  2467         // <-- delete gear!
  2466 
  2468 
  2467         if k = gtCase then
  2469         if k = gtCase then
  2468             begin
  2470             begin
  2469             doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound);
  2471             doMakeExplosion(x, y, Boom, hog, EXPLAutoSound);
  2470             for i:= 0 to 63 do
  2472             for i:= 0 to 63 do
  2471                 AddGear(x, y, gtFlame, 0, _0, _0, 0);
  2473                 AddGear(x, y, gtFlame, 0, _0, _0, 0);
  2472             end
  2474             end
  2473         else if k = gtTarget then
  2475         else if k = gtTarget then
  2474             uStats.TargetHit()
  2476             uStats.TargetHit()
  2475         else if k = gtExplosives then
  2477         else if k = gtExplosives then
  2476                 begin
  2478                 begin
  2477                 doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound);
  2479                 doMakeExplosion(x, y, Boom, hog, EXPLAutoSound);
  2478                 for i:= 0 to 31 do
  2480                 for i:= 0 to 31 do
  2479                     begin
  2481                     begin
  2480                     dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
  2482                     dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
  2481                     dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
  2483                     dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
  2482                     AddGear(x, y, gtFlame, 0, dX, dY, 0);
  2484                     AddGear(x, y, gtFlame, 0, dX, dY, 0);