Friday, December 18, 2015

Reflex mouse accel configuration wizard

Confused by Reflex's mouse acceleration options? Completely understandable - there's a lot going on with all of the variables. Even worse - acceleration settings deeply depend on your mouse's DPI, so you can't just copy/paste someone else's settings and hope they work for you!

So, I wrote this little tool to give you a starting point. First, enter your mouse DPI and reflex game sensitivity (aka m_speed in console). Then go to into Reflex's "Options" menu, then "Mouse Settings" and copy the outputs this tool spat out (you'll need to check the box for "Enable Advanced Options").

Reflex Sensitivity

Sensitivity Cap
Post-Scale X
Post-Scale Y

Now that you've copied those settings into the menu, before you go in game do some quick wrist flicks and see if the little white circle can make it to the flat part of the curve at the top. Hopefully it can (and hopefully it doesn't reach it with very slow mouse movements). If not, tweak the acceleration value up or down until you can make it hit the flat part.

Next, go in game and see how it feels. It might feel like it's terribly high sensitivity. If so, change both of the post-scale settings to something like 0.6. If it's still too high, change it to 0.5 or something lower. Basically, tweak those values according to your preference and try to leave the other values alone. The "x" value is for horizontal movement, and the "y" value is for vertical. I have come to appreciate higher vertical sensitivity (I have 0.31 X and 0.5 Y) for easier rocket jumps.

If you end up liking the in game mouse acceleration options, keep in mind that povohat wrote an awesome driver that lets you have the same feeling in Windows and any other game. And this tool will let you copy your Reflex settings directly to the driver for the same acceleration curve and feeling.

Tuesday, December 15, 2015

Copying your accel settings between the driver and games.

Are you using mouse acceleration settings in Reflex or QL and want to get the same feeling in the other game or driver? Do you want to take your driver settings and use them in a game where the computer doesn't have the driver installed? I can help (if QL is involved, I'm assuming cl_mouseaccelstyle 1). First, here's a table of the equivalent options/commands between the driver, Quake Live, and Reflex:

DriverQuake LiveReflex
Sensitivity Capcl_mousesenscapm_advanced_sensitivity_cap
Post-Scale Xm_yawm_advanced_postscale_x
Post-Scale Ym_pitchm_advanced_postscale_y

Use this calculator if you want to convert from Quake Live to Reflex or the driver:

SettingDriverQuake LiveReflex
Sens Cap
Post-Scale X
Post-Scale Y

Note: Once you've set post-scale values to work as m_yaw and m_pitch values, you will want to set m_yaw back to 0.022 and m_pitch back to 0.022 or -0.022 (depending on if you use inverted mouse).

Use this calculator if you want to convert from Reflex to Quake Live or the driver:

SettingDriverQuake LiveReflex
Sens Cap
Post-Scale X
Post-Scale Y

Use this calculator if you want to convert your driver settings to a specific game:

SettingDriverQuake LiveReflex
Sens Cap
Post-Scale X
Post-Scale Y

There are multiple ways to perform these conversions. If you want to do any math yourself, keep in mind that sensitivity is multiplied in before the acceleration, offset, and sensitivity cap calculations are performed, whereas post-scale values are multiplied in after.

Friday, December 4, 2015

New method for the mouse acceleration!

Good news, everyone!  Povohat found another method to perform mouse acceleration!

Using the interception library/driver, povohat wrote a program that reads in mouse inputs and modifies them using the same variables and math as his other driver.  Basically, this means we now have a mouse acceleration driver that no longer requires test mode.

We've been testing the acceleration program/implementation for a few weeks now, but I only got around to adapting the GUI for it yesterday.  I've been passing out builds to people looking for any issues, and so far it seems good.  Here is the latest test build (or mirror).  If you find anything wrong, let me know!
(01/03/16 fixes: Added support for 2000hz mice in graphing, fixed crash that happened during Windows startup, and tweaked timing of starting new instance of interaccel.exe when using global hotkeys (to avoid short duration of all accel being off). Thanks nGolf and The Man for the troubleshooting!)
(12/19/15 bug fix: opening profiles no longer makes the GUI become useless. Thanks nGolf for the troubleshooting!)

Installation instructions are contained in the readme.txt.  The only hiccups we've noted so far are when the driver doesn't install properly.  Some antivirus products seem to sandbox the download and prevents it from installing, so keep an eye out for error messages.  Notable changes to the GUI include:
  • Added tooltips for all numeric inputs.
  • Added hyperlinks to this blog and
  • Added customization wizard to help newcomers have a starting point. (Calculates accel and post-scale values based on your DPI, sets sens-cap to 2).
Ewh from esreality was kind enough to test the input lag of this method of acceleration versus not having it installed.  The raw data is here, and we were happy to discover that the interception driver doesn't add any input lag!  His methodology for testing is the same as this post on esreality.

Next steps to take are: further testing to verify that the GUI isn't broken horribly, get feedback from people on how the wizard settings feel (they aren't too far off from what I'm using, just that they scale to your DPI), and contact anticheat vendors to make sure that the intercept library isn't on a blacklist of sorts for them.  The last thing I want is to have anyone get banned for using our mouse accel implementation, but it seems unlikely that it would happen.

Note regarding anticheat:  It has been over a year since we put this out, and many people have been using it on many games and anticheat services.  None have detected any cheats related to the interception driver (nor should they).  There was a DM on a forum in Feb 2015 of an ESEA admin suggesting to not use this driver, but I know multiple people who have been using the driver on ESEA for multiple months without issues.  Absolutely no problems have been reported with Blizzard's Warden, VAC, Punkbuster, Fairfight, or anything else.

Any and all feedback is very welcome!

Wednesday, November 25, 2015


Frequently Asked Questions:

Q: Everyone tells me mouse accel is bad, why should I believe you?

A: Because every other form of mouse accel out there IS bad, and most people aren't familiar with linear acceleration with a sensitivity cap.  See this post for my take on other types of accel versus this driver.  As for why you should believe me, I guess that's up to you.  I've mentioned elsewhere that more pro players in Quake3/QuakeLive use acceleration than not.  They have among the best aim in the world, and it clearly works for them.  The driver talked about in this blog does the same thing as the acceleration options from those games, and a number of those Quake players (including ClampOK and Noctis) have made the switch to this driver so that they can be at home in other games too.

Q: Does the driver work with direct input?  Raw input?

A: Yes, and yes.  The only games that I've had issues with were Farcry 3 and Farcry: Blood Dragon.  They have some silly settings that clip mouse input when it is too high (effectively a built in negative accel).  Fortunately, there's a fix for that issue.

Q: What's the deal with signed/unsigned drivers?  Why do I have to jump through so many hoops to install your driver?

A: This discussion is no longer relevant.  The current version of the driver doesn't need to be signed (it uses the interception library, which isn't kernel-level).  The old response to this question is as follows:

Every computer hardware manufacturer out there makes drivers that allows their devices to communicate with computers.  Drivers are tested by the software engineers in Windows Test mode, and once they have a working product, they get them signed.

Microsoft explicitly doesn't allow unsigned kernel-level drivers to run on machines under normal circumstances since these drivers have more permission than a typical application/exe.  When malware finds a way around this protection, it's a bad thing.  That said, povohat's driver (and my GUI) have the source code included in the zip files.  Feel free to audit it and compile it yourself - we have nothing to hide.

In order to get a driver signed, Microsoft has a list of certificate authorities (CAs) that they trust, and companies who make drivers will purchase a signing certificate from a CA.  Typically it costs a few hundred dollars to have a signing certificate, and it lasts for one year.  Luckily, once you sign a version of a driver, it stays signed even if your signing certificate expires after the first year.

Simply put, we haven't coughed up the money to get a signing certificate.  See also: "When will the driver be signed?"

Q: Does the driver work play nice with anticheat?

A: For the interception driver - Yes, but argh.

To date, (6/16/16 as of writing), not a single anticheat vendor has responded to my attempts to contact them.  I've addressed VAC, Punkbuster, Fairfight, Blizzard/Warden, and ESEA in various emails, forum posts, and "contact us" type things.  Also to date, not a single person has been kicked, banned, or harassed for using this driver under any of these anticheat vendors.  There was one instance of an ESEA employee suggesting that you shouldn't use this driver, as it could be used to cheat (wtf?), but he only responded to someone on a forum's direct message, and didn't speak to me.

If you are using the old driver, the requirement of Windows Test mode will block you from using ESEA anticheat.

Q: Would I be able to use this on LAN?

A: Depends on whether the tournament organizers will help you get the driver installed.  Since you need administrator privileges to install it, you'd definitely need to coordinate it with them.  When I was planning on attending Quakecon 2016, I contacted a tournament organizer, and they were fully on-board with having it installed on all tournament machines.  (I ended up deciding to not go though)

Got any more questions?  Let me know in the comments, and I'll add to this post!

Tuesday, November 24, 2015

Quickstart guide to configuring the driver post-installation

So, you've got the driver installed and want to see what you can do with it.  What next?  Well, if you are using the latest version of the interception driver, it includes a Wizard that will give you some starting settings to give a shot.  They are calibrated based on your mouse DPI, and it should effectively double your sensitivity as you approach flick speeds.  If you'd rather tweak settings on your own, you can follow these instructions:

First thing's first - click the Settings dropdown menu followed by "Set USB refresh rate".  Choose whatever your mouse is running at.  Do the same thing for Mouse DPI.  Note that the USB refresh rate option will change the way your curve looks, but changing it in the GUI won't affect what your mouse actually polls at.  DPI here is solely for reference in the GUI/screenshots of the GUI - it has no impact on your mouse or the graph otherwise.

The rest of this guide will limit discussion to the basic options (acceleration, sensitivity cap, and post-scale x/y) that most people will want to use.  All other options will be left at the defaults.

How to find the max speed you move your mouse

When you are looking at your acceleration curve, it's nice to know roughly how fast you move your mouse when performing your fastest flick.  Fortunately, there is an easy way with the interception driver.

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.

Why other forms of mouse acceleration are bad

As I said in the introduction to this blog, other acceleration options are notoriously bad.  I'm going to break down why, but I want to preface all of this with the statement that povohat's mouse accel driver has none of the listed issues if you are using it correctly.

Games with mouse acceleration forced on never provide a good experience since you always need to tweak the variables of mouse acceleration depending on your mouse's USB refresh rate (125hz feels vastly different to 1000hz with accel), your mouse's DPI, in game sensitivity, and so on.  Furthermore, a lot of games only check how far the mouse moved just before it draws a new frame.  So if you get into a low framerate area during a heavy battle, you might be moving your mouse at a static speed but find that suddenly it's turning twice as fast as normal!  That's unbearably terrible - your frame rate should never destroy your ability to predict where you will be aiming when you move your mouse.

So, either a game needs to check for mouse input between frames (Reflex, for example is implementing 1000hz input scanning regardless of game FPS to maintain consistency), or you need a driver to handle the acceleration calculations.

But as most know, plenty of mouse drivers still do very poorly with accel.  The most well known is Windows' "Enhance Pointer Precision."  What does it actually do?  It's what we call "threshold based accel."  Basically, if you are moving your mouse slow enough, it acts like a flat mouse sensitivity with no acceleration.  Once you pass a certain speed of moving your mouse, your sensitivity suddenly doubles.  The curve of mouse sensitivity vs mouse speed would look something like this (vertical axis is effective mouse sensitivity where a flat line means no accel):

In theory, it isn't a bad idea - If you're tracking someone at a long range, you can use low sensitivity, and you can get a nice flick in close range to reorient yourself and still stay in the fight.  The problem occurs when you are trying to fight someone at a medium range.  You might be tracking your opponent and keeping up just fine, then suddenly he gets close enough that your tracking sensitivity doubled.  Ew.  That just throws people off, and there's a good reason every FPS community out there will tell you to turn it off.

edit: Per Mark Cranness in the comments of this post, this form of acceleration hasn't been used in Windows for a number of years.  The modern "enhance pointer precision" curve apparently looks like this.  It's definitely better than a lot of bad accel options out there, but configuring it is quite difficult compared to povohat's driver! :)

Next up: Logitech mouse acceleration.  Full disclosure, I haven't used Logitech's driver mouse accel since probably 2001, but this is what the curve looked like back then:

It starts out low and then begins raising as a parabola.  y=x^2 style accel.  The problem with this mouse acceleration is that as you move the mouse faster, it becomes completely uncontrollable.  It's also rather difficult (but not impossible) to get muscle memory working for flicks since the difference in sensitivity becomes very large.  Logitech's accel options of "low," "medium," and "high," controlled how quickly the accel would raise, but it was always uselessly fast when you flicked.

So, what did Quake 3's mouse accel option look like?  Linear, like this:

So now, what we've got is a mouse acceleration that grants you the ability to track at low speeds, a gradual/predictable increase in sensitivity, and a sane sensitivity at the high end.  Quake 3's console variable let you specify exactly how much you wanted (the slope of the line), so you could fit it to your preferences.  If you changed to a different mouse with a different DPI, you can tweak the curve exactly as you wanted to.  This is why pro players in Quake 3 started using mouse acceleration - you get the benefits of low sensitivity (great long range tracking) and high sensitivity (you won't lose your target in close range).

Finally, how I'd like to show how I'm using mouse acceleration:

So, I've got linear mouse acceleration going on, which has some great benefits.  What is new is that I have a "sensitivity cap" where suddenly acceleration stops happening.  The most amazing part about that sensitivity cap is that my muscle memory for flicks will work perfectly.  I know how much mousepad it takes to do a 180, and I can perform it on command.  Even better - if I change to playing a game where there are more long range fights, I can drop my base sensitivity but have it cap out at the same top level, and I can still do my 180 flicks by muscle memory!

How to install the unsigned driver on 64bit Windows 8/10 (OLD DRIVER VERSION)

Note: The instructions listed in this post are for the old version of the mouse acceleration driver that required running Windows in test mode. It is recommended to use the newer version of the driver here.

This method keeps Windows in Test Mode for the driver to work.  (I have been running my copy of Windows 10 in Test Mode since the day I installed it.)  If you are on an older version of Windows, you should be able to use the DSEO method to turn test mode off after you have signed the driver yourself (see the official installation instructions for details).

"When will the driver be signed?" (as of 1/3/16)

1/3/16 Update: The new method of mouse acceleration is working well enough (and doesn't require signing/test mode) that I think we're going to abandon the thought of getting the old driver signed. The text below was written 11/24/15.

A common question I am getting is "how close are you to getting the driver signed?"  Here's the current status:

ReactOS is an interesting project that has a driver signing certificate.  They are willing to (and have in the past) sign open source drivers that are not malicious, don't subvert DRM, don't subvert security features - our favorite mouse accel driver fits the criteria.  I made initial contact with them, and they indicated that we might be able to get the driver signed with their cert.  However...

Why higher DPIs can be good for mouse accel

In a number of competitive FPS communities, there seems to be a stigma against high DPI.  Many gamers run their mice at 400 DPI for various reasons.  In traditional flat/no accel cases, that's fine, but I believe it's less than optimal for povohat's driver.

Important note: some mice have known tracking issues/inconsistencies/jitter at higher DPI.  Google your mouse and see if people recommend avoiding certain DPIs.  If your mouse is bad at 5000 DPI, but it's good at anything from 400-2500, use something like 2500 or a multiple of 400 to make the conversion easier.

Introduction to Mouse Accel for competitive gaming

Hey guys,

So, this blog will be about mouse acceleration and how it's actually a good thing for competitive level gamers.  I'm not talking about Windows "enhance pointer precision" or any mouse manufacturer's settings for mouse acceleration - they are all absolutely terrible and should never be used.

As a quick background, the first "good" acceleration (to my knowledge) was from Quake 3.  You could set a console variable to determine how much linear increase your sensitivity raised based on how fast you were moving your mouse.  Notably, Quake 3's mouse accel was independent of frame rate.  Many games that implement mouse accel fail to make it consistent when your frame rate flucuates, so you should avoid it in most titles.  Years down the road, QuakeLive added two other variables related to mouse acceleration that made it more than just good: an offset, and a sensitivity cap.