# HG changeset patch # User nemo # Date 1288497049 14400 # Node ID de7170e51cc634545f600152fba1c58813c4435a # Parent 4bf039d637dfa6ca321af66ddc40aa62a89d47c9 Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation diff -r 4bf039d637df -r de7170e51cc6 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Sat Oct 30 22:53:23 2010 -0400 +++ b/hedgewars/GSHandlers.inc Sat Oct 30 23:50:49 2010 -0400 @@ -4107,13 +4107,12 @@ begin AllInactive := false; hh := PHedgehog(Gear^.Hedgehog); - DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy - + DrawCentered(hwRound(hh^.Gear^.X) + WorldDx, hwRound(hh^.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);*) - doStepHedgehogMoving(hh^.Gear); - hh^.Gear^.Y := Gear^.Y; + if hh^.Gear^.Damage <> 0 then doStepHedgehogMoving(hh^.Gear); if ((Gear^.Message and gmUp) <> 0) then begin @@ -4121,22 +4120,25 @@ end else if (GameTicks and $1FF) <> 0 then exit; - if Gear^.Power < 45 then begin + if Gear^.Power < 45 then + begin inc(Gear^.Power); - Gear^.Y := Gear^.Y - _1; - end; - - graves := GearsNear(hh^.Gear^.X, hh^.Gear^.Y + int2hwFloat(Gear^.Power), + if not TestCollisionYwithGear(hh^.Gear, -1) then hh^.Gear^.Y := hh^.Gear^.Y - _1; + end; + + graves := GearsNear(Gear^.X, Gear^.Y + int2hwFloat(Gear^.Power), gtGrave, Gear^.Radius); - if Length(graves) = 0 then begin + if Length(graves) = 0 then + begin StopSound(Gear^.SoundChannel); Gear^.Timer := 250; Gear^.doStep := @doStepIdle; exit; - end; - - if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then begin + end; + + if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) then + begin i := getRandom(Length(graves)); dec(hh^.Gear^.Health); if (hh^.Gear^.Health = 0) and (hh^.Gear^.Damage = 0) then @@ -4149,10 +4151,13 @@ inc(graves[i]^.Health); end; end; -} - end else begin + end + else + begin // now really resurrect the hogs with the hp saved in the graves for i:= 0 to High(graves) do - if graves[i]^.Health > 0 then 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; @@ -4169,36 +4174,38 @@ LoadImage(Pathz[ptHats] + '/Reserved/Zombie', ifNone), True) end - end; - - hh^.Gear^.dY := _0; + end; + + doStepHedgehogMoving(hh^.Gear); StopSound(Gear^.SoundChannel); Gear^.Timer := 250; Gear^.doStep := @doStepIdle; - end; + end //if hh^.Gear^.Health = 0 then doStepHedgehogFree(hh^.Gear); end; procedure doStepResurrector(Gear: PGear); var graves: TPGearArray; - hh: PHedgehog; i: LongInt; begin AllInactive := false; - hh := PHedgehog(Gear^.Hedgehog); - graves := GearsNear(hh^.Gear^.X, hh^.Gear^.Y, gtGrave, Gear^.Radius); - - if Length(graves) > 0 then begin - for i:= 0 to High(graves) do begin + graves := GearsNear(Gear^.X, Gear^.Y, 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; + end; Gear^.doStep := @doStepResurrectorWork; - end else begin + end + else + begin StopSound(Gear^.SoundChannel); Gear^.Timer := 250; Gear^.doStep := @doStepIdle; - end; + end end; diff -r 4bf039d637df -r de7170e51cc6 hedgewars/GearDrawing.inc --- a/hedgewars/GearDrawing.inc Sat Oct 30 22:53:23 2010 -0400 +++ b/hedgewars/GearDrawing.inc Sat Oct 30 23:50:49 2010 -0400 @@ -278,15 +278,8 @@ defaultPos:= false end; gtResurrector: begin - DrawRotated(sprHandResurrector, hwRound(Gear^.X) + WorldDx, - hwRound(Gear^.Y) + WorldDy, 0, 0); - DrawRotated(sprCross, hwRound(CurAmmoGear^.X) + WorldDx, - hwRound(CurAmmoGear^.Y) + WorldDy + (CurAmmoGear^.Power), 0, 0); - defaultPos := false; - Tint($f5, $db, $35, max($00, floor($C0 * abs(1 - (GameTicks mod 6000) / 3000)))); - DrawTexture(sx - 108, sy - 108 + (CurAmmoGear^.Power), - SpritesData[sprVampiric].Texture, 4.5); - Tint($FF, $FF, $FF, $FF); + DrawRotated(sprHandResurrector, sx, sy, 0, 0); + defaultPos:= false end; gtKamikaze: begin if CurAmmoGear^.Pos = 0 then @@ -865,6 +858,12 @@ DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 3, 0, 0, x, y, 0, 1, 22, 22, (RealTicks shr 36 + Gear^.UID * 100) mod 360); Tint($FF, $FF, $FF, $FF) end; + gtResurrector: begin + DrawRotated(sprCross, x, y, 0, 0); + Tint($f5, $db, $35, max($00, floor($C0 * abs(1 - (GameTicks mod 6000) / 3000)))); + DrawTexture(x - 108, y - 108, SpritesData[sprVampiric].Texture, 4.5); + Tint($FF, $FF, $FF, $FF); + end; end; if Gear^.RenderTimer and (Gear^.Tex <> nil) then DrawCentered(x + 8, y + 8, Gear^.Tex); Gear:= Gear^.NextGear