hedgewars/GSHandlers.inc
changeset 7001 89488f5b99ca
parent 6992 b8f3d8991e92
child 7007 0ccdff4ae8e9
equal deleted inserted replaced
7000:d22633829ac8 7001:89488f5b99ca
   343                 x := hwRound(Gear^.X);
   343                 x := hwRound(Gear^.X);
   344                 y := hwRound(Gear^.Y);
   344                 y := hwRound(Gear^.Y);
   345                 doMakeExplosion(x, y, 20, Gear^.Hedgehog, EXPLAutoSound);
   345                 doMakeExplosion(x, y, 20, Gear^.Hedgehog, EXPLAutoSound);
   346                 for i:= 0 to 4 do
   346                 for i:= 0 to 4 do
   347                     begin
   347                     begin
   348                     dX := rndSign(GetRandom * _0_1) + Gear^.dX / 5;
   348                     dX := rndSign(GetRandomf * _0_1) + Gear^.dX / 5;
   349                     dY := (GetRandom - _3) * _0_08;
   349                     dY := (GetRandomf - _3) * _0_08;
   350                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
   350                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
   351                     end
   351                     end
   352                 end;
   352                 end;
   353             gtWatermelon: 
   353             gtWatermelon: 
   354                 begin
   354                 begin
   355                 x := hwRound(Gear^.X);
   355                 x := hwRound(Gear^.X);
   356                 y := hwRound(Gear^.Y);
   356                 y := hwRound(Gear^.Y);
   357                 doMakeExplosion(x, y, 75, Gear^.Hedgehog, EXPLAutoSound);
   357                 doMakeExplosion(x, y, 75, Gear^.Hedgehog, EXPLAutoSound);
   358                 for i:= 0 to 5 do
   358                 for i:= 0 to 5 do
   359                     begin
   359                     begin
   360                     dX := rndSign(GetRandom * _0_1) + Gear^.dX / 5;
   360                     dX := rndSign(GetRandomf * _0_1) + Gear^.dX / 5;
   361                     dY := (GetRandom - _1_5) * _0_3;
   361                     dY := (GetRandomf - _1_5) * _0_3;
   362                     FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75);
   362                     FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75);
   363                     FollowGear^.DirAngle := i * 60
   363                     FollowGear^.DirAngle := i * 60
   364                     end
   364                     end
   365                 end;
   365                 end;
   366             gtHellishBomb: 
   366             gtHellishBomb: 
   369                 y := hwRound(Gear^.Y);
   369                 y := hwRound(Gear^.Y);
   370                 doMakeExplosion(x, y, 90, Gear^.Hedgehog, EXPLAutoSound);
   370                 doMakeExplosion(x, y, 90, Gear^.Hedgehog, EXPLAutoSound);
   371 
   371 
   372                 for i:= 0 to 127 do
   372                 for i:= 0 to 127 do
   373                     begin
   373                     begin
   374                     dX := AngleCos(i * 16) * _0_5 * (GetRandom + _1);
   374                     dX := AngleCos(i * 16) * _0_5 * (GetRandomf + _1);
   375                     dY := AngleSin(i * 16) * _0_5 * (GetRandom + _1);
   375                     dY := AngleSin(i * 16) * _0_5 * (GetRandomf + _1);
   376                     if i mod 2 = 0 then
   376                     if i mod 2 = 0 then
   377                         begin
   377                         begin
   378                         AddGear(x, y, gtFlame, gstTmpFlag, dX, dY, 0);
   378                         AddGear(x, y, gtFlame, gstTmpFlag, dX, dY, 0);
   379                         AddGear(x, y, gtFlame, 0, dX, -dY, 0)
   379                         AddGear(x, y, gtFlame, 0, dX, -dY, 0)
   380                         end
   380                         end
   475                     State:= ord(sprEgg)
   475                     State:= ord(sprEgg)
   476                     end;
   476                     end;
   477             end;
   477             end;
   478         for i:= 0 to 24 do
   478         for i:= 0 to 24 do
   479             begin
   479             begin
   480             dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandom + _1);
   480             dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandomf + _1);
   481             dY := AngleSin(i * 8) * _0_5 * (GetRandom + _1);
   481             dY := AngleSin(i * 8) * _0_5 * (GetRandomf + _1);
   482             AddGear(gX, gY, gtFlame, gstTmpFlag, dX, dY, 0);
   482             AddGear(gX, gY, gtFlame, gstTmpFlag, dX, dY, 0);
   483             AddGear(gX, gY, gtFlame, gstTmpFlag, dX,-dY, 0);
   483             AddGear(gX, gY, gtFlame, gstTmpFlag, dX,-dY, 0);
   484             AddGear(gX, gY, gtFlame, gstTmpFlag,-dX, dY, 0);
   484             AddGear(gX, gY, gtFlame, gstTmpFlag,-dX, dY, 0);
   485             AddGear(gX, gY, gtFlame, gstTmpFlag,-dX,-dY, 0);
   485             AddGear(gX, gY, gtFlame, gstTmpFlag,-dX,-dY, 0);
   486             end;
   486             end;
  2128         else if k = gtExplosives then
  2128         else if k = gtExplosives then
  2129                 begin
  2129                 begin
  2130                 doMakeExplosion(x, y, 75, hog, EXPLAutoSound);
  2130                 doMakeExplosion(x, y, 75, hog, EXPLAutoSound);
  2131                 for i:= 0 to 31 do
  2131                 for i:= 0 to 31 do
  2132                     begin
  2132                     begin
  2133                     dX := AngleCos(i * 64) * _0_5 * (getrandom + _1);
  2133                     dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
  2134                     dY := AngleSin(i * 64) * _0_5 * (getrandom + _1);
  2134                     dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
  2135                     AddGear(x, y, gtFlame, 0, dX, dY, 0);
  2135                     AddGear(x, y, gtFlame, 0, dX, dY, 0);
  2136                     AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
  2136                     AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
  2137                     end
  2137                     end
  2138                 end;
  2138                 end;
  2139             exit
  2139             exit
  2798 
  2798 
  2799         Gear^.dX.isNegative := not dxn;
  2799         Gear^.dX.isNegative := not dxn;
  2800         Gear^.dY.isNegative := not dyn;
  2800         Gear^.dY.isNegative := not dyn;
  2801         for i:= 0 to 4 do
  2801         for i:= 0 to 4 do
  2802             begin
  2802             begin
  2803             dX := Gear^.dX + (GetRandom - _0_5) * _0_03;
  2803             dX := Gear^.dX + (GetRandomf - _0_5) * _0_03;
  2804             dY := Gear^.dY + (GetRandom - _0_5) * _0_03;
  2804             dY := Gear^.dY + (GetRandomf - _0_5) * _0_03;
  2805             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
  2805             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
  2806             end;
  2806             end;
  2807 
  2807 
  2808         DeleteGear(Gear);
  2808         DeleteGear(Gear);
  2809         exit
  2809         exit
  3412     HedgehogChAngle(HHGear);
  3412     HedgehogChAngle(HHGear);
  3413     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  3413     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
  3414     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  3414     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
  3415     if (Gear^.Timer mod 100) = 0 then
  3415     if (Gear^.Timer mod 100) = 0 then
  3416         begin
  3416         begin
  3417         rx := rndSign(getRandom * _0_1);
  3417         rx := rndSign(getRandomf * _0_1);
  3418         ry := rndSign(getRandom * _0_1);
  3418         ry := rndSign(getRandomf * _0_1);
  3419 
  3419 
  3420         AddGear(gx, gy, gtBall, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0);
  3420         AddGear(gx, gy, gtBall, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0);
  3421 
  3421 
  3422         PlaySound(sndGun);
  3422         PlaySound(sndGun);
  3423         end;
  3423         end;
  3536         if ((Gear^.State and gstCollision) <> 0) then
  3536         if ((Gear^.State and gstCollision) <> 0) then
  3537             begin
  3537             begin
  3538             doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, Gear^.Hedgehog, EXPLAutoSound);
  3538             doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, Gear^.Hedgehog, EXPLAutoSound);
  3539             for i:= 0 to 15 do
  3539             for i:= 0 to 15 do
  3540                 begin
  3540                 begin
  3541                 dX := AngleCos(i * 64) * _0_5 * (GetRandom + _1);
  3541                 dX := AngleCos(i * 64) * _0_5 * (GetRandomf + _1);
  3542                 dY := AngleSin(i * 64) * _0_5 * (GetRandom + _1);
  3542                 dY := AngleSin(i * 64) * _0_5 * (GetRandomf + _1);
  3543                 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
  3543                 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
  3544                 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
  3544                 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
  3545                 end;
  3545                 end;
  3546             DeleteGear(Gear)
  3546             DeleteGear(Gear)
  3547             end;
  3547             end;
  4752     if Gear^.Timer = 0 then
  4752     if Gear^.Timer = 0 then
  4753         begin
  4753         begin
  4754         dec(Gear^.Health);
  4754         dec(Gear^.Health);
  4755         if (Gear^.Health mod 5) = 0 then
  4755         if (Gear^.Health mod 5) = 0 then
  4756             begin
  4756             begin
  4757             rx := rndSign(getRandom * _0_1);
  4757             rx := rndSign(getRandomf * _0_1);
  4758             ry := rndSign(getRandom * _0_1);
  4758             ry := rndSign(getRandomf * _0_1);
  4759             speed := _0_5 * (_10 / Gear^.Tag);
  4759             speed := _0_5 * (_10 / Gear^.Tag);
  4760     
  4760     
  4761             AddGear(gx, gy, gtFlame, gstTmpFlag,
  4761             AddGear(gx, gy, gtFlame, gstTmpFlag,
  4762                     SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
  4762                     SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
  4763                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  4763                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  4832     dec(Gear^.Timer);
  4832     dec(Gear^.Timer);
  4833     if Gear^.Timer = 0 then
  4833     if Gear^.Timer = 0 then
  4834         begin
  4834         begin
  4835         dec(Gear^.Health);
  4835         dec(Gear^.Health);
  4836 
  4836 
  4837         rx := rndSign(getRandom * _0_1);
  4837         rx := rndSign(getRandomf * _0_1);
  4838         ry := rndSign(getRandom * _0_1);
  4838         ry := rndSign(getRandomf * _0_1);
  4839         speed := (_3 / Gear^.Tag);
  4839         speed := (_3 / Gear^.Tag);
  4840 
  4840 
  4841         AddGear(gx, gy, gtFlake, gstTmpFlag, 
  4841         AddGear(gx, gy, gtFlake, gstTmpFlag, 
  4842                 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, 
  4842                 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, 
  4843                 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  4843                 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
  5144         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound);
  5144         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound);
  5145         gX := hwRound(Gear^.X);
  5145         gX := hwRound(Gear^.X);
  5146         gY := hwRound(Gear^.Y); 
  5146         gY := hwRound(Gear^.Y); 
  5147         for i:= 0 to 10 do
  5147         for i:= 0 to 10 do
  5148         begin
  5148         begin
  5149             dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
  5149             dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandomf + _1);
  5150             dY := AngleSin(i * 8) * _0_5 * (GetRandom + _1);
  5150             dY := AngleSin(i * 8) * _0_5 * (GetRandomf + _1);
  5151             AddGear(gX, gY, gtFlame, 0, dX, dY, 0);
  5151             AddGear(gX, gY, gtFlame, 0, dX, dY, 0);
  5152             AddGear(gX, gY, gtFlame, 0, dX, -dY, 0);
  5152             AddGear(gX, gY, gtFlame, 0, dX, -dY, 0);
  5153             AddGear(gX, gY, gtFlame, 0, -dX, dY, 0);
  5153             AddGear(gX, gY, gtFlame, 0, -dX, dY, 0);
  5154             AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0);
  5154             AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0);
  5155         end;
  5155         end;