Index: combat.c
===================================================================
--- combat.c	(revision 1189)
+++ combat.c	(working copy)
@@ -399,14 +399,10 @@
 				predictY = (SDWORD)(trigCos( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * dist / psStats->flightSpeed );
 				predictY += psTarget->y;
 				//to prevent negative number from corrupting UDWORD parameter tarX,tarY in proj_SendProjectile
-				if (predictX < 0)
-				{
-					predictX = 0;
-				}
-				if (predictY < 0)
-				{
-					predictY = 0;
-				}
+				predictX = MAX(predictX, 0);
+				predictX = MAX(predictX, mapWidth << TILE_SHIFT);
+				predictY = MAX(predictY, 0);
+				predictY = MAX(predictY, mapHeight << TILE_SHIFT);
 			}
 			else
 			{
@@ -459,14 +455,10 @@
 				predictY = (SDWORD)(trigCos( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * dist / psStats->flightSpeed );
 				predictY += psTarget->y;
 				//to prevent negative number from corrupting UDWORD parameter tarX,tarY in proj_SendProjectile
-				if (predictX < 0)
-				{
-					predictX = 0;
-				}
-				if (predictY < 0)
-				{
-					predictY = 0;
-				}
+				predictX = MAX(predictX, 0);
+				predictX = MAX(predictX, mapWidth << TILE_SHIFT);
+				predictY = MAX(predictY, 0);
+				predictY = MAX(predictY, mapHeight << TILE_SHIFT);
 			}
 			else
 			{
Index: projectile.c
===================================================================
--- projectile.c	(revision 1189)
+++ projectile.c	(working copy)
@@ -825,7 +825,9 @@
 						// Determine position to fire a missile at
 						// (must be at least 0 because we don't use signed integers)
 						TargetX = MAX(psObj->startX + extendRad * dx / rad, 0);
+						TargetX = MAX(TargetX, mapWidth << TILE_SHIFT);
 						TargetY = MAX(psObj->startY + extendRad * dy / rad, 0);
+						TargetY = MAX(TargetY, mapHeight << TILE_SHIFT);
 						proj_SendProjectile( &asWeap, (BASE_OBJECT*)psObj, psObj->player, TargetX, TargetY, psObj->z, NULL, TRUE, bPenetrate, -1 );
 					}
 					else
@@ -1068,8 +1070,10 @@
 
 						// Determine position to fire a missile at
 						// (must be at least 0 because we don't use signed integers)
-						TargetX = MAX(psObj->startX + extendRad * dx / iRad, 0);
-						TargetY = MAX(psObj->startY + extendRad * dy / iRad, 0);
+						TargetX = MAX(psObj->startX + extendRad * dx / rad, 0);
+						TargetX = MAX(TargetX, mapWidth << TILE_SHIFT);
+						TargetY = MAX(psObj->startY + extendRad * dy / rad, 0);
+						TargetY = MAX(TargetY, mapHeight << TILE_SHIFT);
 						proj_SendProjectile( &asWeap, (BASE_OBJECT*)psObj, psObj->player, TargetX, TargetY, psObj->z, NULL, TRUE, bPenetrate, -1 );
 					}
 					else
