/poe-controller

Software for playing Path of Exile with a controller

Primary LanguageJavaApache License 2.0Apache-2.0

poe-controller

Play Path of Exile with a controller!

Features

  • Map controller joysticks to character and mouse movement
  • Map controller buttons to keyboard keys and mouse clicks
  • Health: Reduce the risk of RSI by using a more ergonomic method of playing PoE!
Character movement:
One joystick moves mouse in
circle around character
Mouse movement:
The other joystick
moves mouse freely
Controller button
is mapped to
mouse click
Controller button
is mapped to
keyboard

Requirements

  • Java 64-bit (minimum version 8): Make sure you chose the 64-bit version
  • A controller

Installation

  • Download the latest release here
  • Unpack poe-controller-{version}.zip to your folder of choice
  • Execute the file poe-controller-{version}.jar

Setup

This section describes how to map controller inputs to keyboard/mouse outputs. See here for an example of a full mapping.

Map controller joysticks to character and mouse movement

  • Click on (2): Map character movement
    • Move the joystick in a circle.
    • Two mappings should be assigned with the output MacroCharacterMovement (6)
  • Click on (3): Map mouse movement.
    • Move the joystick in a circle.
    • Two mappings should be assigned with the output MacroMouseMovement (7)
  • Click on (8): Save config.
  • Note: poe-controller will do its best to automatically recognize which events belong to which controller axis. However: If the automatic mapping fails please retry. If it still fails please try manually changing settings.

Map controller buttons to keyboard or mouse outputs

Repeat for each controller button you want to map:

  • Click on (1): Add new mapping
  • Click on (4): Map input
  • Hit a button on your controller.
  • Click on (5): Map output
  • Click your mouse or hit a key.
  • Click on (8): Save config.

Suggestions:

  • Map L1 or R1 to Shift: This gives you access to the second skill bar
  • Map L2 or R2 to Control: Useful for Control+Click on items
  • Map A (XBox One) or X (PS4) to your movement skill for the full console experience

FAQ & Troubleshooting

Help, the application froze! Or: The application is not responding as expected!

Please try restarting the application.

Mappings are not working as expected when playing PoE.

Important: Steam has two places where you can enable/disable controller remappings

  • Globally: Steam -> Settings -> Controller -> General Controller Settings -> Uncheck needed boxes. I also unchecked Guide Button Focuses Steam
  • Per-game: Try turning it off for PoE. See here for a guide
  • Make sure you don't have any other remapping software running
  • This programm should only be running once

'java' is not recognized as an internal or external command, operable program or batch file

Make sure you have installed Java (minimum version 8). I have tested the program with Java 8 and Java 11. You can use java -version in a command line to check your installed Java version.

The mouse is moving on its own!

Try increasing the mouse movement stick threshold. The threshold can be set in the input field on the bottom right.

How can I change a setting without the user interface?

Note: Having knowledge of JSON is probably required for these steps.

  1. Close the application.
  2. The application settings are stored under poe-controller-files/settings.json.
  3. Each row in the UI is an object in the configs[0].mapping array
  4. A mapping consists of a mappingKey and an action.
  5. Change mapping input: You will need to change the mappingKey.
    1. For digital buttons on the controller you will require the fields componentName, id and valueWhenPressed. analog should be set to false (no quotes). See (9) in the UI screenshot for an example.
    2. For analog joysticks you will require the fields componentName and id. valueWhenPressed should be set to null and analog should be set to true (no quotes). See (10) in the UI screenshot for an example.
  6. Change mapping output: You will need to change the action.
    1. Mouse click: mouseAction should be set to "LEFT_CLICK", "MIDDLE_CLICK" or "RIGHT_CLICK".
    2. Keyboard key: key should be set to the uppercase key, for example A or SHIFT.
    3. Character/mouse movement: These structures are more complex. I would recommend checking the default settings file. You are looking for a macro where the name is set to "MacroCharacterMovement" or "MacroMouseMovement".

What happens to my data?

All of your data stays local.

How do I retrieve a detailed log?

  1. Start the file start-poe-controller-with-log.cmd.
  2. (Optional: The application can be started with different levels of verbosity. You can change the verbosity by opening the .cmd file and changing the number in -Dverbosity=3.)
  3. Reproduce the bug.
  4. The log can be found in your installation folder under poe-controller-files/poe-controller.log.

The log file is very large!

The log file poe-controller-files/poe-controller.log can be deleted safely.

I would like to report a bug!

Sure! Feel free to contact me, but please

How can I contact you?

You can reach me on discord under Zhadok#3311. If you would like to report a bug, please prepare and send me the detailed log file.

Development setup

IDE setup

Run the following command once if you want to run the application via an IDE. This will unpack the neccessary native files (.dll) from the Maven dependency.

mvn nativedependencies:copy

Then, run the class org.zhadok.poe.controller.App.

Packaging and starting the application

Run the following commands to package and start the jar file (remember to insert the correct version):

mvn clean nativedependencies:copy package
cd target/
java -jar target/poe-controller-{version}.jar

Command line parameters

You can set a parameter when starting the jar file:

-D"{parameter}"="{value}"

For example, you can increase the verbosity by starting the jar file with -Dverbosity=2.

Available parameters:

  • verbosity (Default 0): Increase or decrease the logging output. A higher verbosity means more output.
  • java.library.path: Required for locating the native files

Gameplay and sample mapping

This is the mapping I play PoE with.

Sample gameplay

Gameplay 1 Gameplay 2

License

Apache License Version 2.0

Open source software and attributions