Sunday, June 27, 2010

Noforce Commands Actual Implementaion

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.

2 comments:

  1. nice thank you m8. But I still go with -noforcemparms -noforcempaccel. cuz HeatoN says so. But am I correct? shall I write -noforcemparms -noforcempaccel at once? or one each? btw. here is where it says it. http://www.youtube.com/watch?v=WmbDLQ31cBs

    ReplyDelete
  2. In the video, Heaton is only showing the commands to viewers for explanation purpose, he writes it into the console and do not hit enter(only to show), you can try that, it will show no such command -noforce.... but for the commands to work you have to goto CS properties, set launch options... and there type in the textfield -noforcemparms -noforcemaccel, and run the game. Make sure enhance pointer precision is turned off.

    And please its not noforcempaccel, its noforcemaccel, otherwise the command wont work.

    ReplyDelete