hedgewars/GSHandlers.inc
changeset 357 165a040e4cfa
parent 355 40c68869899e
child 358 236bbd12d4d9
equal deleted inserted replaced
356:ca3a5dfcae75 357:165a040e4cfa
   368    AfterAttack;
   368    AfterAttack;
   369    exit
   369    exit
   370    end;
   370    end;
   371 if (Gear^.Timer and $3F) = 0 then
   371 if (Gear^.Timer and $3F) = 0 then
   372    begin
   372    begin
   373    i:= hwRound(Gear^.X) - Gear^.Radius  - GetRandom(2);
   373    i:= hwRound(Gear^.X) - Gear^.Radius - integer(GetRandom(2));
   374    ei:= hwRound(Gear^.X) + Gear^.Radius + GetRandom(2);
   374    ei:= hwRound(Gear^.X) + Gear^.Radius + integer(GetRandom(2));
   375    while i <= ei do
   375    while i <= ei do
   376          begin
   376          begin
   377          doMakeExplosion(i, hwRound(Gear^.Y) + 3, 3, 0);
   377          doMakeExplosion(i, hwRound(Gear^.Y) + 3, 3, 0);
   378          inc(i, 1)
   378          inc(i, 1)
   379          end;
   379          end;
   411 begin
   411 begin
   412 i:= 0;
   412 i:= 0;
   413 y:= hwRound(Gear^.Y) - cHHRadius*2;
   413 y:= hwRound(Gear^.Y) - cHHRadius*2;
   414 while y < hwRound(Gear^.Y) do
   414 while y < hwRound(Gear^.Y) do
   415    begin
   415    begin
   416    ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - GetRandom(2);
   416    ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - integer(GetRandom(2));
   417    ar[i].Right:= hwRound(Gear^.X) + Gear^.Radius + GetRandom(2);
   417    ar[i].Right:= hwRound(Gear^.X) + Gear^.Radius + integer(GetRandom(2));
   418    inc(y, 2);
   418    inc(y, 2);
   419    inc(i)
   419    inc(i)
   420    end;
   420    end;
   421 DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius*2, 2, Pred(i));
   421 DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius*2, 2, Pred(i));
   422 Gear^.dY:= PHedgehog(Gear^.Hedgehog)^.Gear^.dY;
   422 Gear^.dY:= PHedgehog(Gear^.Hedgehog)^.Gear^.dY;
   443 if (HHGear^.Angle <> BTPrevAngle) then
   443 if (HHGear^.Angle <> BTPrevAngle) then
   444    begin
   444    begin
   445    Gear^.dX:= hwSign(HHGear^.dX) * AngleSin(HHGear^.Angle) * _0_5;
   445    Gear^.dX:= hwSign(HHGear^.dX) * AngleSin(HHGear^.Angle) * _0_5;
   446    Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5);
   446    Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5);
   447    BTPrevAngle:= HHGear^.Angle;
   447    BTPrevAngle:= HHGear^.Angle;
   448    b:= true
   448 //   b:= true
   449    end;
   449    end;
   450 
   450 
   451 if Gear^.Timer mod cHHStepTicks = 0 then
   451 if Gear^.Timer mod cHHStepTicks = 0 then
   452    begin
   452    begin
   453    b:= true;
   453    b:= true;
   454    if Gear^.dX < 0 then HHGear^.Message:= (HHGear^.Message or gm_Left) and not gm_Right
   454    if Gear^.dX < 0 then HHGear^.Message:= (HHGear^.Message or gm_Left) and not gm_Right
   455                   else HHGear^.Message:= (HHGear^.Message or gm_Right) and not gm_Left;
   455                   else HHGear^.Message:= (HHGear^.Message or gm_Right) and not gm_Left;
       
   456 
       
   457    HHGear^.State:= HHGear^.State and not gstAttacking;
   456    HedgehogStep(HHGear);
   458    HedgehogStep(HHGear);
       
   459    HHGear^.State:= HHGear^.State or gstAttacking;
   457 
   460 
   458    inc(BTSteps);
   461    inc(BTSteps);
   459    if BTSteps = 11 then
   462    if BTSteps = 11 then
   460       begin
   463       begin
   461       BTSteps:= 0;
   464       BTSteps:= 0;
   486 var HHGear: PGear;
   489 var HHGear: PGear;
   487 begin
   490 begin
   488 BTPrevAngle:= High(Longword);
   491 BTPrevAngle:= High(Longword);
   489 BTSteps:= 0;
   492 BTSteps:= 0;
   490 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   493 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   491 HHGear^.State:= HHGear^.State and not gstAttacking;
       
   492 HHGear^.Message:= 0;
   494 HHGear^.Message:= 0;
   493 Gear^.doStep:= @doStepBlowTorchWork
   495 Gear^.doStep:= @doStepBlowTorchWork
   494 end;
   496 end;
   495 
   497 
   496 ////////////////////////////////////////////////////////////////////////////////
   498 ////////////////////////////////////////////////////////////////////////////////
  1015    end;
  1017    end;
  1016 if Gear^.X > 3072 then DeleteGear(Gear)
  1018 if Gear^.X > 3072 then DeleteGear(Gear)
  1017 end;
  1019 end;
  1018 
  1020 
  1019 procedure doStepAirAttack(Gear: PGear);
  1021 procedure doStepAirAttack(Gear: PGear);
       
  1022 var t: integer;
  1020 begin
  1023 begin
  1021 AllInactive:= false;
  1024 AllInactive:= false;
  1022 Gear^.X:= -1024;
  1025 Gear^.X:= -1024;
  1023 Gear^.Y:= -128;
  1026 Gear^.Y:= -128;
  1024 Gear^.dX:= TargetPoint.X -
  1027 Gear^.dX:= TargetPoint.X -
  1025           cBombsDistance * 5 / 2;{ -
  1028           cBombsDistance * 5 / 2;
  1026           cBombsSpeed * sqrt(2 * (TargetPoint.Y - Gear^.Y) / cGravity);}
  1029 
       
  1030 if TargetPoint.Y - Gear^.Y > 0 then
       
  1031    Gear^.dX:= Gear^.dX - cBombsSpeed * hwSqrt(2 * (TargetPoint.Y - Gear^.Y) / cGravity);
  1027 Gear^.Health:= 6;
  1032 Gear^.Health:= 6;
  1028 Gear^.doStep:= @doStepAirAttackWork
  1033 Gear^.doStep:= @doStepAirAttackWork
  1029 end;
  1034 end;
  1030 
  1035 
  1031 ////////////////////////////////////////////////////////////////////////////////
  1036 ////////////////////////////////////////////////////////////////////////////////