Designing a Good Joystick Map

The release of Elite:Dangerous 1.2.03 saw a new key-binding being added for the System Map. This leaves me with a problem: I’ve run out of space on the HOTAS. I need to drastically rethink the joystick mapping.

There are three goals I want to achieve from the mappings:

1) They must be intuitive[1].
2) The primary functions must be available at all times.
3) The functions should be logically grouped.

Goal 1 generally stems from goal 3, but goal 2 can get in the way.

Given there are now only 5 buttons without a modified action I am going to start seriously compromising goal 2 if I add any more bindings. I’m also not hugely happy with where I ended up stuffing various bindings after the 1.2 release as I was simply throwing them where there was space.


While the CH Products do have a mode feature, it’s not great and I’ve never got on with it. The inability to reset the mode programatically makes it annoying to work with. I generally just use the built in shift to double up actions. Since I can programatically simulate a second shift this is probably the best way forwards to get more logical buttons.

Years of muscle memory means that shift is staying where it is, on the pinky button of the joystick. The second shift action, which I’m calling alt, will reside on the middle button on the throttle. While I effectively lose another button for mappings, I now gain a whole load more virtual buttons with the ability to map an unmodified, a shifted, an alt, and an alt shift action. That’s almost double the logical buttons I had before[2].

The general rule of thumb is that all primary functions be available in an unmodified, or shifted state, but that alt allows for specific, deliberate actions so may override a primary function if needed.


The use of the joystick throttle wheel to enable/disable the throttle is an old hangover from before we had landing overrides, and I hadn’t thought to permanently map forwards and backwards onto the throttle. As a generally useless axis I’ve never removed the binding.

There is now a binding for scanner range which would be great on this axis. As a result disabling the throttle will be moved.

All other axis mappings are fine as is.

Targeting, Shooting and Countermeasures

The trigger gains the ability to fire primary, secondary and both primary and secondary via the use of shift and alt. Countermeasures are all handled through the side button on the joystick.

The castle hat on the joystick remains targeting focused, but gains the ability to target your wingman’s target, and the next jump point in your route.

The top button will remain for toggling hard points and engaging silent running.

Power Management

Power management remains on the plus hat switch on the joystick. It gains some additional macros.

Head Look

Head look remains on the POV hat on the joystick. Reset and toggling head look on and off become modified actions on the hat. The hat will also allow access to the dev camera and allow resetting the Oculus Rift.


Manoeuvring remains on the side hat with no modifiers. Flight Assist is still toggled off by the right hand button on the throttle.

Engines and Ship Functions

The front hat on the throttle retains mappings for boost, reverse throttle, super cruise and hyperspace. It also contains mappings for toggling rotational correction, ships lights, throttle and yaw/roll.

Mappings also exist to change fire groups and to disable/enable the throttle

Panels and Menu Navigation

The panel and menu navigation will stay in the same general place, but be tightened up.

Select, Back, Escape and Game Menu are be mapped to left most button on the throttle. Panel selection will remain on the throttles castle hat, while panel navigation will be handled purely by the POV hat.

Wingmen and Misc

The Lower hat on the throttle is used for wingmen control, with the down button reserved for landing gear, the cargo scoop and jettisoning cargo.

Future Expandability

CH Products have a number of limits on the Control Manager software which I never thought I’d hit. Ideally I’d have liked 152 CMS buttons, but have been limited to 128. This means that not all buttons can be mapped to all modes.

On the stick, buttons 1, 2 and 3, along with hat 1 and 2 all have 4 possible actions for each direction depending on modifier. Hat 3 can only have 2 possible actions for each direction. The POV had can have 4 actions up, down, left and right, but only 2 in the other directions.

On the throttle button 4 can have 4 actions, buttons 1 and 2 can only have 2. All three hat switches can have 4 actions for each direction. The POV had can have 4 actions up, down, left and right, but only 2 in the other directions.

That’s still a staggering 76 buttons on the stick and 80 on the throttle for a total of 156 buttons (I dislike using button 1 on the throttle hence only wanting 152 CMS buttons).

The map currently uses 6 axis and 82 buttons. That may change to 9 axis and 78 buttons to get round the fact that I’ve reserved all 128 CMS buttons, but want to be able to remap buttons not currently using CMS.


I’m play testing the map tonight. I’ll likely go out in the next 24 hours.

[1] These maps are primarily put together for me to use, so when I say ‘intuitive’ I mean intuitive to me. While I’m more than happy to accept feedback and suggestions it’s ultimately going to boil down to what feels right to me.
[2] Limitations with the software stop it being 3-4 times as many.