From 93eead81bcb5b61d919e288dfd43f6ba53e415e0 Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Fri, 17 Oct 2003 21:27:36 +0000
Subject: [PATCH] Fixed bug #5903, added more precision to parabolic missiles
 and fixed rounding

---
 src/stratagus/missile.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/stratagus/missile.cpp b/src/stratagus/missile.cpp
index b881820af..19ef115cb 100644
--- a/src/stratagus/missile.cpp
+++ b/src/stratagus/missile.cpp
@@ -960,13 +960,13 @@ local int ParabolicCalc(Missile* missile, int amplitude)
     int thetha;
 
     missile->Xl -= missile->Xstep;
-    missile->X = missile->Xl / 100;
+    missile->X = (missile->Xl + 500) / 1000;
 
     xmid = (missile->SourceX + missile->DX) / 2;
     sinu = (missile->X - xmid) * (missile->X - xmid);
     thetha = missile->SourceX - xmid;
     missile->Y = ((missile->Angle * (missile->X - missile->SourceX)) -
-	amplitude * isqrt(-sinu + thetha * thetha) + missile->SourceY * 100) / 100;
+	amplitude * isqrt(-sinu + thetha * thetha) + missile->SourceY * 1000 + 500) / 1000;
 
     return 0;
 }
@@ -1002,12 +1002,12 @@ local int ParabolicMissile(Missile* missile)
 	    xstep = -1;
 	}
 	if (missile->SourceX - missile->DX != 0) {
-	    missile->Angle = (100 * (missile->SourceY - missile->DY)) / 
+	    missile->Angle = (1000 * (missile->SourceY - missile->DY)) / 
 		(missile->SourceX - missile->DX);
 	} else {
 	    missile->Angle = 1;
 	}
-	missile->Xl = missile->X * 100;
+	missile->Xl = missile->X * 1000;
 
 	MissileNewHeadingFromXY(missile, dx * xstep, dy * ystep);
 
@@ -1019,7 +1019,7 @@ local int ParabolicMissile(Missile* missile)
 	missile->Dy = dy;
 	dx = missile->SourceX - missile->DX;
 	dy = missile->SourceY - missile->DY;
-	missile->Xstep = (100 * dx) / isqrt(dx * dx + dy * dy);
+	missile->Xstep = (1000 * dx) / isqrt(dx * dx + dy * dy);
 	missile->Ystep = ystep;
 	++missile->State;
 	DebugLevel3Fn("Init: %d,%d\n" _C_ dx _C_ dy);
@@ -1037,7 +1037,7 @@ local int ParabolicMissile(Missile* missile)
 	    if (missile->X == missile->DX) {
 		return 1;
 	    }
-	    ParabolicCalc(missile, 50);
+	    ParabolicCalc(missile, 500);
 	}
 	MissileNewHeadingFromXY(missile, missile->X - sx, missile->Y - sy);
 	return 0;
@@ -1058,7 +1058,7 @@ local int ParabolicMissile(Missile* missile)
 		abs(missile->Y - missile->DY) <= 1) {
 	    return 1;
 	}
-	ParabolicCalc(missile, 100);
+	ParabolicCalc(missile, 1000);
 	MissileNewHeadingFromXY(missile, missile->X - sx, missile->Y - sy);
     }
     return 0;