From fb9c7c40f0ed3d0f38e7e2878b7daa2f0c23d438 Mon Sep 17 00:00:00 2001 From: Petr Bartos Date: Sun, 13 Mar 2022 17:11:53 +0100 Subject: [PATCH] Add support for control schemas; make u-turn configurable --- android/app/src/main/assets/autoexec.cfg | 43 ++++-- .../src/main/cpp/code/q3_ui/ui_controls3.c | 137 ++++++++++++++---- android/app/src/main/cpp/code/vr/vr_base.c | 76 +++++++--- 3 files changed, 200 insertions(+), 56 deletions(-) diff --git a/android/app/src/main/assets/autoexec.cfg b/android/app/src/main/assets/autoexec.cfg index 1d8718ea..20852869 100644 --- a/android/app/src/main/assets/autoexec.cfg +++ b/android/app/src/main/assets/autoexec.cfg @@ -14,13 +14,36 @@ set cg_weaponbob 0 set sv_pure 0 set sv_master1 "13.36.227.32:27950" -//VR Button mappings - ONLY put overrides of defaults in here, such as alt key mappings -set vr_button_map_RTHUMBFORWARD_ALT "weapon 2" -set vr_button_map_RTHUMBFORWARDRIGHT_ALT "weapon 3" -set vr_button_map_RTHUMBRIGHT_ALT "weapon 4" -set vr_button_map_RTHUMBBACKRIGHT_ALT "weapon 5" -set vr_button_map_RTHUMBBACK_ALT "weapon 6" -set vr_button_map_RTHUMBBACKLEFT_ALT "weapon 7" -set vr_button_map_RTHUMBLEFT_ALT "weapon 8" -set vr_button_map_RTHUMBFORWARDLEFT_ALT "weapon 9" - +// VR Button mappings - ONLY put overrides of defaults in here, such as alt key mappings +// set vr_button_map_A "" +// set vr_button_map_A_ALT "" +// set vr_button_map_B "" +// set vr_button_map_B_ALT "" +// set vr_button_map_X "" +// set vr_button_map_X_ALT "" +// set vr_button_map_Y "" +// set vr_button_map_Y_ALT "" +// set vr_button_map_SECONDARYTHUMBSTICK "" +// set vr_button_map_SECONDARYTHUMBSTICK_ALT "" +// set vr_button_map_PRIMARYTHUMBSTICK "" +// set vr_button_map_PRIMARYTHUMBSTICK_ALT "" +// set vr_button_map_RTHUMBFORWARD "" +// set vr_button_map_RTHUMBFORWARD_ALT "" +// set vr_button_map_RTHUMBFORWARDLEFT "" +// set vr_button_map_RTHUMBFORWARDLEFT_ALT "" +// set vr_button_map_RTHUMBFORWARDRIGHT "" +// set vr_button_map_RTHUMBFORWARDRIGHT_ALT "" +// set vr_button_map_RTHUMBBACK "" +// set vr_button_map_RTHUMBBACK_ALT "" +// set vr_button_map_RTHUMBBACKLEFT "" +// set vr_button_map_RTHUMBBACKLEFT_ALT "" +// set vr_button_map_RTHUMBBACKRIGHT "" +// set vr_button_map_RTHUMBBACKRIGHT_ALT "" +// set vr_button_map_SECONDARYTRIGGER "" +// set vr_button_map_SECONDARYTRIGGER_ALT "" +// set vr_button_map_PRIMARYTRIGGER "" +// set vr_button_map_PRIMARYTRIGGER_ALT "" +// set vr_button_map_SECONDARYGRIP "" +// set vr_button_map_SECONDARYGRIP_ALT "" +// set vr_button_map_PRIMARYGRIP "+alt" +// set vr_button_map_PRIMARYGRIP_ALT "" diff --git a/android/app/src/main/cpp/code/q3_ui/ui_controls3.c b/android/app/src/main/cpp/code/q3_ui/ui_controls3.c index 3d2f35b4..dc8d92fc 100644 --- a/android/app/src/main/cpp/code/q3_ui/ui_controls3.c +++ b/android/app/src/main/cpp/code/q3_ui/ui_controls3.c @@ -47,8 +47,10 @@ CONTROLS OPTIONS MENU #define ID_RIGHTHANDED 132 #define ID_WEAPONPITCH 133 #define ID_WEAPONSELECTORMODE 134 +#define ID_UTURN 135 +#define ID_CONTROLSCHEMA 136 -#define ID_BACK 135 +#define ID_BACK 137 #define NUM_DIRECTIONMODE 2 @@ -65,9 +67,11 @@ typedef struct { menuradiobutton_s twohanded; menulist_s directionmode; menulist_s snapturn; + menuradiobutton_s uturn; menuradiobutton_s righthanded; menuslider_s weaponpitch; menulist_s weaponselectormode; + menulist_s controlschema; menubitmap_s back; } controls3_t; @@ -81,9 +85,11 @@ static void Controls3_SetMenuItems( void ) { s_controls3.twohanded.curvalue = trap_Cvar_VariableValue( "vr_twoHandedWeapons" ) != 0; s_controls3.directionmode.curvalue = (int)trap_Cvar_VariableValue( "vr_directionMode" ) % NUM_DIRECTIONMODE; s_controls3.snapturn.curvalue = (int)trap_Cvar_VariableValue( "vr_snapturn" ) / 45; + s_controls3.uturn.curvalue = trap_Cvar_VariableValue( "vr_uturn" ) != 0; s_controls3.righthanded.curvalue = trap_Cvar_VariableValue( "vr_righthanded" ) != 0; s_controls3.weaponpitch.curvalue = trap_Cvar_VariableValue( "vr_weaponPitch" ) + 25; - s_controls3.weaponselectormode.curvalue = (int)trap_Cvar_VariableValue( "vr_weaponSelectorMode" ) % 4; + s_controls3.weaponselectormode.curvalue = (int)trap_Cvar_VariableValue( "vr_weaponSelectorMode" ) % 2; + s_controls3.controlschema.curvalue = (int)trap_Cvar_VariableValue( "vr_controlSchema" ) % 2; } @@ -122,32 +128,84 @@ static void Controls3_MenuEvent( void* ptr, int notification ) { break; case ID_WEAPONSELECTORMODE: + trap_Cvar_SetValue( "vr_weaponSelectorMode", s_controls3.weaponselectormode.curvalue ); + break; + + case ID_UTURN: { - switch (s_controls3.weaponselectormode.curvalue) + if (s_controls3.uturn.curvalue) { + if (s_controls3.controlschema.curvalue == 0) { + trap_Cvar_Set("vr_button_map_RTHUMBBACK", "uturn"); + } else { + trap_Cvar_Set("vr_button_map_RTHUMBBACK_ALT", "uturn"); + } + } else { + if (s_controls3.controlschema.curvalue == 0) { + trap_Cvar_Set("vr_button_map_RTHUMBBACK", ""); + } else { + trap_Cvar_Set("vr_button_map_RTHUMBBACK_ALT", ""); + } + } + } + trap_Cvar_SetValue( "vr_uturn", s_controls3.uturn.curvalue ); + break; + + case ID_CONTROLSCHEMA: + { + switch (s_controls3.controlschema.curvalue) { - case 0: //Controller - trap_Cvar_Set( "vr_button_map_PRIMARYGRIP", "+weapon_select"); - trap_Cvar_Set( "vr_button_map_RTHUMBFORWARD", ""); - trap_Cvar_Set( "vr_button_map_RTHUMBBACK", "uturn"); + case 0: // Default schema + trap_Cvar_Set("vr_button_map_RTHUMBLEFT", ""); // empty ~ turn left + trap_Cvar_Set("vr_button_map_RTHUMBRIGHT", ""); // empty ~ turn right + trap_Cvar_Set("vr_button_map_RTHUMBFORWARD", "weapnext"); // next weapon + if (s_controls3.uturn.curvalue) { + trap_Cvar_Set("vr_button_map_RTHUMBBACK", "uturn"); // u-turn + } else { + trap_Cvar_Set("vr_button_map_RTHUMBBACK", "weapprev"); // previous weapon + } + trap_Cvar_Set("vr_button_map_PRIMARYGRIP", "+weapon_select"); // weapon selector + trap_Cvar_Set("vr_button_map_PRIMARYTHUMBSTICK", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARD_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDRIGHT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDRIGHT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBRIGHT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKRIGHT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKRIGHT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACK_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKLEFT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKLEFT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBLEFT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDLEFT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDLEFT_ALT", ""); // unmapped break; - case 1: //HMD - trap_Cvar_Set( "vr_button_map_PRIMARYGRIP", "+weapon_select"); - trap_Cvar_Set( "vr_button_map_RTHUMBFORWARD", ""); - trap_Cvar_Set( "vr_button_map_RTHUMBBACK", "uturn"); - break; - case 2: //Alt-Key bindings - trap_Cvar_Set( "vr_button_map_PRIMARYGRIP", "+alt"); - trap_Cvar_Set( "vr_button_map_RTHUMBFORWARD", ""); - trap_Cvar_Set( "vr_button_map_RTHUMBBACK", "uturn"); - break; - case 3: //Thumbstick - trap_Cvar_Set( "vr_button_map_PRIMARYGRIP", ""); - trap_Cvar_Set( "vr_button_map_RTHUMBFORWARD", "weapnext"); - trap_Cvar_Set( "vr_button_map_RTHUMBBACK", "weapprev"); + default: // Now we have only two schemas + // All directions as weapon select (useful for HMD wheel) + trap_Cvar_Set("vr_button_map_RTHUMBFORWARD", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDRIGHT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBRIGHT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBBACKRIGHT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBBACK", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBBACKLEFT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBLEFT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDLEFT", "+weapon_select"); + trap_Cvar_Set("vr_button_map_PRIMARYTHUMBSTICK", "+weapon_select"); + trap_Cvar_Set("vr_button_map_PRIMARYGRIP", "+alt"); // switch to alt layout + trap_Cvar_Set("vr_button_map_RTHUMBLEFT_ALT", ""); // empty ~ turn left + trap_Cvar_Set("vr_button_map_RTHUMBRIGHT_ALT", ""); // empty ~ turn right + trap_Cvar_Set("vr_button_map_RTHUMBFORWARD_ALT", "weapnext"); + if (s_controls3.uturn.curvalue) { + trap_Cvar_Set("vr_button_map_RTHUMBBACK_ALT", "uturn"); + } else { + trap_Cvar_Set("vr_button_map_RTHUMBBACK_ALT", "weapprev"); + } + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDRIGHT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKRIGHT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBBACKLEFT_ALT", ""); // unmapped + trap_Cvar_Set("vr_button_map_RTHUMBFORWARDLEFT_ALT", ""); // unmapped break; } } - trap_Cvar_SetValue( "vr_weaponSelectorMode", s_controls3.weaponselectormode.curvalue ); + trap_Cvar_SetValue( "vr_controlSchema", s_controls3.controlschema.curvalue ); break; case ID_BACK: @@ -178,8 +236,13 @@ static void Controls3_MenuInit( void ) { { "Controller Weapon Selector", "HMD Weapon Wheel", - "Alt-Key Bindings", - "Thumbstick Forward/Back", + NULL + }; + + static const char *s_controlschema[] = + { + "Primary", + "Secondary", NULL }; @@ -213,7 +276,7 @@ static void Controls3_MenuInit( void ) { s_controls3.framer.width = 256; s_controls3.framer.height = 334; - y = 162; + y = 126; s_controls3.autoswitch.generic.type = MTYPE_RADIOBUTTON; s_controls3.autoswitch.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; s_controls3.autoswitch.generic.name = "Autoswitch Weapons:"; @@ -262,6 +325,15 @@ static void Controls3_MenuInit( void ) { s_controls3.snapturn.itemnames = s_snapturn; s_controls3.snapturn.numitems = 3; + y += BIGCHAR_HEIGHT+2; + s_controls3.uturn.generic.type = MTYPE_RADIOBUTTON; + s_controls3.uturn.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; + s_controls3.uturn.generic.x = VR_X_POS; + s_controls3.uturn.generic.y = y; + s_controls3.uturn.generic.name = "Quick U-Turn:"; + s_controls3.uturn.generic.callback = Controls3_MenuEvent; + s_controls3.uturn.generic.id = ID_UTURN; + y += BIGCHAR_HEIGHT+2; s_controls3.righthanded.generic.type = MTYPE_RADIOBUTTON; s_controls3.righthanded.generic.name = "Right-Handed:"; @@ -291,7 +363,18 @@ static void Controls3_MenuInit( void ) { s_controls3.weaponselectormode.generic.callback = Controls3_MenuEvent; s_controls3.weaponselectormode.generic.id = ID_WEAPONSELECTORMODE; s_controls3.weaponselectormode.itemnames = s_weaponselectormode; - s_controls3.weaponselectormode.numitems = 4; + s_controls3.weaponselectormode.numitems = 2; + + y += BIGCHAR_HEIGHT+2; + s_controls3.controlschema.generic.type = MTYPE_SPINCONTROL; + s_controls3.controlschema.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; + s_controls3.controlschema.generic.x = VR_X_POS; + s_controls3.controlschema.generic.y = y; + s_controls3.controlschema.generic.name = "Control Schema:"; + s_controls3.controlschema.generic.callback = Controls3_MenuEvent; + s_controls3.controlschema.generic.id = ID_CONTROLSCHEMA; + s_controls3.controlschema.itemnames = s_controlschema; + s_controls3.controlschema.numitems = 2; s_controls3.back.generic.type = MTYPE_BITMAP; s_controls3.back.generic.name = ART_BACK0; @@ -313,9 +396,11 @@ static void Controls3_MenuInit( void ) { Menu_AddItem( &s_controls3.menu, &s_controls3.twohanded ); Menu_AddItem( &s_controls3.menu, &s_controls3.directionmode ); Menu_AddItem( &s_controls3.menu, &s_controls3.snapturn ); + Menu_AddItem( &s_controls3.menu, &s_controls3.uturn ); Menu_AddItem( &s_controls3.menu, &s_controls3.righthanded ); Menu_AddItem( &s_controls3.menu, &s_controls3.weaponpitch ); Menu_AddItem( &s_controls3.menu, &s_controls3.weaponselectormode ); + Menu_AddItem( &s_controls3.menu, &s_controls3.controlschema ); Menu_AddItem( &s_controls3.menu, &s_controls3.back ); diff --git a/android/app/src/main/cpp/code/vr/vr_base.c b/android/app/src/main/cpp/code/vr/vr_base.c index b20ec8a7..378a474e 100644 --- a/android/app/src/main/cpp/code/vr/vr_base.c +++ b/android/app/src/main/cpp/code/vr/vr_base.c @@ -93,7 +93,61 @@ void VR_InitCvars( void ) Cvar_Get ("vr_weapon_adjustment_11", "0.8,-5.5,6,0,0,0,0", CVAR_ARCHIVE); Cvar_Get ("vr_weapon_adjustment_12", "0.8,-5.5,6,0,0,0,0", CVAR_ARCHIVE); - //Button remapping + // Control schemas + Cvar_Get ("vr_uturn", "0", CVAR_ARCHIVE); + Cvar_Get ("vr_controlSchema", "0", CVAR_ARCHIVE); + qboolean uturnEnabled = Cvar_VariableValue( "vr_uturn" ) != 0; + int controlSchema = (int)Cvar_VariableValue( "vr_controlSchema" ) % 2; + if (controlSchema == 0) { + Cvar_Get ("vr_button_map_RTHUMBLEFT", "", CVAR_ARCHIVE); // empty ~ turn left + Cvar_Get ("vr_button_map_RTHUMBRIGHT", "", CVAR_ARCHIVE); // empty ~ turn right + Cvar_Get ("vr_button_map_RTHUMBFORWARD", "weapnext", CVAR_ARCHIVE); // next weapon + if (uturnEnabled) { + Cvar_Get ("vr_button_map_RTHUMBBACK", "uturn", CVAR_ARCHIVE); // u-turn + } else { + Cvar_Get ("vr_button_map_RTHUMBBACK", "weapprev", CVAR_ARCHIVE); // previous weapon + } + Cvar_Get ("vr_button_map_PRIMARYGRIP", "+weapon_select", CVAR_ARCHIVE); // weapon selector + Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARD_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACK_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKLEFT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKLEFT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBLEFT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT_ALT", "", CVAR_ARCHIVE); // unmapped + } else { + // All directions as weapon select (useful for HMD wheel) + Cvar_Get ("vr_button_map_RTHUMBFORWARD", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBRIGHT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBBACK", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBBACKLEFT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBLEFT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK", "+weapon_select", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_PRIMARYGRIP", "+alt", CVAR_ARCHIVE); // switch to alt layout + Cvar_Get ("vr_button_map_RTHUMBLEFT_ALT", "", CVAR_ARCHIVE); // empty ~ turn left + Cvar_Get ("vr_button_map_RTHUMBRIGHT_ALT", "", CVAR_ARCHIVE); // empty ~ turn right + Cvar_Get ("vr_button_map_RTHUMBFORWARD_ALT", "weapnext", CVAR_ARCHIVE); + if (uturnEnabled) { + Cvar_Get ("vr_button_map_RTHUMBBACK_ALT", "uturn", CVAR_ARCHIVE); + } else { + Cvar_Get ("vr_button_map_RTHUMBBACK_ALT", "weapprev", CVAR_ARCHIVE); + } + Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBBACKLEFT_ALT", "", CVAR_ARCHIVE); // unmapped + Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT_ALT", "", CVAR_ARCHIVE); // unmapped + } + + //Remaining button mapping (buttons not affected by schemas) Cvar_Get ("vr_button_map_A", "+moveup", CVAR_ARCHIVE); // Jump Cvar_Get ("vr_button_map_A_ALT", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_B", "+movedown", CVAR_ARCHIVE); // Crouch @@ -104,32 +158,14 @@ void VR_InitCvars( void ) Cvar_Get ("vr_button_map_Y_ALT", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_SECONDARYTHUMBSTICK", "+scores", CVAR_ARCHIVE); // Scoreboard Cvar_Get ("vr_button_map_SECONDARYTHUMBSTICK_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_PRIMARYTHUMBSTICK_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARD", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARD_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARDRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBRIGHT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBBACKRIGHT_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBBACK", "uturn", CVAR_ARCHIVE); // U-Turn - Cvar_Get ("vr_button_map_RTHUMBBACK_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBBACKLEFT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBBACKLEFT_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBLEFT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBLEFT_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_RTHUMBFORWARDLEFT_ALT", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_SECONDARYTRIGGER", "+moveup", CVAR_ARCHIVE); // Also Jump Cvar_Get ("vr_button_map_SECONDARYTRIGGER_ALT", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_PRIMARYTRIGGER", "+attack", CVAR_ARCHIVE); // Fire Cvar_Get ("vr_button_map_PRIMARYTRIGGER_ALT", "", CVAR_ARCHIVE); // unmapped Cvar_Get ("vr_button_map_SECONDARYGRIP", "+weapon_stabilise", CVAR_ARCHIVE); // Weapon stabilisation Cvar_Get ("vr_button_map_SECONDARYGRIP_ALT", "", CVAR_ARCHIVE); // unmapped - Cvar_Get ("vr_button_map_PRIMARYGRIP", "+weapon_select", CVAR_ARCHIVE); - Cvar_Get ("vr_button_map_PRIMARYGRIP_ALT", "", CVAR_ARCHIVE); + Cvar_Get ("vr_button_map_PRIMARYGRIP_ALT", "", CVAR_ARCHIVE); // unmapped } void VR_Destroy( engine_t* engine )