Sophie

Sophie

distrib > Fedora > 13 > x86_64 > by-pkgid > 08163ffb50475ea8ee1ba869af0dfe3e > files > 2

quake3-1.36-8.svn1802.fc13.src.rpm

From: Simon McVittie <smcv@debian.org>
Date: Sun, 1 Aug 2010 11:26:51 +0100
Subject: [PATCH] Clip cl_mouseAccelOffset at 0.001 to avoid division by zero

Origin: vendor, Debian
Bug: http://bugzilla.icculus.org/show_bug.cgi?id=4691
Forwarded: yes
---
 code/client/cl_input.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/code/client/cl_input.c b/code/client/cl_input.c
index a42030d..5549448 100644
--- a/code/client/cl_input.c
+++ b/code/client/cl_input.c
@@ -477,8 +477,16 @@ void CL_MouseMove(usercmd_t *cmd)
 		}
 		else
 		{
+#			define CL_MOUSEACCELOFFSET_MIN 1.0e-3f
 			float rate[2];
 			float power[2];
+			float offset = cl_mouseAccelOffset->value;
+
+			// clip at a small positive number to avoid division
+			// by zero (or indeed going backwards!)
+			if (offset < CL_MOUSEACCELOFFSET_MIN) {
+				offset = CL_MOUSEACCELOFFSET_MIN;
+			}
 
 			// sensitivity remains pretty much unchanged at low speeds
 			// cl_mouseAccel is a power value to how the acceleration is shaped
@@ -487,11 +495,11 @@ void CL_MouseMove(usercmd_t *cmd)
 
 			rate[0] = fabs(mx) / (float) frame_msec;
 			rate[1] = fabs(my) / (float) frame_msec;
-			power[0] = powf(rate[0] / cl_mouseAccelOffset->value, cl_mouseAccel->value);
-			power[1] = powf(rate[1] / cl_mouseAccelOffset->value, cl_mouseAccel->value);
+			power[0] = powf(rate[0] / offset, cl_mouseAccel->value);
+			power[1] = powf(rate[1] / offset, cl_mouseAccel->value);
 
-			mx = cl_sensitivity->value * (mx + ((mx < 0) ? -power[0] : power[0]) * cl_mouseAccelOffset->value);
-			my = cl_sensitivity->value * (my + ((my < 0) ? -power[1] : power[1]) * cl_mouseAccelOffset->value);
+			mx = cl_sensitivity->value * (mx + ((mx < 0) ? -power[0] : power[0]) * offset);
+			my = cl_sensitivity->value * (my + ((my < 0) ? -power[1] : power[1]) * offset);
 
 			if(cl_showMouseRate->integer)
 				Com_Printf("ratex: %f, ratey: %f, powx: %f, powy: %f\n", rate[0], rate[1], power[0], power[1]);
--