Tuesday, November 24, 2015

In-depth list of all driver settings.

So, you've got the driver installed, and you want to know how to make the most of it.  Let's go through the options one by one.

First up is the "sensitivity" variable.  In povohat's readme for the driver, he writes, "if your intention is to replicate your existing QL mouse settings, set this value to your in-game sensitivity and continue to use this sensitivity value in-game."  It technically multiplies the sensitivity into the driver before acceleration calculations happen, and then divides it out after the calculations are done.  Simply put, keep sensitivity at 1 unless you are coming from Quake Live.

The "Acceleration" variable controls how quickly the mouse sensitivity will go up.  Pretty straightforward - the closer to 0, the closer to "no accel/flat sensitivity."  It's dependent on your mouse DPI and USB refresh rate, so keep that in mind when changing your hardware/mouse software around.  Also note that the Pre-Scales and Post-Scales will change this too!  There is an option in the GUI dropdown "Settings" menu that allows you to scale acceleration to maintain the same slope when changing post-scales and pre-scales.  I highly recommend checking those options once you have an accel curve that you like.

"Sensitivity Cap" is the glorious variable that determines where acceleration stops kicking in.  It's a multiplier of your base sensitivity (post-scale and pre-scale variables), so a cap of "2" means that accel will only double your sens from its slowest.  If you want to maintain muscle memory for flicks, you'll want to scale the sensitivity cap with post-scales and pre-scales too (Settings dropdown in the GUI).

"Speed Cap" is a gimmick.  I say this because I specifically asked povohat to add it :).  If you've ever been in a game with a vehicle that limits you from turning too quickly, that's what the speed cap feels like.  I asked for it to see if you could use it to get perfect turning rate circle jumps in Quake.  It's really not that useful though.

"Offset" determines how long it will be until mouse acceleration starts to kicks in.  You can effectively make the sensitivity flat (no accel) for a short period of time, then let the accel raise it up after that threshold is met.  This is nice in theory, but I found that having an offset made it difficult to get used to small changes in the curve.  I keep mine at 0, but if you have a curve with a non 0 value that you are happy with, that's quite fine.

"Power" determines the exponent of the curve.  If you set it to 2 (the default), acceleration is linear.  If you set it to 3, you have a parabola.  Personally, I like linear accel, but I did try stuff like 2.5 for a while and enjoyed it.  Similar to the offset, I found straying from the default made it harder to adjust to small changes to your accel curve, but there's nothing fundamentally wrong with using non standard values.

"Pre-Scale X"/"Pre-Scale Y" is a flat multiplier on top of everything (separated into horizontal and vertical mouse movements), but it occurs before the acceleration and offset calculations.  Changing this has a tendency to change a few other things inconveniently... I recommend using the next values:

"Post-Scale X"/"Post-Scale Y" is what you will change to affect your starting sensitivity before the acceleration kicks in.  It also impacts the other variables you will be changing, but not as dramatically as the Pre-Scales, and as seen above there are options to make the important variables scale with changes to your Post-Scale X value.  The X value is for left/right, Y is for up/down.  If you want to have your horizontal sensitivity the same as your vertical sensitivity, there is a check box under settings to lock Y to X.

"AngleSnapping" allows you to make mouse movements that are close to a right angle be snapped to a right angle - basically it lets you draw horizontal and vertical lines with your mouse easier.  I haven't found much use of it in FPS games, so I keep mine at 0.

"Angle" is a rotation of the initial mouse movement before any other calculations are performed.  It is there to correct for any oddly placed mouse sensors.  If you move your mouse perfectly left/right on your mousepad and see that it isn't moving perfectly left/right on screen, you might want to tweak this value.


  1. Hey there, In csgo, one of the commands is m_customaccel_exponent and another is m_customaccel_scale, are there anyway to replicate it using these commands?

    m_customaccel_scale = "0.04" ( def. "0.04" ) min. 0.000000 -Custom mouse acceleration value.

    m_customaccel_exponent = "1.05" ( def. "1.05" ) -Mouse move is raised to this power before being scaled by scale factor.

  2. Without looking at the source code, I'd guess that the exponent from CS is the same as the exponent from our driver offset by 1. In our driver, exponent of 2 means linear accel (y = m*x), and 3 is a parabola (y = m*x^2). And the scale is probably the same as our "accel" value, but there might be some multiplier to convert from CS to povohat's stuff - I couldn't say.

    1. Thanks for your prompt reply! I'll fiddle around with it.

  3. Hey, I was wondering if I could get a more technical answer to how acceleration works in the driver. Obviously, it isn't a multiplier because an acceleration of less than 1 would make the cursor slower when moving the mouse fast. So is it additive or something? Like a value of 1 means that'll add 1 more dpi per cm per second or something? And how does postscale xy affect it? I'm asking this because when I scale postscale xy and acceleration up together, then scale dpi down, it should, but it doesn't feel the same.

    Also the explanation for sens cap makes sense to me for the most part, but if it were really a cap at a multiplied value for the sensitivity derived from dpi and postscale xy, then it wouldn't make sense to change it if I changed dpi along with postscale xy, right? For example, if I had 2000 dpi, then postscale xy of 0.5, I would have an outcome of 1000 'effective dpi'. But say I changed it to 1000 dpi then a postscale xy of 1, I would have the same, then sens cap is the same in both those, right?

    1. http://pastebin.com/ibit4n1t is a copy/paste of the function that drives the graph in the GUI. It's basically a simplified version of the actual driver (in the GUI, we don't care about angle snapping/angle adjustment and it's one dimension of movement instead of two).

      From there, you can see that the original input is multiplied by pre-scale first, then it goes through the accel calc, then it multiplies in post-scale. Assuming "sens" of 1, the accel calc starts at 1 then adds a factor based on , which is then multiplied into the output. Line 31 in that calculation is just to show the relative sensitivity for graph purposes - the driver doesn't do that division.

      As for doing 2000 dpi with 0.5 post-scale versus 1000 dpi and 1 post-scale, those two would be identical if you don't have accel turned on. When you change dpi, you also need to scale the acceleration and offset to get the same basic curve. If you had 2000 dpi, 0.5 post-scales, 0.1 accel, and 5 offset, I think the equivalent 1000 dpi settings would be 1 post-scales, 0.2 accel, and 2.5 offset (but I'm absolutely fried right now, so there is a chance I went the wrong way with those multipliers on accel/offset).

    2. Thanks! But what about sens cap?

    3. Ah, right, sens cap is just the max multiplier that accel applies from the original sensitivity. You can keep it at the same value as it was before you adjusted dpi. 2000 dpi with 0.5 post-scale (1000 effective dpi) and sens cap of 2 (caps out at 2000 effective dpi) is equivalent to 1000 dpi with 1 post-scale (1000 dpi) and a sens cap of 2 (caps out at 2000 effective dpi).

      All that said, you'd generally want to be adjusting your dpi up with this driver. Higher dpi makes the curve smoother and more gradual with sensitivity changes from accel (see: http://mouseaccel.blogspot.com/2015/11/why-mouse-accel-driver-works-best-with.html), which I find to be a lot more predictable to muscle memory. There is a decently large difference going from 400 to 2400, but probably not too much to be gained higher than that. Just make sure your mouse's hardware is still capable of tracking without jitter at high dpi.

    4. Alright, hypothetically my accel is 0.05, my DPI is 800, and my post-scale xy is 0.125. So, it is initially at 800, then let's just say that it goes fast enough so that exactly that factor of 0.05 gets added. This means 800.05, then multiplied by 0.125, this effective sensitivity at this certain speed is now 100.00625.

      Let's assume I wanna decrease DPI down to 400, which influences postscale xy to become 0.25, and according to what you've said, accel is now 0.1, because postscale xy and accel change together, if psxy multiplies by 2, so does accel. This means that initially, I'm at 400 and I move just fast enough at that exact aforementioned speed, to add 0.1, meaning it is now 400.1. After multiplying by 0.25, this becomes 100.025. What should've happened is accel becomes halved to become 0.025, when psxy doubled. According to how I think this works, anyway.

      (400+0.025)0.25 = (800+0.05)0.125 = 100.00625

      In conclusion, I'm pretty sure that accel and postscale xy go opposite ways. I still have a problem in that, it still doesn't feel the same, or maybe I actually don't like the fact that it's more smooth? It feels faster somehow.

    5. One more question, sorry to have so many, what do I do to my accel if I decide to have a different postscale y from postscale x?

    6. I'm not 100% sure on the math you listed up there (something seems off), but did you account for the fact that when you reduce DPI and move your mouse at the same speed as before that the number of counts/input that is seen by the driver is also reduced?

      I use different post-scale x and y personally. The sensitivity cap is relative to each post-scale, so if you have a sens cap of 2 then it will allow your horizontal sensitivity to double, and your vertical sensitivity can double as well. I think acceleration gets applied based on the 2d vector of mouse input (a^2+b^2=c^2).

    7. I'm not sure I understand what you mean, but I forgot to mention that I reduce dpi in my example, but my actual intentions are to increase DPI, specifically from 800 to 3000, and all that follows. And it is because of that, that it feels faster, almost twice as fast, although I'm pretty sure I'm doing it right.