hedgewars/GSHandlers.inc
changeset 1784 dfe9bafb4590
parent 1781 28f674367d68
child 1785 26c28fa8f56c
--- a/hedgewars/GSHandlers.inc	Sat Jan 31 15:44:07 2009 +0000
+++ b/hedgewars/GSHandlers.inc	Sun Feb 01 15:58:44 2009 +0000
@@ -616,7 +616,7 @@
               Gear^.dX, Gear^.dY,
               cHHRadius * 5, cHHRadius * 2 + 7);
 
-if (Gear^.Timer = 0) or ((HHGear^.Message and gm_Attack) <> 0) then
+if (Gear^.Timer = 0) or ((HHGear^.Message and gm_Attack) <> 0) or (Land[hwRound(HHGear^.Y), hwRound(HHGear^.X + Gear^.dX * 32)] = COLOR_INDESTRUCTIBLE) then
 	begin
 	HHGear^.Message:= 0;
 	HHGear^.State:= HHGear^.State and (not gstNotKickable);
@@ -1379,7 +1379,7 @@
 	Gear^.X:= int2hwFloat(LAND_WIDTH + 1024);
 	end;
 
-Gear^.Y:= -_300;  // TODO - consider making this proportional to topY to reduce spread on low maps
+Gear^.Y:= int2hwFloat(topY-300);
 Gear^.dX:= int2hwFloat(TargetPoint.X - 5 * Gear^.Tag * 15);
 
 if int2hwFloat(TargetPoint.Y) - Gear^.Y > _0 then
@@ -1930,7 +1930,8 @@
 if (Gear^.Timer = 0)
 or (t^.Count <> 0)
 or (not TestCollisionYWithGear(Gear, hwSign(Gear^.dY))
-and not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))) then
+and not TestCollisionXWithGear(Gear, hwSign(Gear^.dX)))
+or (Land[hwRound(Gear^.Y), hwRound(Gear^.X)] = COLOR_INDESTRUCTIBLE) then
 	begin //out of time or exited ground
 	doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
 	DeleteGear(Gear);