hedgewars/GSHandlers.inc
changeset 3963 6090d2a2472e
parent 3959 e7ea30323993
child 3965 09eea558ba83
equal deleted inserted replaced
3962:e9ee2bd51e08 3963:6090d2a2472e
  4082     DeleteCI(HHGear);
  4082     DeleteCI(HHGear);
  4083 
  4083 
  4084     doStepHammerHitWork(Gear);
  4084     doStepHammerHitWork(Gear);
  4085     Gear^.doStep := @doStepHammerHitWork
  4085     Gear^.doStep := @doStepHammerHitWork
  4086 end;
  4086 end;
       
  4087 
       
  4088 
       
  4089 procedure doStepResurrectorWork(Gear: PGear);
       
  4090 var
       
  4091     graves: TPGearArray;
       
  4092     resgear: PGear;
       
  4093     hh: PHedgehog;
       
  4094     i: LongInt;
       
  4095 begin
       
  4096     AllInactive := false;
       
  4097     hh := PHedgehog(Gear^.Hedgehog);
       
  4098     RenderHealth(hh^);
       
  4099     DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy -
       
  4100             cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex);
       
  4101     DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF,
       
  4102             $FF);
       
  4103 
       
  4104     if ((Gear^.Message and gmUp) <> 0) then begin
       
  4105         if (GameTicks and $F) <> 0 then exit;
       
  4106     end else begin
       
  4107         if (GameTicks and $1FF) <> 0 then exit;
       
  4108     end;
       
  4109 
       
  4110     graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
       
  4111 
       
  4112     if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then begin
       
  4113         i := getRandom(Length(graves));
       
  4114         writeln(i);
       
  4115         dec(hh^.Gear^.Health);
       
  4116         inc(graves[i]^.Health);
       
  4117 {-for i:= 0 to High(graves) do begin
       
  4118             if hh^.Gear^.Health > 0 then begin
       
  4119                 dec(hh^.Gear^.Health);
       
  4120                 inc(graves[i]^.Health);
       
  4121             end;
       
  4122         end; -}
       
  4123     end else begin
       
  4124         // now really resurrect the hogs with the hp saved in the graves
       
  4125         for i:= 0 to High(graves) do begin
       
  4126             if graves[i]^.Health > 0 then begin
       
  4127                 resgear := AddGear(hwRound(graves[i]^.X), hwRound(graves[i]^.Y),
       
  4128                         gtHedgehog, gstWait, _0, _0, 0);
       
  4129                 resgear^.Hedgehog := graves[i]^.Hedgehog;
       
  4130                 resgear^.Health := graves[i]^.Health;
       
  4131                 PHedgehog(graves[i]^.Hedgehog)^.Gear := resgear;
       
  4132                 DeleteGear(graves[i]);
       
  4133                 RenderHealth(PHedgehog(resgear^.Hedgehog)^);
       
  4134                 RecountTeamHealth(Phedgehog(resgear^.Hedgehog)^.Team);
       
  4135             end;
       
  4136         end;
       
  4137         Gear^.Timer := 250;
       
  4138         Gear^.doStep := @doStepIdle;
       
  4139     end;
       
  4140 end;
       
  4141 
       
  4142 procedure doStepResurrector(Gear: PGear);
       
  4143 var
       
  4144     graves: TPGearArray;
       
  4145     hh: PHedgehog;
       
  4146     i: LongInt;
       
  4147 begin
       
  4148     AllInactive := false;
       
  4149     hh := PHedgehog(Gear^.Hedgehog);
       
  4150     graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
       
  4151 
       
  4152     if Length(graves) > 0 then begin
       
  4153         for i:= 0 to High(graves) do begin
       
  4154             PHedgehog(graves[i]^.Hedgehog)^.Gear := nil;
       
  4155             graves[i]^.Health := 0;
       
  4156         end;
       
  4157         Gear^.doStep := @doStepResurrectorWork;
       
  4158     end else begin
       
  4159         Gear^.Timer := 250;
       
  4160         Gear^.doStep := @doStepIdle;
       
  4161     end;
       
  4162 end;
       
  4163