From 8281b37a22ad59b0dc6c786afe3d50db2fe201bc Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 1 Aug 2010 11:26:51 +0100 Subject: [PATCH] Clip cl_mouseAccelOffset at 0.001 to avoid division by zero --- 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]); -- 1.7.1