Troubleshooting

Diagnosing Plugin Issues

If something goes awry you can manually call the loadbinds plugin context or restart VoiceAttack to force a refresh.

If that doesn’t help and your problems persist the first step should be to import and load the included bindED-diagnostics profile from the plugin directory. It will output the current plugin state (keyboard layout, preset and binds file used) to the VoiceAttack log. You should also include the output of that if you file an issue or ask for help on Discord.

If that seems correct, there’s the bindED-reports profile. It will generate both a list of bind names used by Elite and a report of binds that do not have a keyboard shortcut assigned, and put them on your Desktop. Note that those lists are currently not filtered in any way and will contain all binds regardless if they are used in any profiles or if they can even have a keyboard key assigned (e.g. axes).

Migrating from the Old Plugin

If you use this as a drop-in replacement for the initial version of bindED made by Gary all commands invoking the plugin will throw an error message. Gary has asked me to change the plugin’s GUID, and the plugin with the old one will no longer be found. That is irrelevant in basically all cases and can safely be ignored.

Binds will be read automatically when VoiceAttack starts and whenever they change. To get rid of the error message(s) remove the outdated plugin invocation(s) from your commands.

Make Sure You Actually Have Binds Files

Before starting VoiceAttack with the plugin installed, you need to load the game at least once! That will create the directory structure the plugin is going to read from. You also need to have changed any key in controls options.

If you start Elite for the first time with VoiceAttack already running you will have to either invoke the plugin’s loadbinds config manually or restart VoiceAttack after you have loaded into the game’s main menu and changed any key bind.

Horizons vs. Odyssey

Note: If you do not own Odyssey, everything will work just as before!

Sadly for the time being Odyssey and Horizons will basically be separate games. That also means they have separate binds files. BindED will always default to using the file generated by Odyssey (<preset>.4.0.binds) if it exists.

To keep hassle to a minimum, the recommended way to change binds is to do it from Odyssey. Whenever a change to the Odyssey file is detected, the plugin will overwrite Horizons’ binds (<preset>.3.0.binds) with it. If you for some reason want to keep entirely separate binds, you can set bindED.disableHorizonsSync# (yes, including the pound sign) to true in your VoiceAttack profile. Whenever you are playing Horizons you will have to tell the plugin to load the Horizons file (see #Specifying a Binds File to Load).

Specifying a Binds File to Load

You can set the text variable ~bindsFile to a specific file name (e.g. custom.3.0.binds) before executing the loadbinds context to have that specific binds file loaded.

Make sure to only use the file name of an existing binds file, do not specify the full path.

This should be a last resort effort for when the game introduces changes that break the plugin’s auto detection.

Adding a Keyboard Layout

If you are using any non-US layout you might have noticed that some binds don’t work. The game itself supports a certain range of “standard” keyboard layouts and falls back to UK QWERTY if you are using something else. The original plugin was made for the US keyboard layout. So if you are using a layout that is not natively supported by Elite and/or that has keys that don’t exist on the US layout, some keys will not work out of the box, e.g.:

  • “VoiceAttack presses p but the game thinks it’s v!” (layout not natively supported by Elite)
  • “VoiceAttack presses ß but nothing happens!” (key not in the US key map)

I have included a map file for Neo2 (EDMap-de-neo2.txt) which is the layout that I am using personally and A.Cyprus was kind enough to provide full support for en-GB. If you are on a different layout, you will have to create a corresponding map file yourself. But if you do I’ll be happy to include it in future releases!

To add support for a new keyboard layout, you will have to create the corresponding EDMap-<id>.txt file. Start by copying EDMap-en-us.txt in the plugin directory and renaming it appropriately. The file contains a list of sym:code pairs, one per line. The sym part is exactly like it is listed in Elite’s .binds files, the code is the corresponding keycode VoiceAttack is going to send.

You will have to go through the entire list and replace the existing codes with the right ones for your layout. In order to do so I recommend following these steps:

  1. Open a reference for the UK QWERTY layout, e.g. Wikipedia’s image.
  2. Get a tool that can display keycodes for keys you press, e.g. NirSoft’s KeyboardStateView. Or anything else that does it. Make sure it shows you decimal keycodes instead of (only) hex!
  3. Make sure your PC is actually set to the layout you want to add.
  4. Go through the file one by one.
    1. Take note of its position on the keyboard. In this example we are using the one in the top left next to 1 and my layout Neo2.
    2. Find the correct key on the UK reference, for this example “Key_Grave”.
    3. Press the corresponding key on your keyboard and observe the keycode it produces. For Neo2 that was 186.
    4. Change the code in the line to the correct keycode. For Neo2 the line reads “Key_Grave:186”.
    5. Repeat for the next line.

There are a bunch of symbols in the file that aren’t on a standard keyboard, just ignore those. If you have extra keys that are not on the UK QWERTY layout, you’ll have to go into the game’s controls options and try binding those keys. If it works take the symbols they produce and go back to step 4 with them.

For the actual letters you’ll have to assign the keycode of the key you are pressing to the “Key_X” that is displayed ingame. So if the ingame controls options say you’ve just pressed “H”, replace the “Key_H” line with the keycode you get when you press the key you bound ingame. If the game assigns the letters that are actually in that place on your layout, you won’t have to do anything for these.

Once you have tested and confirmed everything working, feel free to open a pull request or issue and I’ll include the new map!