WinXP vs. Win2K mouse input handling overview for QW, Q2 and Q3

author: cure

e-mail: r_zavelli[at]hotmail[dot]com
icq uin: 54987416
msn: r_zavelli[at]hotmail[dot]com
irc: irc.quakenet.org #gauntletism and irc.enterthegame.com #gamepoint

initial version: 30-12-2003
last updated: 18-01-2004

main page


GOAL OF THIS DOCUMENT

The goal of this document is showing some facts and issues I encountered, while transferring the mouse setup from one PC to another. This to get the same feeling on both PC's, while switching PC's and operating systems, from an old PC with Win2K to a new PC with WinXP. I didn't want to switch to XP for several reasons back in 2001:


HARDWARE + SOFTWARE SETUPS

variables old PC new PC
mainboard, chipset Asus A7V266,
VIA VT8366 North Bridge and VT8233 South Bridge
Shuttle FB65,
Intel 865PE North Bridge and ICH5 South Bridge
CPU AMD Athlon-C 1400 MHz Intel Pentium 4 Northwood 3.2 GHz
mouse Microsoft Intelli Explorer 3.0 Microsoft Intelli Explorer 3.0
mouse interface USB USB
mousepad Allsop Raindrop cloth pad Allsop Raindrop cloth pad
operating system Windows 2000 w. SP4 Windows XP w. SP1a
DirectX (for Direct Input) 7.0 (and 9.0) 8.1 (and 9.0)
mouse drivers default windows install default windows install
mouse settings defaults, except for mouse acceleration ('Acceleration' off, screenshot) defaults, except for mouse acceleration ('Enhance pointer precision' off, screenshot)



INITIAL QUAKE INPUT SETUP USED ON OLD PC

Listed below, the settings I have on my old PC after playing:

Side note: In autumn 2003, before I terminated my internet cable contract, I was playing all three games independently for a few months. I felt totally comfortable with every game's settings, playing with the same settings during that time (no thin shaft in Q3 btw).

Note: The game's default values are listed in italics as a reference.

input variables GLQuakeWorld 2.33-0005 FuhQuake GL 0.30 build 585 Quake II 3.20 Quake III Arena 1.32
command line switches -nojoy
-dinput
-nojoy
-dinput
+set in_initjoy 0
-
-
-
commands and cvars +mlook -mlook
_windowed_mouse "1" "0"
-
joystick "0" "0"
-
-
m_filter "1" "0"
m_pitch "0.022" "0.022"
m_yaw "0.022" "0.022"
sensitivity "7.5" "3"
+mlook -mlook
_windowed_mouse "1" "0"
-
joystick "0" "0"
-
-
m_filter "1" "0"
m_pitch "0.022" "0.022"
m_yaw "0.022" "0.022"
sensitivity "7.5" "3"
freelook "1" "0"
-
-
in_joystick "0" "0"
-
in_mouse "1" "1"
m_filter "1" "0"
m_pitch "0.022" "0.022"
m_yaw "0.022" "0.022"
sensitivity "3.5" "3"
cl_freelook "1" "1"
-
cl_mouseaccel "0" "0"
in_joystick "0" "0"
in_logitechbug "0" "0"
in_mouse "-1" "1"
m_filter "1" "0"
m_pitch "0.022" "0.022"
m_yaw "0.022" "0.022"
sensitivity "7.5" "5"



MEASUREMENT METHOD

The only decent measurement method to compare mouse sensitivities over different games or PC's, is to compare the amount of cm's you need to travel with your mouse for a certain amount of degrees rotation of your character in game, or the amount of rotations in a game as the result of a certain amount of cm's moved with the mouse. It makes no sense to compare the mouse sensitivity cvar values between various PC's for a game, expecting it to behave the same, since the mouse sensitivity in game may be influenced by the following variables:

A requisite for this measurement method is that mouse acceleration is off at all times, since mouse movement speed affects in game rotation, if acceleration is on. You can't move a mouse twice accurately from A to B with the same speed. Moving accurately from A to B at any speed is easy though.

What I do to measure is the following; I place my character in game at one particular place on a map while pointing my crosshair on a particular spot. This while having my left side of the mouse flush with the left side of the mousepad. Then, I start to move my mouse from left to right so I end with the right side of the mouse flush with the right side of the mouse pad. Then I look where I end with my crosshair pointing at in game. I do this about five times to get an accurate reading. The wider the mousepad is (traveled distance), the more accurate the resulted reading.

I also thought it would be nice to compare the settings from game to game (QW/Q2/Q3), to see what the differences are (even though this has no real meaning), so I needed a suitable map available to all three games to make a perfect comparison. q2dm1 'The Edge' from Q2 proved the right choice since that map has perfectly scaled counterparts in QW and Q3; q1edge (a conversion by Tim Willits himself) and q3q2dm1 (an unauthorized conversion) respectively.


MEASUREMENT RESULTS ON OLD PC (with Win2K)

I was totally amazed to see QuakeWorld 2.33-0005 and FuhQuake 0.30 responded differently to the same mouse input, this indicates Fuh somewhere modified the QW source for some reason. Time for some source code comparison I guess.

Also, I never considered getting the same amount of degrees rotation/traveled distance in two games. Each game is different gameplay-wise and therefore different in terms of desired mouse sensitivity, but I somehow ended up playing with _exactly_ the same amount of degrees rotation/traveled distance in FuhQuake and Q3, even though I never intended to do this nor I ever compared them before. More funny even is the fact that I use sensitivity 7.5 in both FuhQuake and Q3, meaning that with the present settings (other cvars and command line switches in FuhQuake and Q3), my FuhQuake and Q3 respond identically to the sensitivity cvar. I seem to play Q2 with slightly less degrees rotation/mousepad width (it's a slower game, so it's quite logical I ended up with a slower setting, considering a slower response provides more accurate aim).

On a side note, QuakeWorld with a sensitivity setting of 3.5, without the -dinput command line switch, provided the exact same mouse response as my Quake II 3.20 setup.

Update 04-01-2004: I've asked fuh about the QW 2.33-0005/FuhQuake sensitivity difference issue. He said the cause probably is that FuhQuake was compiled using DirectX 7.0 SDK libraries, while QW 2.33-0005 was probably compiled with DirectX 2, 3 or 5 libraries back in 1998. It also explains why FuhQuake with -dinput and Quake3 react identically to the same sensitivity setting, since Q3 (1.11) was initially released for DirectX 7.0 (in_mouse -1 in Q3 1.32).


MEASUREMENT RESULTS ON NEW PC (with WinXP)

Copied the 'games' dir and shortcuts from my old PC to my new PC and conducted the same tests:

Another surprise: mouse behavior in QW/FuhQuake and Q3 didn't change with my present settings while switching PC's and operating systems.

Q2 suffered from the well-known mouse acceleration problem, due to a change in the Windows XP mouse input code. QW/FuhQuake and Q3 didn't suffer from this, since I'm using the command line switch '-dinput' in QW/FuhQuake to enable DirectX Direct Input, Q3 uses DirectX Direct Input by default.

QW/FuhQuake without the -dinput command line switch also suffered from heavy mouse acceleration, as seen in Q2 with WinXP.

On a side note, when I installed Win2K on my new PC, all three games acted exactly the same as on my old PC with Win2K.


QUAKE2 WINXP MOUSE ACCELERATION 'FIX'

Well, there are several tools out there which are supposed to fix the WinXP mouse acceleration problem found in Q2 (and in QW when -dinput isn't used, but just use -dinput in QW for God's sake). They don't affect Q3 either.

They all do the same thing, they alter the way WinXP handles non-DirectX input mouse input:

All three SEEM to work ok and most people claim these fixes remove mouse acceleration.

However, when carefully examined, you can clearly notice significant changes in character rotating in game when traveling the same distance with your mouse at very slow, or at very fast speed.

In other words: THEY DON'T REMOVE MOUSE ACCELERATION.

I tried both slow and fast mouse movement with all other games with both Win2K and WinXP on both machines to check if it was just me or my optical mouse doing something wrong, but there was no mouse acceleration, none. In Q2 and WinXP, I could not get rid of it on BOTH machines, NO MATTER WHAT I TRIED.


CONCLUSION

Well the conclusion is simple; someone needs to code a custom Q2 client with the DirectX Direct Input code from QW/FuhQuake implemented back in, as id Software removed it from Q2 for some reason long ago. I took a peek in both the Q1 and Q2 engine source, there's no trace of Direct Input code in the Q2 source code left. The present Q2 WinXP mouse acceleration fixes don't really work, they don't fix the cause of the problem, proper Q2 mouse input code that is.

Preferred added cvars and cmd's over id's Q2 3.20 client: in_dinput 0/1 (defaulted to 0, usual Q2 mouse input) and in_restart.

OR:

The simple command line switch -dinput as used in QW/FuhQuake.

Personally I hope for input code which will result in similar mouse input handling in FuhQuake, Q2 and Q3 alike. This can be accomplished by compiling a Q2 client with Direct Input support (as in QW/FuhQuake) using DirectX 7.0 SDK libraries, since both FuhQuake and Q3 1.32 (with in_mouse -1) were compiled with DirectX 7.0 libraries for Direct Input.

Oh eh and while that person is at it, I also encourage him to implement a m_accel cvar with similar behavior to cl_mouseaccel in Q3 ;).