As we know, there are three noforce commands
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.