Skip to content

Commit 3f70d3b

Browse files
committed
Added new comfort option - snappy movement
This option, when enables, increases the friction and acceleration coefficients so that the movement feels move instantaneous and "snappy". This may help improve comfort for players without strong "VR legs" at a cost of changing the movement in SP mode (it doesn't work in skirmis or multiplayer modes). Previously it was enabled by default for singleplayer mode.
1 parent c2a894b commit 3f70d3b

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

code/game/bg_pmove.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ extern vr_clientinfo_t *vr;
5050

5151

5252
float PM_GetFrictionCoefficient( void ) {
53-
if (vr != NULL && vr->clientNum == pm->ps->clientNum && !vr->use_fake_6dof) {
53+
if (vr != NULL && vr->clientNum == pm->ps->clientNum && !vr->use_fake_6dof && vr->snappy_movement) {
5454
return 10.0f;
5555
} else {
5656
return 6.0f;
5757
}
5858
}
5959

6060
float PM_GetAccelerationCoefficient( void ) {
61-
if (vr != NULL && vr->clientNum == pm->ps->clientNum && !vr->use_fake_6dof) {
61+
if (vr != NULL && vr->clientNum == pm->ps->clientNum && !vr->use_fake_6dof && vr->snappy_movement) {
6262
return 1000.0f;
6363
} else {
6464
return 10.0f;

code/q3_ui/ui_comfort.c

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ COMFORT OPTIONS MENU
3030

3131

3232
#include "ui_local.h"
33+
#include "../vr/vr_clientinfo.h"
3334

3435

3536
#define ART_FRAMEL "menu/art/frame2_l"
@@ -41,17 +42,20 @@ COMFORT OPTIONS MENU
4142

4243
#define ID_COMFORTVIGNETTE 127
4344
#define ID_HEIGHTADJUST 128
44-
#define ID_ROLLHIT 129
45-
#define ID_SMOOTHFOLLOW 130
46-
#define ID_HAPTICINTENSITY 131
47-
#define ID_BHAPTICS 132
48-
#define ID_HUDDEPTH 133
49-
#define ID_HUDYOFFSET 134
50-
#define ID_HUDSCALE 135
45+
#define ID_SNAPPYMOVEMENT 120
46+
#define ID_ROLLHIT 130
47+
#define ID_SMOOTHFOLLOW 131
48+
#define ID_HAPTICINTENSITY 132
49+
#define ID_BHAPTICS 133
50+
#define ID_HUDDEPTH 134
51+
#define ID_HUDYOFFSET 135
52+
#define ID_HUDSCALE 136
5153

5254
#define NUM_HUDDEPTH 21
5355

54-
#define ID_BACK 136
56+
#define ID_BACK 137
57+
58+
extern vr_clientinfo_t* vr;
5559

5660
typedef struct {
5761
menuframework_s menu;
@@ -62,6 +66,7 @@ typedef struct {
6266

6367
menuslider_s comfortvignette;
6468
menuslider_s heightadjust;
69+
menuradiobutton_s snappymovement;
6570
menuradiobutton_s rollhit;
6671
menuradiobutton_s smoothfollow;
6772
menuslider_s hapticintensity;
@@ -79,13 +84,18 @@ static comfort_t s_comfort;
7984
static void Comfort_SetMenuItems( void ) {
8085
s_comfort.comfortvignette.curvalue = trap_Cvar_VariableValue( "vr_comfortVignette" );
8186
s_comfort.heightadjust.curvalue = trap_Cvar_VariableValue( "vr_heightAdjust" );
87+
s_comfort.snappymovement.curvalue = trap_Cvar_VariableValue( "vr_snappyMovement" ) != 0;
8288
s_comfort.rollhit.curvalue = trap_Cvar_VariableValue( "vr_rollWhenHit" ) != 0;
8389
s_comfort.smoothfollow.curvalue = trap_Cvar_VariableValue( "cg_smoothFollow" ) != 0;
8490
s_comfort.bhaptics.curvalue = trap_Cvar_VariableValue( "vr_bhaptics" ) != 0;
8591
s_comfort.hapticintensity.curvalue = trap_Cvar_VariableValue( "vr_hapticIntensity" );
8692
s_comfort.huddepth.curvalue = (int)trap_Cvar_VariableValue( "vr_hudDepth" ) % NUM_HUDDEPTH;
8793
s_comfort.hudyoffset.curvalue = trap_Cvar_VariableValue( "vr_hudYOffset" ) + 200;
8894
s_comfort.hudscale.curvalue = trap_Cvar_VariableValue( "vr_hudScale" );
95+
96+
if (vr) {
97+
vr->snappy_movement = s_comfort.snappymovement.curvalue;
98+
}
8999
}
90100

91101

@@ -103,6 +113,13 @@ static void Comfort_MenuEvent( void* ptr, int notification ) {
103113
trap_Cvar_SetValue( "vr_heightAdjust", s_comfort.heightadjust.curvalue );
104114
break;
105115

116+
case ID_SNAPPYMOVEMENT:
117+
trap_Cvar_SetValue( "vr_snappyMovement", s_comfort.snappymovement.curvalue );
118+
if (vr) {
119+
vr->snappy_movement = s_comfort.snappymovement.curvalue;
120+
}
121+
break;
122+
106123
case ID_ROLLHIT:
107124
trap_Cvar_SetValue( "vr_rollWhenHit", s_comfort.rollhit.curvalue );
108125
break;
@@ -192,6 +209,15 @@ static void Comfort_MenuInit( void ) {
192209
s_comfort.heightadjust.minvalue = 0.0f;
193210
s_comfort.heightadjust.maxvalue = 1.0f;
194211

212+
y += BIGCHAR_HEIGHT+2;
213+
s_comfort.snappymovement.generic.type = MTYPE_RADIOBUTTON;
214+
s_comfort.snappymovement.generic.name = "Snappy movement (SP):";
215+
s_comfort.snappymovement.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
216+
s_comfort.snappymovement.generic.callback = Comfort_MenuEvent;
217+
s_comfort.snappymovement.generic.id = ID_SNAPPYMOVEMENT;
218+
s_comfort.snappymovement.generic.x = VR_X_POS;
219+
s_comfort.snappymovement.generic.y = y;
220+
195221
y += BIGCHAR_HEIGHT+2;
196222
s_comfort.rollhit.generic.type = MTYPE_RADIOBUTTON;
197223
s_comfort.rollhit.generic.name = "Roll When Hit:";
@@ -282,6 +308,7 @@ static void Comfort_MenuInit( void ) {
282308

283309
Menu_AddItem( &s_comfort.menu, &s_comfort.comfortvignette );
284310
Menu_AddItem( &s_comfort.menu, &s_comfort.heightadjust );
311+
Menu_AddItem( &s_comfort.menu, &s_comfort.snappymovement );
285312
Menu_AddItem( &s_comfort.menu, &s_comfort.rollhit );
286313
Menu_AddItem( &s_comfort.menu, &s_comfort.smoothfollow );
287314
Menu_AddItem( &s_comfort.menu, &s_comfort.bhaptics );

code/vr/vr_clientinfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ typedef struct {
5050
qboolean in_menu;
5151
qboolean local_server;
5252
qboolean single_player;
53+
qboolean snappy_movement;
5354
qboolean use_fake_6dof;
5455
VR_FollowMode follow_mode;
5556
qboolean weapon_select;

code/vr/vr_cvars.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ cvar_t *vr_showItemInHand = NULL;
2020
cvar_t *vr_refreshrate = NULL;
2121
cvar_t *vr_superSampling = NULL;
2222
cvar_t *vr_weaponScope = NULL;
23+
cvar_t *vr_snappyMovement = NULL;
2324
cvar_t *vr_rollWhenHit = NULL;
2425
cvar_t *vr_hudYOffset = NULL;
2526
cvar_t *vr_hudScale = NULL;
@@ -65,6 +66,7 @@ void VR_InitCvars( void )
6566
vr_refreshrate = Cvar_Get ("vr_refreshrate", "90", CVAR_ARCHIVE);
6667
vr_superSampling = Cvar_Get ("vr_superSampling", "1.0", CVAR_ARCHIVE);
6768
vr_weaponScope = Cvar_Get ("vr_weaponScope", "1", CVAR_ARCHIVE);
69+
vr_snappyMovement = Cvar_Get ("vr_snappyMovement", "0", CVAR_ARCHIVE); // 0 - disabled (SP == MP), 1 - enabled (SP instant movement/no inertia)
6870
vr_rollWhenHit = Cvar_Get ("vr_rollWhenHit", "0", CVAR_ARCHIVE);
6971
vr_hudYOffset = Cvar_Get ("vr_hudYOffset", "0", CVAR_ARCHIVE);
7072
vr_hudScale = Cvar_Get ("vr_hudScale", "1.0", CVAR_ARCHIVE);

0 commit comments

Comments
 (0)