# HG changeset patch # User alfadur # Date 1565124422 -10800 # Node ID 9299f43ba0ec85ebf051636a2c7524fd1553d3e1 # Parent 361e79c6c42815572835d3491350494c6cfe8d62 disallow placing girders over airmines and moving hogs diff -r 361e79c6c428 -r 9299f43ba0ec hedgewars/uCollisions.pas --- a/hedgewars/uCollisions.pas Tue Aug 06 23:28:14 2019 +0300 +++ b/hedgewars/uCollisions.pas Tue Aug 06 23:47:02 2019 +0300 @@ -1056,18 +1056,18 @@ while Gear <> nil do begin - if (Gear^.Kind = gtAirMine) or ((Gear^.Kind = gtHedgehog) and (Gear^.CollisionIndex <> 0)) then + if (Gear^.Kind = gtAirMine) or ((Gear^.Kind = gtHedgehog) and (Gear^.CollisionIndex = 0)) then begin gx:= hwRound(Gear^.X); gy:= hwRound(Gear^.Y); - r:= Gear^.Radius; + r:= Gear^.Radius + 1; if (gx + r >= sprX) and (gx - r < sprX + w) and (gy + r >= sprY) and (gy - r < sprY + h) then for y := gy - r to gy + r do for x := gx - r to gx + r do begin if (x >= sprX) and (x < sprX + w) and (y >= sprY) and (y < sprY + h) - and (Sqr(x - gx) + Sqr(y - gy) < Sqr(r)) - and (((PLongword(@(p^[Image^.pitch * y + x * 4]))^) and AMask) <> 0) then + and (Sqr(x - gx) + Sqr(y - gy) <= Sqr(r)) + and (((PLongword(@(p^[Image^.pitch * (y - sprY) + (x - sprX) * 4]))^) and AMask) <> 0) then begin CheckGearsUnderSprite := true; if SDL_MustLock(Image) then diff -r 361e79c6c428 -r 9299f43ba0ec hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Tue Aug 06 23:28:14 2019 +0300 +++ b/hedgewars/uGearsHandlersMess.pas Tue Aug 06 23:47:02 2019 +0300 @@ -3317,6 +3317,7 @@ (hwRound(Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y)) > cBuildMaxDist) ))); if distFail + or CheckGearsUnderSprite(Ammoz[Gear^.AmmoType].PosSprite, Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Gear^.State) or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, LandFlags)) then begin PlaySound(sndDenied);