Index: src/combat.c
===================================================================
--- src/combat.c	(revision 6960)
+++ src/combat.c	(working copy)
@@ -341,9 +341,16 @@
 		//Watermelon:Target prediction
 		if(psTarget->type == OBJ_DROID)
 		{
-			predict.x = trigSin( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * dist / psStats->flightSpeed;
+			double flightTime;
+
+			if (proj_Direct(psStats) || dist <= psStats->minRange)
+				flightTime = dist / psStats->flightSpeed;
+			else
+				flightTime = sqrt(dist) / 30;  /* Purely a guess, but surprisingly effective */
+
+			predict.x = trigSin( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * flightTime;
 			predict.x += psTarget->pos.x;
-			predict.y = trigCos( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * dist / psStats->flightSpeed;
+			predict.y = trigCos( ((DROID *)psTarget)->sMove.moveDir ) * ((DROID *)psTarget)->sMove.speed * flightTime;
 			predict.y += psTarget->pos.y;
 
 			// Make sure we don't pass any negative or out of bounds numbers to proj_SendProjectile

