Elite Dangerous key bindings for Oculus Touch
I'm having trouble understanding the Oculus Touch controller bindings in Elite Dangerous.
Ignoring the Oculus and Hamburger (Menu/Pause) buttons and the analogue Hat, there are 8 buttons in total between the two controllers (A, B, X, Y, plus left and right versions of both trigger and grip), but there are 12 different values used in the original Elite Touch controller .binds
files.
When I capture my own bindings, I only see the eight binding values for the eight buttons:
Buttons I can capture Buttons only seen in .binds file
--------------------------------- ---------------------------------
Pos_OculusTouch_IndexTriggerLeft OculusTouch_IndexTriggerLeft
Pos_OculusTouch_IndexTriggerRight OculusTouch_IndexTriggerRight
Pos_OculusTouch_HandTriggerLeft OculusTouch_LThumb
Pos_OculusTouch_HandTriggerRight OculusTouch_RThumb
OculusTouch_A OculusTouch_B
OculusTouch_X OculusTouch_Y
I now have custom bindings which work for me, but I want to understand how I was supposed to be using the Oculus Touch controllers, and how I might use those binding values myself.
- On the controller, how do I activate functions bound to
OculusTouch_LThumb
andOculusTouch_RThumb
? - On the controller, how do I activate functions bound to
OculusTouch_IndexTriggerLeft
andOculusTouch_IndexTriggerRight
? - What is the difference between
Pos_OculusTouch_IndexTriggerLeft
andOculusTouch_IndexTriggerLeft
? - What is the difference between
Pos_OculusTouch_IndexTriggerRight
andOculusTouch_IndexTriggerRight
?
Examples
In original Oculus Touch bindings, the Pos_
versions are used for
--------------------------------- ---------------------------------
Pos_OculusTouch_IndexTriggerLeft Pos_OculusTouch_HandTriggerRight
--------------------------------- ---------------------------------
SecondaryFire PrimaryFire
CyclePreviousPage CycleNextPage
CamZoomOut CamZoomIn
MultiCrewSecondaryFire MultiCrewPrimaryFire
StoreCamZoomIn & StoreCamZoomOut !
ExplorationFSSZoomOut ExplorationFSSZoomIn
while the non Pos_
versions are used for
OculusTouch_IndexTriggerLeft OculusTouch_HandTriggerRight
--------------------------------- ---------------------------------
DecreaseSpeedButtonPartial IncreaseSpeedButtonPartial
MoveFreeCamDownAxis MoveFreeCamUpAxis
and the Thumb
keys are bound to
OculusTouch_LThumb OculusTouch_RThumb
--------------------------------- ---------------------------------
UseAlternateFlightValuesToggle ToggleFreeCam
ToggleBuggyTurretButton FixCameraRelativeToggle
MultiCrewToggleMode
FixCameraWorldToggle
Incidentally, it looks like StoreCamZoomOut
on Pos_OculusTouch_HandTriggerRight
is a mistake.
Note, checking suggestions in comments, I can confirm that Elite Dangerous doesn't use any position or orientation information (6DOF) from the Oculus Touch controllers at all. You can use vJoy with elite-vr-cockpit to create a virtual HOTAS, but it's very fiddly (launch vJoy, then elite-vr-cockpit, then Elite in Windows 7 compatibility mode, to force it to run in Steam VR, plus having to reboot after every vJoy configuration change) and it really didn't work well for me.
I also verified that Elite doesn't register a trigger or grip until those buttons are actually pressed - just touching them isn't enough. Nor does Elite have any binding for 'thumb in it's rest position'.
Solution 1:
Thumb bindings
The OculusTouch_LThumb
and OculusTouch_RThumb
bindings are triggered when you push down on the hat rather than rocking it in X and/or Y, so there was a 'button' that I'd missed on each controller.
Sadly, although it appears physically capable or it, the Thumb button doesn't work as a modifier, so you can't bind to something to pushdown and move in a hat direction either through analogue or digital bindings (i.e. OculusTouch_RThumb + OculusTouch_RStickY
or OculusTouch_LThumb + Neg_OculusTouch_LStickX
etc.). This is a real shame, as it could double the number of functions you could bind to the hat.
Trigger bindings
Having read through some Oculus developer documentation, I suspect that the Pos_OculusTouch_IndexTrigger
* and OculusTouch_IndexTrigger
*
bindings are related to the different ways Trigger (and Grip/Hand controls) can be used. They are all 'analogue' axes, but the API allows you to use them as 'analogue' positional inputs or as digital inputs, switching at 50% of travel.
This is what I suspect the two bindings are. I would guess that originally the digital version was used, but later the game switched to using the analogue binding, presumably so they could fine tune response time - trigger at 25% for faster response, or trigger at 75% to prevent accidental triggering etc.
I suspect that I can't generate OculusTouch_IndexTrigger
* triggers myself because Pos_OculusTouch_IndexTrigger
* is always triggered first - it will be registered at less than 50% pull, so ED never sees the 50% trigger.
So, why are the non Pos_
bindings still in the .binds
file?
I suspect that this is a throwback to the days before the Pos_
bindings were added and that practically the Pos_
and non Pos_
bindings are the same, you just can't capture the non Pos_
bindings in-game any longer.
I will have to investigate whether the trigger can be bound to analogue axes in game and have an analogue response to them, or whether you can set different trigger levels by pulling the triggers at different speeds.
Solution 2:
I've been using Elite VR Cockpit and it is an annoying process to get working each time I want to play.
With the amount of work you're putting into this maybe it'd be easier to work with the Elite VR Cockpit dev to make a better launcher or better way to launch? Maybe launch the Elite VR Cockpit app and have a button there to properly launch Elite Dangerous directly from the Elite VR Cockpit app? Basically create a better launching workflow. Maybe this could be done with a batch file?
Also, instead of the Windows 7 compatibility mode you can instead set the main Oculus app to run in admin mode only by default and it won't allow it to launch unless directly launched. Also, I don't think you have to launch vjoy anymore once it's setup right. Only the Elite VR Cockpit app and then Elite D. without Oculus app launching.