hedgewars/GSHandlers.inc
changeset 371 731ad6d27bd1
parent 370 c75410fe3133
child 374 95169697cc38
equal deleted inserted replaced
370:c75410fe3133 371:731ad6d27bd1
   110 if Gear^.X > cScreenWidth + 2048 then Gear^.X:= -cScreenWidth - 256
   110 if Gear^.X > cScreenWidth + 2048 then Gear^.X:= -cScreenWidth - 256
   111 end;
   111 end;
   112 
   112 
   113 ////////////////////////////////////////////////////////////////////////////////
   113 ////////////////////////////////////////////////////////////////////////////////
   114 procedure doStepBomb(Gear: PGear);
   114 procedure doStepBomb(Gear: PGear);
   115 var i: integer;
   115 var i: LongInt;
   116 begin
   116 begin
   117 AllInactive:= false;
   117 AllInactive:= false;
   118 doStepFallingGear(Gear);
   118 doStepFallingGear(Gear);
   119 dec(Gear^.Timer);
   119 dec(Gear^.Timer);
   120 if Gear^.Timer = 0 then
   120 if Gear^.Timer = 0 then
   353 if Gear^.Timer = 0 then DeleteGear(Gear)
   353 if Gear^.Timer = 0 then DeleteGear(Gear)
   354 end;
   354 end;
   355 
   355 
   356 ////////////////////////////////////////////////////////////////////////////////
   356 ////////////////////////////////////////////////////////////////////////////////
   357 procedure doStepPickHammerWork(Gear: PGear);
   357 procedure doStepPickHammerWork(Gear: PGear);
   358 var i, ei: integer;
   358 var i, ei: LongInt;
   359     HHGear: PGear;
   359     HHGear: PGear;
   360 begin
   360 begin
   361 AllInactive:= false;
   361 AllInactive:= false;
   362 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   362 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   363 dec(Gear^.Timer);
   363 dec(Gear^.Timer);
   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 - integer(GetRandom(2));
   373    i:= hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2));
   374    ei:= hwRound(Gear^.X) + Gear^.Radius + integer(GetRandom(2));
   374    ei:= hwRound(Gear^.X) + Gear^.Radius + LongInt(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;
   404    if ((Gear^.Message and gm_Right) <> 0) then Gear^.dX:= _0_3
   404    if ((Gear^.Message and gm_Right) <> 0) then Gear^.dX:= _0_3
   405                                          else Gear^.dX:= 0;
   405                                          else Gear^.dX:= 0;
   406 end;
   406 end;
   407 
   407 
   408 procedure doStepPickHammer(Gear: PGear);
   408 procedure doStepPickHammer(Gear: PGear);
   409 var i, y: integer;
   409 var i, y: LongInt;
   410     ar: TRangeArray;
   410     ar: TRangeArray;
   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 - integer(GetRandom(2));
   416    ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2));
   417    ar[i].Right:= hwRound(Gear^.X) + Gear^.Radius + integer(GetRandom(2));
   417    ar[i].Right:= hwRound(Gear^.X) + Gear^.Radius + LongInt(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;
   424 doStepPickHammerWork(Gear);
   424 doStepPickHammerWork(Gear);
   425 Gear^.doStep:= @doStepPickHammerWork
   425 Gear^.doStep:= @doStepPickHammerWork
   426 end;
   426 end;
   427 
   427 
   428 ////////////////////////////////////////////////////////////////////////////////
   428 ////////////////////////////////////////////////////////////////////////////////
   429 var BTPrevAngle, BTSteps: integer;
   429 var BTPrevAngle, BTSteps: LongInt;
   430 
   430 
   431 procedure doStepBlowTorchWork(Gear: PGear);
   431 procedure doStepBlowTorchWork(Gear: PGear);
   432 var HHGear: PGear;
   432 var HHGear: PGear;
   433     b: boolean;
   433     b: boolean;
   434 begin
   434 begin
   438 
   438 
   439 HedgehogChAngle(HHGear);
   439 HedgehogChAngle(HHGear);
   440 
   440 
   441 b:= false;
   441 b:= false;
   442 
   442 
   443 if abs(integer(HHGear^.Angle) - BTPrevAngle) > 7  then
   443 if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7  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
   486 end;
   486 end;
   487 
   487 
   488 procedure doStepBlowTorch(Gear: PGear);
   488 procedure doStepBlowTorch(Gear: PGear);
   489 var HHGear: PGear;
   489 var HHGear: PGear;
   490 begin
   490 begin
   491 BTPrevAngle:= High(integer);
   491 BTPrevAngle:= High(LongInt);
   492 BTSteps:= 0;
   492 BTSteps:= 0;
   493 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   493 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
   494 HHGear^.Message:= 0;
   494 HHGear^.Message:= 0;
   495 Gear^.doStep:= @doStepBlowTorchWork
   495 Gear^.doStep:= @doStepBlowTorchWork
   496 end;
   496 end;
   765 dec(Gear^.Timer);
   765 dec(Gear^.Timer);
   766 end;
   766 end;
   767 
   767 
   768 ///////////////////////////////////////////////////////////////////////////////
   768 ///////////////////////////////////////////////////////////////////////////////
   769 procedure doStepCase(Gear: PGear);
   769 procedure doStepCase(Gear: PGear);
   770 var i, x, y: integer;
   770 var i, x, y: LongInt;
   771 begin
   771 begin
   772 if (Gear^.Message and gm_Destroy) > 0 then
   772 if (Gear^.Message and gm_Destroy) > 0 then
   773    begin
   773    begin
   774    DeleteGear(Gear);
   774    DeleteGear(Gear);
   775    exit
   775    exit
   805    else if (Gear^.CollIndex < High(Longword)) and (Gear^.dY.QWordValue <> 0) then DeleteCI(Gear);
   805    else if (Gear^.CollIndex < High(Longword)) and (Gear^.dY.QWordValue <> 0) then DeleteCI(Gear);
   806 end;
   806 end;
   807 
   807 
   808 ////////////////////////////////////////////////////////////////////////////////
   808 ////////////////////////////////////////////////////////////////////////////////
   809 var thexchar: array[0..5] of record
   809 var thexchar: array[0..5] of record
   810                              oy, ny: integer;
   810                              oy, ny: LongInt;
   811                              team: PTeam;
   811                              team: PTeam;
   812                              end;
   812                              end;
   813     thexchcnt: Longword;
   813     thexchcnt: Longword;
   814     currsorter: PGear;
   814     currsorter: PGear;
   815 
   815 
   816 procedure doStepTeamHealthSorterWork(Gear: PGear);
   816 procedure doStepTeamHealthSorterWork(Gear: PGear);
   817 var i: integer;
   817 var i: LongInt;
   818 begin
   818 begin
   819 AllInactive:= false;
   819 AllInactive:= false;
   820 dec(Gear^.Timer);
   820 dec(Gear^.Timer);
   821 if (Gear^.Timer and 15) = 0 then
   821 if (Gear^.Timer and 15) = 0 then
   822    for i:= 0 to Pred(thexchcnt) do
   822    for i:= 0 to Pred(thexchcnt) do
  1017    end;
  1017    end;
  1018 if Gear^.X > 3072 then DeleteGear(Gear)
  1018 if Gear^.X > 3072 then DeleteGear(Gear)
  1019 end;
  1019 end;
  1020 
  1020 
  1021 procedure doStepAirAttack(Gear: PGear);
  1021 procedure doStepAirAttack(Gear: PGear);
  1022 var t: integer;
  1022 var t: LongInt;
  1023 begin
  1023 begin
  1024 AllInactive:= false;
  1024 AllInactive:= false;
  1025 Gear^.X:= -1024;
  1025 Gear^.X:= -1024;
  1026 Gear^.Y:= -128;
  1026 Gear^.Y:= -128;
  1027 Gear^.dX:= TargetPoint.X -
  1027 Gear^.dX:= TargetPoint.X -