Pages

Wednesday, November 25, 2015

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 theirdevices 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.

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

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.

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.

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 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!

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).

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...

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.

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.