Universal WASD controls for top-down RPGs

Created on Friday, October 29, 2010. I last modified it on Sunday, October 29, 2017.
Filed under Software, Game Tools.

Move your character using WASD in games like Titan Quest and Torchlight instead of clicking all the time, because I get really sick of clicking.

Click to download Universal WASD Controls v7.0

Windows only. Works with any game or program. Includes some pre-made profiles to get you started.

What does it do?

If you are like me, you’ve always wished you could use WASD to control the movement of your character in top-down RPGs, where you would otherwise have to click on the ground to move (Diablo, Torchlight, Titan Quest, Grim Dawn, and so on). Universal WASD (UWASD) binds mouse clicks to the WASD keys, so that pressing W places a click above your character and makes them walk up. Or you can tell UWASD to click somewhere else, like clicking to the top-left of your character in an isometric game.

UWASD also doubles as an auto-pickup macro; move your character over an item and they will grab it automatically. In the past there have been lots of requests for such a thing and not enough action, so here we are. This is handy for idle exploring or travelling, eliminating the need to keep clicking all the dang time.


  • Any Windows game or program as long as you are running UWASD as an Administrator.


  • Move-click with WASD — amazing eight-directional movement!
  • Save and reload your settings for multiple games.
  • Pick stuff up or activate or attack things by WASDing towards them.
  • Supports all resolutions and window modes.
  • Run from the compiled .exe, or download Autohotkey and run the included source if you’re worried about malware.

Quick start

  1. Run your game.
  2. Start UWASD as an Administrator by right-clicking it and choosing Run as administrator. UWASD must be run as Administrator or else clicks will not be sent to some games.
  3. Select the target game window in UWASD’s dropdown. Click the Refresh button if your game’s window does not appear in the list.
  4. Click Recalculate coordinates to prepare UWASD to detect the game window.
  5. Switch to the game and press a WASD key. UWASD will hook the window and begin sending clicks.
  6. Observe where these clicks are being placed and how your character moves in response.
  7. Tweak the location of the clicks by adjusting the cardinal offsets values. Adjust these offsets until your game character moves in straight lines.
  8. Save your settings in a profile so that you can reload them again later.


Problem: UWASD doesn’t move the cursor or deliver clicks in-game, but it works when I bring up the Steam Overlay.


UWASD is not running with elevated permissions, so its clicks are being blocked.


Right-click UWASD and choose Run as administrator.

Problem: Clicks are not centered on the screen.


UWASD may have hooked the wrong window, or the window has changed size/resolution since UWASD hooked it.


  1. Make sure that you have selected the correct game window in the UWASD drop-down list.
  2. While in-game, press Ctrl + Shift + Insert to recalculate coordinates and then press a WASD key to re-hook the window.
  3. If you do not have an Insert key, click the Recalculate coordinates button and only press WASD when back inside the game.

Problem: UWASD places unwanted clicks on faraway objects during WASD movement.


You may have told UWASD to place clicks too far away.


  1. Slowly decrease the cardinal offsets until UWASD places clicks as close to your character as possible.
  2. Decrease the diagonal axis offset until diagonal clicks are placed as close to your character as possible.

Problem: Your character drifts up or down instead of travelling horizontally.


Game movement is centered around your character’s feet, and the game’s developers have moved the feet away from the center of the screen.


  1. Adjust the vertical axis offset until your character moves straight.
  2. The horizontal axis offset can also be adjusted if you find that your character won’t travel straight up and down.

Notes and Caveats

There is an option to put the cursor back in its original position but it’s honestly really janky. There is currently no reliable way to send a mouseclick aside from hijacking control of the mouse pointer, as this script does. That’s why the cursor flickers if you turn the “return cursor” option on; it’s being moved from its current position to the click position every 50 ms. You can still move your mouse while WASDing because you can see where the pointer is, but it’s admittedly very confusing. This means that you will probably use WASD for exploration and travelling, and switch to your mouse to fight and maneuver near enemies. If you leave this option off, at least you always know where the cursor is.

If you change your game’s resolution or window size, you will need to recalculate the click coordinates. To recalibrate, click the Recalculate coordinates button or press Shift + Ctrl + Insert, and then press a WASD key when you’re inside the game.


v7.0: Removed Play Sounds option; UWASD now always plays a sound when it hooks the target window. WASD keys are now called by scancode instead of keyname (e.g. SC011 instead of w) to get around a reported warning screen (“The hotkey *w will not be active because it does not exist in the current keyboard layout.)

v6.0: Fixed a bug where Execution Mode didn’t actually do anything. Fixed a bug where Execution Mode was not being correctly loaded from a saved profile.

v5.0: I wrote Universal WASD Controls as a more flexible user-configured program, making the scripts outlined below obsolete.

v4.0: Added a Universal script. Added support for Titan Quest Anniversary Edition. Added support for Torchlight 2. Exposed the numbers that determine where clicks are sent so that users can adjust the positions as needed.

v3.1: Stricter checking to ensure that the script only calibrates to the game window’s measurements. Previously, for example, running the Torchlight script and then visiting a website whose title begins with Torchlight would make the script think you were playing the game, and so it would calibrate itself to the browser’s measurements and provide broken in-game WASD controls.

v3: Fixed the problem with menus not opening. Improved performance by setting coordinates only once at runtime, instead of every 1 millisecond. Tightened offset coordinates so that tapping a key will make the character move the shortest distance possible for better control: no more accidentally walking into fireballs. (Note: Titan Quest controls are improved, but still quite loose because TQ requires you to place clicks quite far away from the character for them to register.) Allowed mouse to snap back to where the user originally placed it when no WASD buttons are pressed.

v2.1: Torchlight support was screwing with Titan Quest support, so I separated the games into their own scripts.

v2: Script architecture now optimised, more elegant. 100% support for Torchlight. Changed click method from single click to double click to force compatibility across games. Added window checking to load offsets customised to each game to improve in-game control. Because A is now used for movement, remapped M to toggle the automap in Torchlight. Remapped S to Numpad2 in Torchlight to prevent it from enabling the Skills window. To get to your Skills window, click its icon on the HUD instead.

v1: Initial release. 100% support for Titan Quest, nominal support for other games.

That's all there is, there isn't any more.
© Desi Quintans, 2002 – 2022.