To solve the problem of noforce commands usage by the gamers in
professional gaming industry, I have written this article, after reading
1 article from http://www.gotfrag.com/, many discussions are have now
been done, still its left a mystery.
As we know, there are three noforce commands
-noforcemparms
-noforcemaccel
-noforcemspd
Now at first glance this is really confusing for the gamers of which
ones to use? All the three? or only -noforcemparms (+) -noforcemaccel
which I also use, or what? What do these commands do. Will acceleration
will be permanently off If I just use 1 or 2, omg, now this is
confusing.
Recommended noforce commands are -noforcemparms -noforcemaccel
Now coming to the point,
Windows OS controls mouse movement with the help of three parameters - MouseSpeed, MouseThresHold1, MouseThreshHold2.
MouseSpeed (int) parameter can have 3 values - 0, 1 and 2
0 means no acceleration , 1 means only double the input distance if its
greater than MouseThreshHold1 Value and 2 means again double the
distance calculated after checking the previous condition. So a maximum
of 4 times of increase in distance. (This will become clearer).
MouseThreshHold1 (int) can have values between [0, 12].
MouseThreshHold2 (int) can have values between [0, 12].
Mouse acceleration - Internal Mechanism
At various time intervals, Windows polls the relative distance of mouse moved and speed of mouse. It now checks two conditions.
1.) If distance moved either in x or y direction is greater than
MouseThreshHold1 value AND MouseSpeed parameter is set to 1 windows
doubles the distance.
2.) If moved distance is greater MouseThreshHold2 Value AND MouseSpeed
parameter is set to 2 then windows doubles the distance calculated from
first condition.
So a maximum of 4 times increase in distance.
If parameters are (0, 1, 3) (MouseSpeed, MouseThreshHold1,
MouseThreshHold2) and you move the mouse 5 units, windows wont check any
condition as MouseSpeed is set to 0 and will move the mouse 5*k (Some
Constant, known as sensitivity).
If parameters are (1, 2, 4)
You move the mouse 3 units, now this is greater than 2 and MouseSpeed is
set to 1, so windows doubles it and moves 6*k units. It wont check 2nd
condition as MouseSpeed is set to 1 not to 2 even if user moves the
mouse greater than 4 units.
If parameters are (2, 2, 4)
You move the mouse 5 units, windows first doubles the distance and come
to second conditions, which is also true, windows agains doubles the
distance, so 5 x 2 x 2 = 50 units moved (multiplied some constant).
In very simple custom C language this would look like
if(MouseSpeed > 0)
{
if(dx > MouseThreshHold1 || dy > MouseThreshHold1)
{
DistanceX *= 2;
DistanceY *= 2;
}
if(MouseSpeed == 2 && dx > MouseThreshHold2 || dy > MouseThreshHold2)
{
DistanceX *= 2;
DistanceY *= 2;
}
}
Now clearly, the windows will only double the distance if MouseSpeed is not zero.
If its zero (that is only noforcemspd parameter), windows wont go into the if condition.
So now, inorder to remove the acceleration we have just to set
MouseSpeed parameter to 0, this wont allow windows to check any
condition of accelerating the mouse (doubling the distance). This is
what 'Enhance Pointer Precision' option does, Unchecking it will set
MouseSpeed value to 0.
noforcemspd uses the value of Windows MouseSpeed, if 'Enhance Pointer
Precision' is turned on then MouseSpeed > 0 (1 or 2 values are set
from the slider position, each position of slider modifies array of 3
integers), if its off then MouseSpeed = 0, which disables the
acceleration completely.
Now noforcemaccel sets MouseThreshHold1 and MouseThreshHold2 values to
windows default. So there is not any change seen when applying only and
only -noforcemaccel
Only using -noforcemspd will disable complete acceleration, there is no need of using -noforcemaccel
And, -noforcemparms is a combination of -noforcemspd -noforcemaccel.