hedgewars/GSHandlers.inc
changeset 6472 bced12412f94
parent 6468 da1e7fe7cff7
child 6473 2bed5ba1a7ea
equal deleted inserted replaced
6471:010ec2fa7d7b 6472:bced12412f94
   396 end;
   396 end;
   397 
   397 
   398 ////////////////////////////////////////////////////////////////////////////////
   398 ////////////////////////////////////////////////////////////////////////////////
   399 procedure doStepMolotov(Gear: PGear);
   399 procedure doStepMolotov(Gear: PGear);
   400 var 
   400 var 
   401 	s: Longword;
   401     s: Longword;
   402     i, gX, gY: LongInt;
   402     i, gX, gY: LongInt;
   403     dX, dY: hwFloat;
   403     dX, dY: hwFloat;
   404     smoke, glass: PVisualGear;
   404     smoke, glass: PVisualGear;
   405 begin
   405 begin
   406     AllInactive := false;
   406     AllInactive := false;
  4939 end;
  4939 end;
  4940 
  4940 
  4941 ////////////////////////////////////////////////////////////////////////////////
  4941 ////////////////////////////////////////////////////////////////////////////////
  4942 procedure doStepStructure(Gear: PGear);
  4942 procedure doStepStructure(Gear: PGear);
  4943 var 
  4943 var 
  4944     x, y: LongInt;
  4944     x, y, i: LongInt;
  4945 begin
  4945     HH: PHedgehog;
       
  4946     t: PGear;
       
  4947 begin
       
  4948     HH:= Gear^.Hedgehog;
       
  4949 
  4946     if (Gear^.State and gstMoving) <> 0 then
  4950     if (Gear^.State and gstMoving) <> 0 then
  4947         begin
  4951         begin
  4948         AddGearCI(Gear);
  4952         AddGearCI(Gear);
  4949         Gear^.dX:= _0;
  4953         Gear^.dX:= _0;
  4950         Gear^.dY:= _0;
  4954         Gear^.dY:= _0;
  4951         Gear^.State:= Gear^.State and (not gstMoving);
  4955         Gear^.State:= Gear^.State and (not gstMoving);
  4952         end;
  4956         end;
  4953 
  4957 
  4954     if CurAmmoGear = Gear then
  4958     dec(Gear^.Health, Gear^.Damage);
  4955         begin
  4959     Gear^.Damage:= 0;
  4956         if (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then
  4960         
  4957             begin
  4961     if Gear^.Pos = 1 then
  4958             DeleteGear(Gear);
  4962         begin
  4959             exit
       
  4960             end;
       
  4961         if Gear = CurAmmoGear then CurAmmoGear := nil;
       
  4962         Gear^.Hedgehog:= CurrentHedgehog;
       
  4963         RemoveGearFromList(CurrentHedgehog^.Gear);
       
  4964         CurrentHedgehog^.Gear^.Z := cHHZ;
       
  4965         CurrentHedgehog^.Gear^.Active := false;
       
  4966         CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and (not gstHHDriven);
       
  4967         CurrentHedgehog^.GearHidden:= CurrentHedgehog^.Gear;
       
  4968         CurrentHedgehog^.Gear:= nil;
       
  4969         Gear^.Tag:= TotalRounds + Gear^.Tag;
       
  4970         AddGearCI(Gear);
  4963         AddGearCI(Gear);
  4971         end;
  4964         AfterAttack;
  4972 
  4965         if Gear = CurAmmoGear then CurAmmoGear:= nil;
  4973     dec(Gear^.Health, Gear^.Damage);
  4966         if HH^.Gear <> nil then HideHog(HH);
  4974     Gear^.Damage := 0;
  4967         Gear^.Pos:= 2
       
  4968         end;
  4975         
  4969         
  4976     if (Gear^.Tag = TotalRounds) or (Gear^.Health <= 0) then
  4970     if Gear^.Pos = 2 then
  4977         begin
  4971         begin
  4978         if Gear^.Hedgehog <> nil then
  4972         if ((GameTicks mod 100) = 0) and (Gear^.Timer < 1000) then
  4979             begin
  4973             begin
  4980             Gear^.Hedgehog^.Gear:= Gear^.Hedgehog^.GearHidden;
  4974             if (Gear^.Timer mod 10) = 0 then
  4981             Gear^.Hedgehog^.GearHidden:= nil;
  4975                 begin
  4982             Gear^.Hedgehog^.Gear^.X:= Gear^.X;
  4976                 DeleteCI(Gear);
  4983             Gear^.Hedgehog^.Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Radius + cHHRadius);
  4977                 Gear^.Y:= Gear^.Y - _0_5;
  4984             InsertGearToList(Gear^.Hedgehog^.Gear);
  4978                 AddGearCI(Gear);
  4985             Gear^.Hedgehog:= nil;
  4979                 end;
  4986             SetAllHHToActive;
  4980             inc(Gear^.Timer);
  4987             end;
  4981             end;
  4988         end;
  4982         if Gear^.Tag <= TotalRounds then Gear^.Pos:= 3;
       
  4983         end;
       
  4984         
       
  4985     if Gear^.Pos = 3 then
       
  4986         if Gear^.Timer < 1000 then
       
  4987             begin
       
  4988             if (Gear^.Timer mod 10) = 0 then
       
  4989                 begin
       
  4990                 DeleteCI(Gear);
       
  4991                 Gear^.Y:= Gear^.Y - _0_5;
       
  4992                 AddGearCI(Gear);
       
  4993                 end;
       
  4994             inc(Gear^.Timer);
       
  4995             end
       
  4996         else
       
  4997             begin
       
  4998             if HH^.GearHidden <> nil then RestoreHog(HH);
       
  4999             Gear^.Pos:= 4;
       
  5000             end;
       
  5001         
       
  5002     if Gear^.Pos = 4 then
       
  5003         if ((GameTicks mod 1000) = 0) and ((GameFlags And gfInvulnerable) = 0) then
       
  5004             begin
       
  5005             t:= GearsList;
       
  5006             while t <> nil do
       
  5007                 begin
       
  5008                 if (t^.Kind = gtHedgehog) and (t^.Hedgehog^.Team^.Clan = HH^.Team^.Clan) then
       
  5009                     t^.Invulnerable:= true;
       
  5010                 t:= t^.NextGear;
       
  5011                 end;
       
  5012             end;
  4989         
  5013         
  4990     if Gear^.Health <= 0 then
  5014     if Gear^.Health <= 0 then
  4991         begin
  5015         begin
       
  5016         if HH^.GearHidden <> nil then RestoreHog(HH);
       
  5017         
  4992         x := hwRound(Gear^.X);
  5018         x := hwRound(Gear^.X);
  4993         y := hwRound(Gear^.Y);
  5019         y := hwRound(Gear^.Y);
  4994 
  5020 
  4995         DeleteCI(Gear);
  5021         DeleteCI(Gear);
  4996         DeleteGear(Gear);
  5022         DeleteGear(Gear);
  5050     if (Gear^.Power = 172) and (HH^.Gear <> nil) and 
  5076     if (Gear^.Power = 172) and (HH^.Gear <> nil) and 
  5051        (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and
  5077        (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and
  5052        ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
  5078        ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
  5053         with HH^.Gear^ do
  5079         with HH^.Gear^ do
  5054             begin
  5080             begin
  5055 	        State:= State or gstAnimation;
  5081             State:= State or gstAnimation;
  5056 	        Tag:= 2;
  5082             Tag:= 2;
  5057 	        Timer:= 0;
  5083             Timer:= 0;
  5058 	        Pos:= 0
  5084             Pos:= 0
  5059             end
  5085             end
  5060     end;
  5086     end;
  5061 if (Gear^.Pos = 3) and (GameTicks and $1F = 0) and (Gear^.Power > 0) then dec(Gear^.Power);
  5087 if (Gear^.Pos = 3) and (GameTicks and $1F = 0) and (Gear^.Power > 0) then dec(Gear^.Power);
  5062 if (Gear^.Pos = 1) and (Gear^.Power = 255) and ((GameTicks mod 2000) = 1000) then Gear^.Pos:= 2;
  5088 if (Gear^.Pos = 1) and (Gear^.Power = 255) and ((GameTicks mod 2000) = 1000) then Gear^.Pos:= 2;
  5063 if (Gear^.Pos = 3) and (Gear^.Power = 0) then
  5089 if (Gear^.Pos = 3) and (Gear^.Power = 0) then