@erk. If they used DirectInput or XInput, then they are probably using a DIMOUSESTATE object, and the deltas for mouse movements are type LONG for each axis. Sub-precision mouse movements? Hz related? Client pixel deltas at < 60 hz refresh rates are good enough for Windows and so should be good enough for Rage's menus. There is probably a much simpler explanation.
Not sure how often DIMOUSESTATE is polled, but if it is one object for each time the mouse sends a packet then you will lose small movements with low sensitivity if you treat the packets in certain ways. Their menu sensitivity is 0.35 and at 1000hz, with constant movement, you would get 8 packets of 1 increment on one axis instead of 1 packet of 8 increment on the axis. Example below is if you use an integer type value and program the function to treat each mousepacket individually:
int i = 0; // 1000hz
int j = 0; // 125hz
// calculate mousemovement with 1000hz
for(int k = 0; k<8; k++)
{
i += 1*0.35;
}
int j = 8 * 0.35;
This would give i == 0 and j == 2
int i = 0; // 1000hz
int j = 0; // 125hz
double temp = 0;
// calculate mousemovement with 1000hz
for(int k = 0; k<8; k++)
{
temp += 1 * 0.35;
}
i = temp;
temp = temp % 1;
int j = 8*0.35;
In this case both i and j are 2 and temp would carry the remainder of the mousemovement for 1000hz and be roughly 0.8 (this is lost if you do not carry the subpixel precission from one frame to the next).
From my experience, it is something similar to this that happens as the mouse doesn't react to slow mousemovement in the menus at 1000hz but is fine at 125hz.