Is it Possible to Remove In-Game Mouse Acceleration with these Methods?

Started by
2 comments, last by bugtrain 14 years ago
I have a game that uses inbuilt mouse acceleration which is impossible to disable and really ruins the experience for me and many others who play it. It seems that the game uses DirectX, as the windows mouse setting don't affect the in-game mouse in any way. I would love to create a fix and do have a couple of theories on how to fix this, but would need some feedback from someone with experience in game technology/programming. 1. Would it be possible to use some kind of hook and capture the input from the mouse and modify it with an inverse function of the acceleration before passing it on to DirectX and the game? 2. Maybe one could use a program to emulate a virtual mouse with inverse acceleration and then let DirectX take input from that virtual mouse? Or would the emulator run on a too high level for it to work with DirectX? 3. Do you think the game could use some of its run-time memory to store mouse movement data so that one could use a memory editor and apply the inverse function with a code injection?
Advertisement
One of the many reasons I say to never use DirectInput for keyboard or mouse input...

It should be reasonably easy to do. I'd create a fake dinput8.dll, which contains exports similar to the real dinput8.dll. When the game loads your DLL and tries to create a mouse device, you can then return your own interface that inherits from IDirectInputDevice8, and reads the mouse position using normal Win32 methods.
Googling for "Proxy DLL" should provide plenty of relevant links (Although probably not for DirectInput), and the MSDN / DirectX docs and Dependency Walker and dumpbin (Both come with the Platform SDK) should tell you what functions you need to export and what function signature they need to be.
Alright cool. Thanks for the advice.

The game in question is Assassin's Creed 2 PC, which as far as I understand is just a console-port with added mouse functionality. I guess the acceleration was to make it easier to play with an XBOX analog stick, but when making the port they just added a directx mouse device without adjusting the game code.

I'm gonna read all the introduction tutorials to directinput and see what I can do with the SDK. Would be awesome if I could somehow get a template of the dinput8.dll wrapper, which would have all the stuff needed to run without changing anything already there. Then one could just add the inverse function and adjust it to the acceleration.
wait, isn't it possible that the game applies the acceleration within its own code so that even if I feed it normal win32 mouse input through the wrapper, it'll still accelerate it when playing?

This topic is closed to new replies.

Advertisement