--- a/hedgewars/GSHandlers.inc Mon Oct 11 21:41:24 2010 +0400
+++ b/hedgewars/GSHandlers.inc Mon Oct 11 20:34:21 2010 +0200
@@ -4084,3 +4084,80 @@
doStepHammerHitWork(Gear);
Gear^.doStep := @doStepHammerHitWork
end;
+
+
+procedure doStepResurrectorWork(Gear: PGear);
+var
+ graves: TPGearArray;
+ resgear: PGear;
+ hh: PHedgehog;
+ i: LongInt;
+begin
+ AllInactive := false;
+ hh := PHedgehog(Gear^.Hedgehog);
+ RenderHealth(hh^);
+ DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy -
+ cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex);
+ DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF,
+ $FF);
+
+ if ((Gear^.Message and gmUp) <> 0) then begin
+ if (GameTicks and $F) <> 0 then exit;
+ end else begin
+ if (GameTicks and $1FF) <> 0 then exit;
+ end;
+
+ graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
+
+ if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then begin
+ i := getRandom(Length(graves));
+ writeln(i);
+ dec(hh^.Gear^.Health);
+ inc(graves[i]^.Health);
+{-for i:= 0 to High(graves) do begin
+ if hh^.Gear^.Health > 0 then begin
+ dec(hh^.Gear^.Health);
+ inc(graves[i]^.Health);
+ end;
+ end; -}
+ end else begin
+ // now really resurrect the hogs with the hp saved in the graves
+ for i:= 0 to High(graves) do begin
+ if graves[i]^.Health > 0 then begin
+ resgear := AddGear(hwRound(graves[i]^.X), hwRound(graves[i]^.Y),
+ gtHedgehog, gstWait, _0, _0, 0);
+ resgear^.Hedgehog := graves[i]^.Hedgehog;
+ resgear^.Health := graves[i]^.Health;
+ PHedgehog(graves[i]^.Hedgehog)^.Gear := resgear;
+ DeleteGear(graves[i]);
+ RenderHealth(PHedgehog(resgear^.Hedgehog)^);
+ RecountTeamHealth(Phedgehog(resgear^.Hedgehog)^.Team);
+ end;
+ end;
+ Gear^.Timer := 250;
+ Gear^.doStep := @doStepIdle;
+ end;
+end;
+
+procedure doStepResurrector(Gear: PGear);
+var
+ graves: TPGearArray;
+ hh: PHedgehog;
+ i: LongInt;
+begin
+ AllInactive := false;
+ hh := PHedgehog(Gear^.Hedgehog);
+ graves := GearsNear(hh^.Gear, gtGrave, Gear^.Radius);
+
+ if Length(graves) > 0 then begin
+ for i:= 0 to High(graves) do begin
+ PHedgehog(graves[i]^.Hedgehog)^.Gear := nil;
+ graves[i]^.Health := 0;
+ end;
+ Gear^.doStep := @doStepResurrectorWork;
+ end else begin
+ Gear^.Timer := 250;
+ Gear^.doStep := @doStepIdle;
+ end;
+end;
+