Keyboard and HOTAS Reference Sheet Generator

Status
Thread Closed: Not open for further replies.
My (work-in-progress) bindings for the Thrustmaster FCS: http://www.mcdee.net/elite/binds/ovpweh

jgm, please note lines 499 to 507 of the binds file:

Code:
	<WeaponColourToggle>
		<Primary Device="T16000M" Key="Joy_7" />
		<Secondary Device="{NoDevice}" Key="" />
	</WeaponColourToggle>
	<EngineColourToggle>
		<Primary Device="T16000M" Key="Joy_8" />
		<Secondary Device="{NoDevice}" Key="" />
	</EngineColourToggle>

EngineColourToggle is a new one on me, presumably an upcoming vanity feature.
 
Hi,

Tried this out and everything was ok until I went in to edit some controls and generate a new one and I got a massive wall of error messages

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
/home/www/www.mcdee.net/elite/scripts/bindings.py in ()
2322 break
2323 if hasNewBindings is True:
=> 2324 createHOTASImage(items, modifiers, supportedDevice['Template'], supportedDevice['HandledDevices'], 40, runId, public, styling, deviceIndex)
2325 createdImages.append('%s::%s' % (supportedDeviceKey, deviceIndex))
2326 for handledDevice in supportedDevice['HandledDevices']:
createHOTASImage = <function createHOTASImage>, items = {'DS4::0::Joy_1': {'BaseKey': 'Joy_1', 'Binds': {'GamePad::0::pad_X': {'Controls': OrderedDict([('BuggySecondaryFireButton', {'Over..., 'Group': 'SRV', 'Name': 'Secondary weapons'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_1'}, 'DS4::0::Joy_11': {'BaseKey': 'Joy_11', 'Binds': {'GamePad::0::pad_LThumb': {'Controls': OrderedDict([('HeadlightsBuggyButton', {'Overrid...gue': False, 'Group': 'SRV', 'Name': 'Lights'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_11'}, 'DS4::0::Joy_12': {'BaseKey': 'Joy_12', 'Binds': {'GamePad::0::pad_RThumb': {'Controls': OrderedDict([('ToggleBuggyTurretButton', {'Overr...e': False, 'Group': 'UI', 'Name': 'UI select'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_12'}, 'DS4::0::Joy_2': {'BaseKey': 'Joy_2', 'Binds': {'GamePad::0::pad_A': {'Controls': OrderedDict([('BuggyPrimaryFireButton', {'Overri...se, 'Group': 'SRV', 'Name': 'Primary weapons'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_2'}, 'DS4::0::Joy_3': {'BaseKey': 'Joy_3', 'Binds': {'GamePad::0::pad_B': {'Controls': OrderedDict([('VerticalThrustersButton', {'Overr... 'Group': 'SRV', 'Name': 'Vertical thrusters'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_3'}, 'DS4::0::Joy_4': {'BaseKey': 'Joy_4', 'Binds': {'GamePad::0::pad_Y': {'Controls': OrderedDict([('ToggleDriveAssist', {'OverriddenB...False, 'Group': 'SRV', 'Name': 'Drive assist'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_4'}, 'DS4::0::Joy_5': {'BaseKey': 'Joy_5', 'Binds': {'GamePad::0::pad_LBumper': {'Controls': OrderedDict([('CamTranslateDown', {'OverriddenBy...False, 'Group': 'SRV', 'Name': 'Target ahead'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_5'}, 'DS4::0::Joy_6': {'BaseKey': 'Joy_6', 'Binds': {'GamePad::0::pad_RBumper': {'Controls': OrderedDict([('CamTranslateUp', {'OverriddenBy':...: False, 'Group': 'SRV', 'Name': 'Hand brake'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_6'}, 'DS4::0::Joy_RXAxis': {'BaseKey': 'Pos_Joy_RXAxis', 'Binds': {'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger': {'Controls': OrderedDict([('CamZoomOut', {'OverriddenBy': [],...: False, 'Group': 'SRV', 'Name': 'Zero speed'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_RXAxis'}, 'DS4::0::Joy_RYAxis': {'BaseKey': 'Pos_Joy_RYAxis', 'Binds': {'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger': {'Controls': OrderedDict([('CamZoomIn', {'OverriddenBy': [], ...alse, 'Group': 'SRV', 'Name': 'Maximum speed'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_RYAxis'}, ...}, modifiers = {'DS4::0::Joy_5': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_5', 'ModifierKey': 'DS4::0::Joy_5', 'Number': 17}], 'DS4::0::Joy_6': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_6', 'ModifierKey': 'DS4::0::Joy_6', 'Number': 16}], 'DS4::0::Joy_7': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_7', 'ModifierKey': 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger', 'Number': 4}], 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger': [{'ModifierKey': 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger', 'Number': 4}], 'DS4::0::Joy_8': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_8', 'ModifierKey': 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger', 'Number': 3}], 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger': [{'ModifierKey': 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger', 'Number': 3}], 'DS4::0::Joy_9': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_9', 'ModifierKey': 'DS4::0::Joy_9', 'Number': 15}], 'DS4::0::Joy_POV1Down': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Down', 'ModifierKey': 'DS4::0::Joy_POV1Down', 'Number': 12}], 'DS4::0::Joy_POV1Left': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Left', 'ModifierKey': 'DS4::0::Joy_POV1Left', 'Number': 13}], 'DS4::0::Joy_POV1Right': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Right', 'ModifierKey': 'DS4::0::Joy_POV1Right', 'Number': 14}], ...}, supportedDevice = {'HandledDevices': ['DS4'], 'Template': 'ds4'}, runId = 'gmyiaw', public = True, styling = 'Modifier', deviceIndex = 0
/home/www/www.mcdee.net/elite/scripts/bindings.py in createHOTASImage(items={'DS4::0::Joy_1': {'BaseKey': 'Joy_1', 'Binds': {'GamePad::0::pad_X': {'Controls': OrderedDict([('BuggySecondaryFireButton', {'Over..., 'Group': 'SRV', 'Name': 'Secondary weapons'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_1'}, 'DS4::0::Joy_11': {'BaseKey': 'Joy_11', 'Binds': {'GamePad::0::pad_LThumb': {'Controls': OrderedDict([('HeadlightsBuggyButton', {'Overrid...gue': False, 'Group': 'SRV', 'Name': 'Lights'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_11'}, 'DS4::0::Joy_12': {'BaseKey': 'Joy_12', 'Binds': {'GamePad::0::pad_RThumb': {'Controls': OrderedDict([('ToggleBuggyTurretButton', {'Overr...e': False, 'Group': 'UI', 'Name': 'UI select'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_12'}, 'DS4::0::Joy_2': {'BaseKey': 'Joy_2', 'Binds': {'GamePad::0::pad_A': {'Controls': OrderedDict([('BuggyPrimaryFireButton', {'Overri...se, 'Group': 'SRV', 'Name': 'Primary weapons'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_2'}, 'DS4::0::Joy_3': {'BaseKey': 'Joy_3', 'Binds': {'GamePad::0::pad_B': {'Controls': OrderedDict([('VerticalThrustersButton', {'Overr... 'Group': 'SRV', 'Name': 'Vertical thrusters'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_3'}, 'DS4::0::Joy_4': {'BaseKey': 'Joy_4', 'Binds': {'GamePad::0::pad_Y': {'Controls': OrderedDict([('ToggleDriveAssist', {'OverriddenB...False, 'Group': 'SRV', 'Name': 'Drive assist'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_4'}, 'DS4::0::Joy_5': {'BaseKey': 'Joy_5', 'Binds': {'GamePad::0::pad_LBumper': {'Controls': OrderedDict([('CamTranslateDown', {'OverriddenBy...False, 'Group': 'SRV', 'Name': 'Target ahead'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_5'}, 'DS4::0::Joy_6': {'BaseKey': 'Joy_6', 'Binds': {'GamePad::0::pad_RBumper': {'Controls': OrderedDict([('CamTranslateUp', {'OverriddenBy':...: False, 'Group': 'SRV', 'Name': 'Hand brake'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_6'}, 'DS4::0::Joy_RXAxis': {'BaseKey': 'Pos_Joy_RXAxis', 'Binds': {'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger': {'Controls': OrderedDict([('CamZoomOut', {'OverriddenBy': [],...: False, 'Group': 'SRV', 'Name': 'Zero speed'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_RXAxis'}, 'DS4::0::Joy_RYAxis': {'BaseKey': 'Pos_Joy_RYAxis', 'Binds': {'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger': {'Controls': OrderedDict([('CamZoomIn', {'OverriddenBy': [], ...alse, 'Group': 'SRV', 'Name': 'Maximum speed'})])}}, 'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_RYAxis'}, ...}, modifiers={'DS4::0::Joy_5': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_5', 'ModifierKey': 'DS4::0::Joy_5', 'Number': 17}], 'DS4::0::Joy_6': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_6', 'ModifierKey': 'DS4::0::Joy_6', 'Number': 16}], 'DS4::0::Joy_7': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_7', 'ModifierKey': 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger', 'Number': 4}], 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger': [{'ModifierKey': 'DS4::0::Joy_7/GamePad::0::pos_Pad_LTrigger', 'Number': 4}], 'DS4::0::Joy_8': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_8', 'ModifierKey': 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger', 'Number': 3}], 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger': [{'ModifierKey': 'DS4::0::Joy_8/GamePad::0::pos_Pad_RTrigger', 'Number': 3}], 'DS4::0::Joy_9': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_9', 'ModifierKey': 'DS4::0::Joy_9', 'Number': 15}], 'DS4::0::Joy_POV1Down': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Down', 'ModifierKey': 'DS4::0::Joy_POV1Down', 'Number': 12}], 'DS4::0::Joy_POV1Left': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Left', 'ModifierKey': 'DS4::0::Joy_POV1Left', 'Number': 13}], 'DS4::0::Joy_POV1Right': [{'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_POV1Right', 'ModifierKey': 'DS4::0::Joy_POV1Right', 'Number': 14}], ...}, source='ds4', imageDevices=['DS4'], biggestFontSize=40, runId='gmyiaw', public=True, styling='Modifier', deviceIndex=0)
1980 for keyModifier in modifiers.get(key, []):
1981 if styling == 'Modifier':
=> 1982 style = modifierStyles[(keyModifier.get('Number'))]
1983 else:
1984 style = groupStyles.get('Modifier')
style undefined, global modifierStyles = [{'Color': wand.color.Color('srgb(0,0,0)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,0,0)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(0,204,0)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(0,0,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,204,0)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,0,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(0,204,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,204,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(119,204,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,119,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,204,119)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(119,119,204)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(119,204,119)'), 'Font': '../fonts/Exo2.0-Regular.otf'}, {'Color': wand.color.Color('srgb(204,119,119)'), 'Font': '../fonts/Exo2.0-Regular.otf'}], keyModifier = {'Device': 'DS4', 'DeviceIndex': 0, 'Key': 'Joy_6', 'ModifierKey': 'DS4::0::Joy_6', 'Number': 16}, keyModifier.get = <built-in method get of dict object>

IndexError: list index out of range
args = ('list index out of range',)
with_traceback = <built-in method with_traceback of IndexError object>

My binds file is here https://gofile.me/2SZtx/gjYyUoBzY
 
Hi,

Tried this out and everything was ok until I went in to edit some controls and generate a new one and I got a massive wall of error messages



My binds file is here https://gofile.me/2SZtx/gjYyUoBzY

Only way I can see that happening is if you have many (>13) different modifiers. I've tweaked it so that it won't spit an error, but you'll see duplicate colours for the modifiers. Try it again and see if it works any better now.
 
Just FYI, I'm now convinced that the "Joy_VAxis" in FD's default bindings for the Thrustmaster T16000M FCS HOTAS is a typo for "Joy_UAxis" so I have opened a report:

https://forums.frontier.co.uk/showt...0M-FCS-HOTAS?p=4836664&viewfull=1#post4836664

It will still read the input as "Joy U-Axis" in the Options-Control setup page if you click on the primary or secondary control for the desired control and turn the dial. The reason there is no response with the default bindings is that there is no V-Axis. The game can't find a V-Axis so just assigns it the null value.
 
Hello,

Complete noob to ED here. I just picked it up over the weekend and loved it so much with my Vive that I bought the Thrustmaster T.16000M FCS HOTAS. I have only played with the training missions so that I get a good feel for the game before I proceed. Is there a good "starter" stick configuration that won't be ridiculously confusing as I learn the nuances of the game. If so do I enter all the values in myself or is there a config file that I can overwrite.

I tried to read many of the 32 pages on here but all the information gets overwhelming very quickly and takes away from possible ED time...

Thanks for any help you can provide!
 
I'm rubbish at sifting through these forums, always have been since the alpha :( I just returning after a year or so and ready to remap my X52 (non pro) but trawl as I might I cannot find recommended layout for the buttons. I have found a few but with no instructions on the Software mapping side.
Does anyone have a key bind map I can steal and the software set up knowledge.
Help an old fool out :)
 
This has probably already been asked, and I just missed it: But is there a way to add support for this tool for VKB devices (i.e. Gladiator/Gladiator Pro, Defender Cobra M5, Fat Black Mamba etc.), that would be awesome!
 
This has probably already been asked, and I just missed it: But is there a way to add support for this tool for VKB devices (i.e. Gladiator/Gladiator Pro, Defender Cobra M5, Fat Black Mamba etc.), that would be awesome!

You need to supply jgm with the data, ie what the various buttons are named by ED in a binds file. You may also need to supply him with good, high resolution pictures of the devices and be willing to provide feedback. He's usually pretty fast (as in a few days, not minutes :p), he added two separate devices that I requested and helped with. Look for posts by myself in this thread to see what you need to provide.
 
Last edited:
Hello :) This looks amazing, thank you so much for creating/maintaining it.

I got an "unsupported device" message and a request to post here, so here I am.
Reference given is 'foqmtb'
Devices I've got things mapped to which weren't picked up are:
Saitek Pedals - http://www.saitek.com/uk/prod/pedals.html
CE throttle quad - http://www.chproducts.com/Throttle-Quadrant-v13-d-718.html

Sorry if these have already been mentioned in the previous pages of this thread, I've not had time to read it all the way through yet!
 
Hello :) This looks amazing, thank you so much for creating/maintaining it.

I got an "unsupported device" message and a request to post here, so here I am.
Reference given is 'foqmtb'
Devices I've got things mapped to which weren't picked up are:
Saitek Pedals - http://www.saitek.com/uk/prod/pedals.html
CE throttle quad - http://www.chproducts.com/Throttle-Quadrant-v13-d-718.html

Sorry if these have already been mentioned in the previous pages of this thread, I've not had time to read it all the way through yet!

The pedals you have appear to be the Cessna pedals. I'm not sure if they are the same as the pedals you linked or not, but given the lack of images for them I'm assuming they are and have linked them in. Please try again and see if it looks okay.

I haven't seen the throttle before, and will see what can be done there.
 
This has probably already been asked, and I just missed it: But is there a way to add support for this tool for VKB devices (i.e. Gladiator/Gladiator Pro, Defender Cobra M5, Fat Black Mamba etc.), that would be awesome!

The Cobra M5 should already be supported; I haven't heard of the others.
 
The pedals you have appear to be the Cessna pedals. I'm not sure if they are the same as the pedals you linked or not, but given the lack of images for them I'm assuming they are and have linked them in. Please try again and see if it looks okay.

I haven't seen the throttle before, and will see what can be done there.

Okay the throttle looks relatively simple. What I need is a binds file that contains a fully-configured throttle, and the template below filled out with the controls you have assigned in that binds file. This will allow me to map the internal IDs and support this product. Please post the filled-out template here along with a binds file reference (that 6-character string from the website).

throttlequadrant.jpg
 
I'm rubbish at sifting through these forums, always have been since the alpha :( I just returning after a year or so and ready to remap my X52 (non pro) but trawl as I might I cannot find recommended layout for the buttons. I have found a few but with no instructions on the Software mapping side.
Does anyone have a key bind map I can steal and the software set up knowledge.
Help an old fool out :)

Just uploaded and printed my X52 binds

https://www.mcdee.net/elite/binds/fgxspl?replay=fgxspl

It has mappings for SRV too and works with current voice attack profiles.

C
 
Okay the throttle looks relatively simple. What I need is a binds file that contains a fully-configured throttle, and the template below filled out with the controls you have assigned in that binds file. This will allow me to map the internal IDs and support this product. Please post the filled-out template here along with a binds file reference (that 6-character string from the website).


Hello.
Ref is: [FONT=&quot][/FONT][FONT=&quot]avnobr[/FONT][FONT=&quot]

[/FONT]
Hopefully this covers all you'd need. Obviously these aren't my real bindings, before anyone says anything :p

2ezhfsm.jpg
 
Status
Thread Closed: Not open for further replies.
Back
Top Bottom