ARPG Gamepad Controller

Current Version: ARPGGamepadController 1.2.7

Some info about it on the release post.

This tools helps mapping gamepad actions to the mouse and keyboard, what makes it different from other similar tools is that Analog mapping is specific for emulating gamepad support on topdown games, allowing to play almost as if the game had native support for a gamepad.

What it does:

  • Movement, when moving the analog the mouse will be positioned at a fixed distance from the center and either a mouse button or key is pressed, this allows fluid movement to the direction you move the analog without degrading over time, as the mouse is kept at the same distance all the time.
  • Aiming, when moving the analog the mouse is set at a relative position describing a configurable ellispis on screen, this allows to aim in a range from right next to the center up to the limits of the screen, the ellipsis can also be configured to match the current resolution Aspect Ratio.
  • Virtual Aim Mode, topdown click games, usually move and aim both with the mouse, on a gamepad you can move both analogs independently, but the mouse cursor can’t be at 2 points at the same time, normal mode gives priority to aiming analog, so you stop moving once you start aiming, this is where Virtual Aim Mode enters, in this mode, when moving the aiming analog, a special reticle will be drawn to where the mouse position would be, keeping the mouse cursor free to move while aiming, once a button is clicked, the mouse cursor moves to the aiming position right before sending the key/button press, once the button is released, the mouse cursor is released by the aiming analog as well, allowing to move again, this allows to aim while moving and you only stop moving while executing the action (which happens in most of these games anyway).
  • Buttons Bindings, you can bind a key, mouse button and modifier (control, alt and shift) and any combination of those 3 types into any gamepad button
  • Supports profiles for different games, each profile can have multiple Resolutions analog configurations.

What this app doesn’t do:

  • Macros, the intention of the map is simply to allow the use of a gamepad, as such, any combination (outside of modifier keys) or sequence of keys must still be done manually by the user.
  • Autoaiming, the tool doesn’t hook into the games memory, so it’s not really aware of what happens in the games, aiming is manual and corresponds 1:1 to the gamepad analog movement according to the profile configuration.
  • Sending info over internet, the tool doesn’t connect anywhere nor pings any server, always make sure the tool is downloaded from the cutekickstudio server.

Requirements

  • An XInput compatible gamepad. This includes Xbox controllers, and any other controller or driver that makes the gamepad get recognized as an Xbox controller. PS4 gamepad highly recommended, since it includes a trackpad and that helps a lot with inventory management and UI navigation on all games.
  • .Net Framework 4.5.
  • For virtual aim mode, the game must be running in windowed or windowed fullscreen modes, and the video card must support directx.

Currently Included Profiles

  • Path of Exile.
  • Heroes of the Storm. A simple default profile and an improved profile, I highly recommend the improved profile, but it does require to change some bindings in the game.
  • agar.io, really cool game, check it out.
  • Diablo 3.

Virtual Aim Mode Info

This mode creates a directx transparent window, set as the topmost window on the desktop, it then draws the special reticle on it, it requires the game to be on windowed or fullscreen windowed mode, otherwise the special reticle won’t be drawn on top of the game, however, this works without having to hook into the game’s memory or graphic context, etc, allowing for virtual aim to work without being invasive to the games process.

 

 

Thanks for reading, hope you guys find it useful, don’t forget to leave feedback in the comments.

weberto.

 

Version History

  • 1.2.7 – Multiple bug fixes, new profile for Diablo3, new variant profile for HOTS.
  • 1.2.5 – Multiple bug fixes, Virtual Aim Timing Improvements
  • 1.2.4 – Fixed a crash that happened under certain conditions
  • 1.2.3 – Added complete button definition to analog configuration, updated Heroes of the Storm profile to fix self cast.
  • 1.2.2 – Improvements on Virtual Aim, improved profile for Heroes of the Storm
  • 1.2.1 – Fixed a crashing bug when a gamepad wasn’t connected.

37 thoughts on “ARPG Gamepad Controller

  1. I can not figure out if its designed this way or if its just hard to use. But with the Left analog you move, but the right analog doesn’t over ride, cause it hard to use abilities unless chasing. And I am assuming this is the limit of the computer not your program, but there is absolutely no way to kite with this. Since both analogs are binded to the same “cursor”.

    1. Hi Kyle

      That’s for the normal operation, as you say, both analogs map to the same mouse cursor.

      However, this is why I added the Virtual Aim Mode option, to use it you need to follow these steps:

      1. Make sure the ON checkbox is unchecked so the app is not processing the gamepad.
      2. Mark Virtual Aim Mode as checked.
      3. Mark the ON checkbox as checked, you might notice a small flick in the screen.

      What this does, is that creates an independent directx overlay, where the tool will draw a small yellow reticle when you move the right analog stick, in the position the mouse would be, it will only move the mouse to that position when you press another button (it actually moves the mouse first and then sends the button key event).

      This allows kiting, note that while you are pressing the button, the tool will no longer send the movement of the left analog stick, so your character will have to stop while attacking, but will resume as soon as you release the button, this behavior feels really good and is how I play.

      There is one requirement for this mode however, and that is that your game has to run in “Windowed Fullscreen” or Windowed mode, otherwise, the directx overlay won’t be visible, I use windowed fullscreen mode in Path of Exile, Heroes of the Storm and Diablo 3 and it works great, the catch is that the resolution the game runs has to match your desktop resolution.

      Also, you can change the reticle, is the Reticle.png file in the tool folder, just make sure to use a file that has alpha values for transparency.

      Hope this helps!

      1. Hi, does this mean that Virtual Aim Mode will not work correctly if using multiple monitors?

        Thank you for your work.

  2. hey guys

    thx for the great app. made my life much easier on poe! now i m trying to use it on diablo 2 and can t wrap my head around why it isnt working. can you please help me?

    1. Hi, nice to hear it helped you with poe.

      I haven’t tested the app on diablo2, and would need more info from you about what’s doing or what isn’t doing, I know you’ll probably won’t be able to use virtual aim as I don’t think diablo2 supports windowed fullscreen modes.

      I do know that some games, like Sacred2, seem to connect to the mouse on a lower level and don’t detect the movements and keypresses created by the Tool, if that’s the case, then unfortunately there isn’t anything we can do with this app.

      1. first of all: thx for the fast reply!
        it looks to me that the game is not recognizing any input after i made a profil called d2 for diablo 2. in poe i just edited your poe profile and named it poe2. is there smth i have to specify in the app to make it recognize the diablo II window? the virtual aim isnt needed because i mostly play the melee chars.

        1. You should be able to use the poe profile while running diablo 2, bindings won’t match, but it should at least move the mouse accordingly and the game should register the specific key presses, if this isn’t happening, then its most likely the same scenario as with Sacred 2

          Unfortunatelly, we can’t do anything here, the app is sending the mouse and key events to windows, but the game is likely listening directly into the hardware mouse and keyboard events, so it doesn’t care about the windows events.

  3. I have some trouble with this…
    Tried to use it with POE and it works great except for … running. My character makes exactly one step into the desired position, then stops for a second. Something as simple as crossing a town takes two minutes like that.
    Any idea what could be the issue? I’m using a PS3 gamepad together with MotionJoy to emulate the XBox controller.

    1. Try running POE in predictive mode, I have noticed that with lockstep mode, it requires very low pings to work fluently, otherwise, you get those stops, another option would be to change the radius to a bigger one in the app, this helps a bit, but if your ping is too high it will still have brief stops.

      I don’t think the gamepad should be an issue, this has to do with lockstep mode and how it waits for the server to respond before continuing movement, this is why you won’t get this behavior in predictive mode, which has improved a lot, but you might still get desyncs, depending on your connection.

      I ended up changing to predictive mode because of this, sometimes I would be able to play without issues, but anything that would slow down my available bandwidth it would start causing this.

      hope this helps a bit.

  4. Just wanted to say thanks for the tool! This lets me play Path without agitating my wrist problems.

    I have some feedback as well:

    I used your POE preset and set the tool to use 1920×1080, as well as setting my POE game to use 1920×1080 in windowed mode. However, I still had to tinker a bit with the offsets/radius to get the cursor movement centered around my character. If the POE window ever moves, that means I have to go through calibrating offset/radius again. Is it possible to have the coordinates be relative to the POE window instead of absolute to your desktop?

    One other thing I’d like would be a way to toggle into a “menu” mode. This mode would have a different set of arbitrary mappings for hotkeys to open up menus like passive tree/inventory. Additionally, it would turn an analog stick into a virtual mouse so you can control the cursor freely. That way you can also menu-based actions like inventory management with it. It’d still be clunkier than using a mouse, but I would definitely still use this option.

    1. Hi, and thanks for the feedback!

      Set POE to windowed fullscreen mode, that way there’s no actual window borders and it’s always centered using the full screen, while behaving like an actual window and not true fullscreen mode, unfortunately, since the app is completely independent from the POE (or other games) process, that means there’s no way to be relative to the game window.

      Nice, I’ll have that in mind, it’s true, a way to quickly switch profiles would help with most management tasks, I personally use a ps4 gamepad, so the trackpad is a great help, but an option for those with other gamepads would help a lot. I’ll think a way to do something like this, and update the UI accordingly, note that there’s no ETA, since I work on the tool on my free time, heh.

      glad its working for you

      1. Yeah I knew using the borderless fullscreen was an option, but I’d much prefer playing in just regular windowed mode. Oh well, I sucked it up and started playing with borderless windowed instead. I’m guessing relative coordinates won’t be implemented since it might require hooking into the game process and thus possibly violate ToS?

        Thanks again for the tool! I’ll be keeping an eye out for updates with quick profile swapping.

        1. Sorry for the double post, but I just wanted to report a crash I’m encountering while using virtual aim:

          I’ll start the app, check the virtual aim box, then toggle the ON box to refresh the app.
          Any subsequent toggles of the ON box will result in the app crashing. This happens 100% of the time for me. If I ever need to make changes while virtual aim is running, I need to completely terminate the app instead of just toggling the ON box.

  5. With the improved profile for Heroes Of The Storm it says that some of the keybindings need to be remapped, which keys need to be changed?

    1. Check the Versions.txt file, go to the 1.2.2 version notes, the bindings are specified there

      If you want to use the v3 profile, then check in 1.2.7 for the bindings

      Highly recommended to create a key bindings profile within HOTS before changing the bindings.

  6. Hello,
    I’m experiencing some problems with your program (but thanks anyway, it was needed) and I would like to have it working correctly. Right now the buttons are configured correctly but the sticks seem to have the center of their circle/ellipsis far away from where the character is. I guess it’s only a matter of resolution, I have 1920×1080 for both game and desktop but in the top part of the program windows it says “Controller resolution” 1280×720 and I cannot change that field. Could you help me with this issue?

    1. Sure, that field is the actual internal resolution that windows uses for the mouse (probably other things, but we only care about the mouse pointer), this changes when the desktop is set to display things bigger than they are, like at 125% of their size, used for very high resolutions or small screens.

      Set things up as if that’s the actual resolution being used (1280×720), regardless of what you setup in the game or desktop, this is the reason why I added those fields, heh.

      Note that setting the game to true fullscreen resoultion instead of windowed fullscreen would use the actual resolution (1920×1080 in your case) but you wouldn’t be able to use VirtualAim.

      1. Hello,
        thank you! I had the items on the desktop zoomed at 125% indeed and this was messing up with the 2 control sticks movement. Now all is working correctly and it’s very satisfactory to use it in battle. Great program.
        I have another question: there is a way to have full mouse control via controller in some situation (maybe pressing a modifier on the pad)? It would be very useful for the parts of the game in which is inevitable to use the mouse like the menu or to enter places or pick up items more easily?
        Thanks again, cheers.

        1. Glad you are enjoying the app! :)

          About the secondary mouse control method, that should be possible.

          But it needs a new set of configuration fields and UI changes, so unfortunately, not planned for the short term, but I will have it in mind for the next time I work on the app for something other than bug fixing.

          The easiest solution right now would be to use a PS4 gamepad with inputmapper, since that allows you to emulate the xbox gamepad and still have a mouse with the trackpad, or even some extra functionality with sixaxis functions

          I personally use the ps4 gamepad right now.

  7. Nice app.

    Playing Diablo 3 w/ PS4 pad and DS4 emulator :
    I use two monitors, and the virtual aim reticle appears in the wrong monitor. I’ve tried swapping the app window into the same window as the game but I get the same result. I also attempted to use the right stick to turn in place while using a ranged attack (disintegrate). I can get this to work on the left stick, but even when I copy over all the settings to the right stick the mouse click isn’t getting detected. I tried to move the game window to the monitor with the virtual aim, but then I couldn’t get the controller commands to get picked up at all.

    1. Thanks

      Yeah, unfortunately there’s no support for multiple monitors yet, so it will always grab the monitor set as main monitor in windows.

      Right and Left stick should behave the same… mostly, the left trigger will always have priority over the right one (on non virtual aim mode), and in virtual aim mode the right one is always virtual aim, It is very likely that I’ll do this configurable for an upcoming release, but I haven’t been able to work on this app for now (a LOT of work)

      You can also try to open the json file and copy the settings from the left stick into the right stick (if you haven’t tried this yet), then reloading the profile and it should work.

  8. Hello Weberto, first of all nice app, it works almost perfect.

    Even so I have a little problem with the cursor movement, it is not centered around my character but its just a little, It is positioned slightly down and not let me go up, but I can still go to the left, right and bottom
    (I even can go slightly up when I’m going left or right, that’s small is the margin of error).

    ¿Maybe a resolution problem? my controller resolution its 1366×768, I configured the app to work with it too, and I am playing the game at 1366×768 on windowed fullscreen too, so i dont see whats the problem (Maybe I messed up with values when I configured it), I can play perfectly at 1280×720, but I dont want to change the resolution of screen every time I play POE.

    I’am playing with a Xbox 360 controller by the way.

    1. it depends on the game actually, the character might not truly be centered.

      What you can do is play with the offset values on the Analog Settings, in your case, you probably need to set the Y value to something like -10, for example in the diablo3 setup, it’s set to -45, since the character is slightly above the true center of the screen.

      You’ll need to adjust this value if you change the resolution as well, It was the main reason to have multiple resolutions configuration for the analogs.
      Again, in the diablo3 setup, in lower resolutions the value is -40 instead, or on my Path of Exile configuration it goes from -55 on the highest resolution to -40 on the lowest.

  9. First off, great work on the program!

    I was wondering how to pull up saved profiles. i’m finding that every time i open the program, I have to map out a new profile. is there a way to actually load the profiles that i saved?

    1. There should be a profiles folder in the same folder the exe’s in. You should save your profiles in that folder, when the app runs it loads all profiles in the folder.

      Glad you like the program!

  10. First: great app. Love using this. For future updates, it might be a good idea to allow the resolution to determine the likely center point for the character and automatically generate offsets. It would help reduce the amount of alt-tabbing to sort of offsets, etc. Alternatively, you could great hard resolution profiles for various popular resolutions. In any case, the work you’ve done is great, just putting things out there in the case you’re interested in the feedback. Not an unappreciative user here, just like seeing apps I enjoy improve.

  11. Hi! I’ve really been loving your app. I have bad wrist pain when playing Diablo 3 with a mouse and so far this has been a life saver. However I am having two issues; both regarding the right analog stick. I haven’t been able to get my right analog to use any other keys while its aiming. No matter what I change the mouse, keyboard, or modifier keys to it won’t use any of them. I have tried changing the dead zone to every interval with no luck. My second issue is I get a directX error when I try to use Virtual Aim Mode. It says it could not load file or assembly “microsfot.DirectX.Direct3D.” I do have directX 12 on this PC. I appreciate all your hard work, its an amazing app.

    1. Edit: I figured out the problem with the right analog not being able to use mouse clicks or keyboard buttons. In the config file for that profile the right analog buttons are set to “null” by default. So I was able to get that working via editing the text file. It’s odd that selecting a key for the right analog stick to use doesn’t change the null config option.

      1. Hi!, sorry for the long delay

        I’ll check on that issue on the right analog

        On directx, it’s not using dx12, it’s actually using dx9, so you need to get those dlls for it to work, I’ll try to see if I can update that code to use newer dx to prevent this issue

        In the meantime, what I did was to just copy the dx dlls from another machine to the app’s folder.

        Glad you are enjoying the app!

        1. Hey, can you explain where I need to paste the missing DirectX dll files?

          I’ve found the missing DLL files in directx\Apr2006_MDX1_x86.cab in some game folder.

          I’ve extracted and pasted them to the arpg gamepad folder and after starting virtual aim mode I’ve still got that error about missing “microsoft.DirectX.Direct3D” file.

          1. that should be enough, pasting them in the same folder as the exe file, make sure you have Microsoft.DirectX.dll, Microsoft.DirectX.Direct3D.dll and Microsoft.DirectX.Direct3DX.dll files, I have the dll and xml files of each.

  12. Hello, Weberto.

    I don’t understand how to move/walk correctly with L-Analog Stick.

    I use DS4 and i play Diablo 3 on windows 10.

    I know i have to push X to walk but for direction with the L Stick it’s very complicated, i can use the track pad or R Analog Stick. But, i would like to use L Stick like on ps4, it’s possible?

    Thanks!

    1. In diablo3, there’s a key that makes the char walk to the cursor, on the tool you need to setup that same key to be pressed while the analog is active, it’s the dropdown menus below the radius settings.

      not sure which key is setup by default now (in diablo 3), for the below instructions I’ll assume it’s the M key, since it used to be that one when I created my first profile:

      you probably want to check the keep pressed checkbox
      and just select the M key in the keyboard dropdown menu.

      This will mean that the tool will also press the M key when the L-Analog stick is being used, so the character moves when you move the analog.

      Hope this helps

Leave a Reply to Jordan Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>