hedgewars/GSHandlers.inc
changeset 4017 048bcb8c72ae
parent 4005 3a42cd3cc27f
child 4018 7f2c71638466
equal deleted inserted replaced
4016:daaf120328f2 4017:048bcb8c72ae
  4092     hh: PHedgehog;
  4092     hh: PHedgehog;
  4093     i: LongInt;
  4093     i: LongInt;
  4094 begin
  4094 begin
  4095     AllInactive := false;
  4095     AllInactive := false;
  4096     hh := PHedgehog(Gear^.Hedgehog);
  4096     hh := PHedgehog(Gear^.Hedgehog);
  4097     RenderHealth(hh^);
       
  4098     DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy -
  4097     DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy -
  4099             cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex);
  4098             cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex);
  4100     DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF,
  4099     DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF,
  4101             $FF);
  4100             $FF);
  4102 
  4101 
  4103     doStepHedgehogMoving(hh^.Gear);
  4102     doStepHedgehogMoving(hh^.Gear);
  4104 
  4103 
  4105     if ((Gear^.Message and gmUp) <> 0) then begin
  4104     if ((Gear^.Message and gmUp) <> 0) then 
       
  4105         begin
  4106         if (GameTicks and $F) <> 0 then exit;
  4106         if (GameTicks and $F) <> 0 then exit;
  4107     end else begin
  4107         end 
  4108         if (GameTicks and $1FF) <> 0 then exit;
  4108     else if (GameTicks and $1FF) <> 0 then exit;
  4109     end;
  4109 
  4110 
  4110 
  4111     graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
  4111     graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
  4112 
  4112 
  4113     if Length(graves) = 0 then begin
  4113     if Length(graves) = 0 then 
       
  4114         begin
  4114         StopSound(Gear^.SoundChannel);
  4115         StopSound(Gear^.SoundChannel);
  4115         Gear^.Timer := 250;
  4116         Gear^.Timer := 250;
  4116         Gear^.doStep := @doStepIdle;
  4117         Gear^.doStep := @doStepIdle;
  4117         exit;
  4118         exit;
  4118     end;
  4119         end;
  4119 
  4120 
  4120     if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then begin
  4121     if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then 
       
  4122         begin
  4121         i := getRandom(Length(graves));
  4123         i := getRandom(Length(graves));
  4122         dec(hh^.Gear^.Health);
  4124         dec(hh^.Gear^.Health);
       
  4125         if (hh^.Gear^.Health = 0) and (hh^.Gear^.Damage = 0) then
       
  4126             hh^.Gear^.Damage:= 1;
       
  4127         RenderHealth(hh^);
  4123         inc(graves[i]^.Health);
  4128         inc(graves[i]^.Health);
  4124 {-for i:= 0 to High(graves) do begin
  4129 {-for i:= 0 to High(graves) do begin
  4125             if hh^.Gear^.Health > 0 then begin
  4130             if hh^.Gear^.Health > 0 then begin
  4126                 dec(hh^.Gear^.Health);
  4131                 dec(hh^.Gear^.Health);
  4127                 inc(graves[i]^.Health);
  4132                 inc(graves[i]^.Health);
  4128             end;
  4133             end;
  4129         end; -}
  4134         end; -}
  4130     end else begin
  4135         end 
       
  4136     else 
       
  4137         begin
  4131         // now really resurrect the hogs with the hp saved in the graves
  4138         // now really resurrect the hogs with the hp saved in the graves
  4132         for i:= 0 to High(graves) do begin
  4139         for i:= 0 to High(graves) do
  4133             if graves[i]^.Health > 0 then begin
  4140             if graves[i]^.Health > 0 then
       
  4141                 begin
  4134                 resgear := AddGear(hwRound(graves[i]^.X), hwRound(graves[i]^.Y),
  4142                 resgear := AddGear(hwRound(graves[i]^.X), hwRound(graves[i]^.Y),
  4135                         gtHedgehog, gstWait, _0, _0, 0);
  4143                         gtHedgehog, gstWait, _0, _0, 0);
  4136                 resgear^.Hedgehog := graves[i]^.Hedgehog;
  4144                 resgear^.Hedgehog := graves[i]^.Hedgehog;
  4137                 resgear^.Health := graves[i]^.Health;
  4145                 resgear^.Health := graves[i]^.Health;
  4138                 PHedgehog(graves[i]^.Hedgehog)^.Gear := resgear;
  4146                 PHedgehog(graves[i]^.Hedgehog)^.Gear := resgear;
  4139                 DeleteGear(graves[i]);
  4147                 DeleteGear(graves[i]);
  4140                 RenderHealth(PHedgehog(resgear^.Hedgehog)^);
  4148                 RenderHealth(PHedgehog(resgear^.Hedgehog)^);
  4141                 RecountTeamHealth(Phedgehog(resgear^.Hedgehog)^.Team);
  4149                 RecountTeamHealth(Phedgehog(resgear^.Hedgehog)^.Team);
  4142             end;
  4150                 end;
  4143         end;
       
  4144         StopSound(Gear^.SoundChannel);
  4151         StopSound(Gear^.SoundChannel);
  4145         Gear^.Timer := 250;
  4152         Gear^.Timer := 250;
  4146         Gear^.doStep := @doStepIdle;
  4153         Gear^.doStep := @doStepIdle;
  4147     end;
  4154         end;
       
  4155     //if hh^.Gear^.Health = 0 then doStepHedgehogFree(hh^.Gear);
  4148 end;
  4156 end;
  4149 
  4157 
  4150 procedure doStepResurrector(Gear: PGear);
  4158 procedure doStepResurrector(Gear: PGear);
  4151 var
  4159 var
  4152     graves: TPGearArray;
  4160     graves: TPGearArray;