diff -r e9ee2bd51e08 -r 6090d2a2472e hedgewars/GSHandlers.inc --- 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; +