Xonotic
sv_dodging.qc File Reference
#include "sv_dodging.qh"
+ Include dependency graph for sv_dodging.qc:

Go to the source code of this file.

Macros

#define PHYS_DODGING   g_dodging
 
#define PHYS_DODGING_AIR   autocvar_sv_dodging_air_dodging
 
#define PHYS_DODGING_AIR_MAXSPEED   autocvar_sv_dodging_air_maxspeed
 
#define PHYS_DODGING_CLIENTSELECT   autocvar_sv_dodging_clientselect
 
#define PHYS_DODGING_DELAY   autocvar_sv_dodging_delay
 
#define PHYS_DODGING_DISTANCE_THRESHOLD   autocvar_sv_dodging_wall_distance_threshold
 
#define PHYS_DODGING_FROZEN_DOUBLETAP   autocvar_sv_dodging_frozen_doubletap
 
#define PHYS_DODGING_HEIGHT_THRESHOLD   autocvar_sv_dodging_height_threshold
 
#define PHYS_DODGING_HORIZ_FORCE_FASTEST   autocvar_sv_dodging_horiz_force_fastest
 
#define PHYS_DODGING_HORIZ_FORCE_FROZEN   autocvar_sv_dodging_horiz_force_frozen
 
#define PHYS_DODGING_HORIZ_FORCE_SLOWEST   autocvar_sv_dodging_horiz_force_slowest
 
#define PHYS_DODGING_HORIZ_SPEED_MAX   autocvar_sv_dodging_horiz_speed_max
 
#define PHYS_DODGING_HORIZ_SPEED_MIN   autocvar_sv_dodging_horiz_speed_min
 
#define PHYS_DODGING_MAXSPEED   autocvar_sv_dodging_maxspeed
 
#define PHYS_DODGING_RAMP_TIME   autocvar_sv_dodging_ramp_time
 
#define PHYS_DODGING_UP_SPEED   autocvar_sv_dodging_up_speed
 
#define PHYS_DODGING_WALL   autocvar_sv_dodging_wall_dodging
 
#define X(dir)
 
#define X(COND, BTN, RESULT)
 

Functions

float determine_force (entity player)
 
bool is_close_to_ground (entity this, float threshold, vector up)
 
bool is_close_to_wall (entity this, float threshold, vector forward, vector right)
 
 MUTATOR_HOOKFUNCTION (dodging, PlayerPhysics)
 
void PM_dodging (entity this)
 
bool PM_dodging_checkpressedkeys (entity this)
 
 REPLICATE (cvar_cl_dodging_timeout, float, "cl_dodging_timeout")
 
 REPLICATE (cvar_cl_dodging, bool, "cl_dodging")
 

Variables

float dodging_action
 
vector dodging_direction
 
float dodging_force_remaining
 
float dodging_force_total
 
float dodging_single_action
 
float last_BACKWARD_KEY_time
 
float last_dodging_time
 
float last_FORWARD_KEY_time
 
float last_LEFT_KEY_time
 
float last_RIGHT_KEY_time
 

Macro Definition Documentation

◆ PHYS_DODGING

#define PHYS_DODGING   g_dodging

Definition at line 5 of file sv_dodging.qc.

◆ PHYS_DODGING_AIR

#define PHYS_DODGING_AIR   autocvar_sv_dodging_air_dodging

Definition at line 18 of file sv_dodging.qc.

Referenced by PM_dodging(), and PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_AIR_MAXSPEED

#define PHYS_DODGING_AIR_MAXSPEED   autocvar_sv_dodging_air_maxspeed

Definition at line 20 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_CLIENTSELECT

#define PHYS_DODGING_CLIENTSELECT   autocvar_sv_dodging_clientselect

Definition at line 21 of file sv_dodging.qc.

Referenced by PM_dodging().

◆ PHYS_DODGING_DELAY

#define PHYS_DODGING_DELAY   autocvar_sv_dodging_delay

Definition at line 6 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_DISTANCE_THRESHOLD

#define PHYS_DODGING_DISTANCE_THRESHOLD   autocvar_sv_dodging_wall_distance_threshold

Definition at line 7 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_FROZEN_DOUBLETAP

#define PHYS_DODGING_FROZEN_DOUBLETAP   autocvar_sv_dodging_frozen_doubletap

Definition at line 8 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_HEIGHT_THRESHOLD

#define PHYS_DODGING_HEIGHT_THRESHOLD   autocvar_sv_dodging_height_threshold

Definition at line 9 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_HORIZ_FORCE_FASTEST

#define PHYS_DODGING_HORIZ_FORCE_FASTEST   autocvar_sv_dodging_horiz_force_fastest

Definition at line 13 of file sv_dodging.qc.

Referenced by determine_force().

◆ PHYS_DODGING_HORIZ_FORCE_FROZEN

#define PHYS_DODGING_HORIZ_FORCE_FROZEN   autocvar_sv_dodging_horiz_force_frozen

Definition at line 14 of file sv_dodging.qc.

Referenced by determine_force().

◆ PHYS_DODGING_HORIZ_FORCE_SLOWEST

#define PHYS_DODGING_HORIZ_FORCE_SLOWEST   autocvar_sv_dodging_horiz_force_slowest

Definition at line 12 of file sv_dodging.qc.

Referenced by determine_force().

◆ PHYS_DODGING_HORIZ_SPEED_MAX

#define PHYS_DODGING_HORIZ_SPEED_MAX   autocvar_sv_dodging_horiz_speed_max

Definition at line 11 of file sv_dodging.qc.

Referenced by determine_force().

◆ PHYS_DODGING_HORIZ_SPEED_MIN

#define PHYS_DODGING_HORIZ_SPEED_MIN   autocvar_sv_dodging_horiz_speed_min

Definition at line 10 of file sv_dodging.qc.

Referenced by determine_force().

◆ PHYS_DODGING_MAXSPEED

#define PHYS_DODGING_MAXSPEED   autocvar_sv_dodging_maxspeed

Definition at line 19 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ PHYS_DODGING_RAMP_TIME

#define PHYS_DODGING_RAMP_TIME   autocvar_sv_dodging_ramp_time

Definition at line 15 of file sv_dodging.qc.

Referenced by PM_dodging().

◆ PHYS_DODGING_UP_SPEED

#define PHYS_DODGING_UP_SPEED   autocvar_sv_dodging_up_speed

Definition at line 16 of file sv_dodging.qc.

Referenced by PM_dodging().

◆ PHYS_DODGING_WALL

#define PHYS_DODGING_WALL   autocvar_sv_dodging_wall_dodging

Definition at line 17 of file sv_dodging.qc.

Referenced by PM_dodging_checkpressedkeys().

◆ X [1/2]

#define X (   dir)
Value:
tracebox(this.origin, this.mins, this.maxs, this.origin + threshold * dir, true, this); \
return true;
float trace_dphitq3surfaceflags
vector maxs
Definition: csprogsdefs.qc:113
origin
Definition: ent_cs.qc:114
float Q3SURFACEFLAG_SKY
vector mins
Definition: csprogsdefs.qc:113
int dir
Definition: impulse.qc:89
float trace_fraction
Definition: csprogsdefs.qc:36

Definition at line 116 of file sv_dodging.qc.

Referenced by is_close_to_ground(), is_close_to_wall(), and PM_dodging_checkpressedkeys().

◆ X [2/2]

#define X (   COND,
  BTN,
  RESULT 
)
Value:
if (mymovement_##COND) { \
/* is this a state change? */ \
if(!(PHYS_DODGING_PRESSED_KEYS(this) & KEY_##BTN) || frozen_no_doubletap) { \
tap_direction_##RESULT; \
if ((time - this.last_##BTN##_KEY_time) < PHYS_DODGING_TIMEOUT(this) || frozen_no_doubletap) { \
dodge_detected = true; \
} else if(PHYS_INPUT_BUTTON_DODGE(this)) { \
dodge_detected = true; \
} \
this.last_##BTN##_KEY_time = time; \
} \
}
#define PHYS_INPUT_BUTTON_DODGE(s)
Definition: player.qh:159
float time
Definition: csprogsdefs.qc:16

Definition at line 116 of file sv_dodging.qc.

Function Documentation

◆ determine_force()

float determine_force ( entity  player)

Definition at line 142 of file sv_dodging.qc.

References map_bound_ranges(), PHYS_DODGING_HORIZ_FORCE_FASTEST, PHYS_DODGING_HORIZ_FORCE_FROZEN, PHYS_DODGING_HORIZ_FORCE_SLOWEST, PHYS_DODGING_HORIZ_SPEED_MAX, PHYS_DODGING_HORIZ_SPEED_MIN, PHYS_FROZEN, vec2, and vlen().

Referenced by PM_dodging_checkpressedkeys().

142  {
143  if (PHYS_FROZEN(player)) return PHYS_DODGING_HORIZ_FORCE_FROZEN;
144 
145  float horiz_vel = vlen(vec2(player.velocity));
146  return map_bound_ranges(horiz_vel,
149 }
#define PHYS_DODGING_HORIZ_FORCE_FROZEN
Definition: sv_dodging.qc:14
#define PHYS_FROZEN(s)
Definition: player.qh:114
ERASEABLE float map_bound_ranges(float value, float src_min, float src_max, float dest_min, float dest_max)
Same as map_ranges except that values outside the source range are clamped to min or max...
Definition: math.qh:375
#define PHYS_DODGING_HORIZ_FORCE_FASTEST
Definition: sv_dodging.qc:13
#define PHYS_DODGING_HORIZ_FORCE_SLOWEST
Definition: sv_dodging.qc:12
#define vec2(...)
Definition: vector.qh:90
#define PHYS_DODGING_HORIZ_SPEED_MIN
Definition: sv_dodging.qc:10
#define PHYS_DODGING_HORIZ_SPEED_MAX
Definition: sv_dodging.qc:11
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ is_close_to_ground()

bool is_close_to_ground ( entity  this,
float  threshold,
vector  up 
)

Definition at line 132 of file sv_dodging.qc.

References IS_ONGROUND, and X.

Referenced by PM_dodging_checkpressedkeys().

133 {
134  if (IS_ONGROUND(this)) return true;
135  X(-up); // necessary for dodging down a slope using doubletap (using `+dodge` works anyway)
136 
137  return false;
138 }
#define IS_ONGROUND(s)
Definition: movetypes.qh:16
#define X(dir)
Definition: sv_dodging.qc:116
+ Here is the caller graph for this function:

◆ is_close_to_wall()

bool is_close_to_wall ( entity  this,
float  threshold,
vector  forward,
vector  right 
)

Definition at line 122 of file sv_dodging.qc.

References X.

Referenced by PM_dodging_checkpressedkeys().

123 {
124  X(right);
125  X(-right);
126  X(forward);
127  X(-forward);
128 
129  return false;
130 }
#define X(dir)
Definition: sv_dodging.qc:116
+ Here is the caller graph for this function:

◆ MUTATOR_HOOKFUNCTION()

MUTATOR_HOOKFUNCTION ( dodging  ,
PlayerPhysics   
)

Definition at line 297 of file sv_dodging.qc.

References dodging_action, dodging_direction, dodging_force_remaining, dodging_force_total, dodging_single_action, entity(), GetPressedKeys(), last_dodging_time, M_ARGV, PM_dodging(), and PM_dodging_checkpressedkeys().

298 {
299  entity player = M_ARGV(0, entity);
300 
301 #ifdef CSQC
302  PM_dodging_GetPressedKeys(player);
303 #endif
304  PM_dodging(player);
305 }
entity() spawn
void PM_dodging(entity this)
Definition: sv_dodging.qc:217
#define M_ARGV(x, type)
Definition: events.qh:17
+ Here is the call graph for this function:

◆ PM_dodging()

void PM_dodging ( entity  this)

Definition at line 217 of file sv_dodging.qc.

References angles, ANIMACTION_JUMP, animdecide_setaction(), BITSET, CH_PLAYER, dodging_action, dodging_direction, dodging_force_remaining, dodging_force_total, dodging_single_action, entity(), IS_DEAD, IS_DUCKED, min(), movement, PHYS_DODGING_AIR, PHYS_DODGING_CLIENTSELECT, PHYS_DODGING_FROZEN, PHYS_DODGING_RAMP_TIME, PHYS_DODGING_UP_SPEED, PHYS_FROZEN, PHYS_INPUT_BUTTON_ATCK, PHYS_INPUT_BUTTON_ATCK2, PHYS_INPUT_BUTTON_JUMP, PM_dodging_checkpressedkeys(), pressedkeys, UNSET_ONGROUND, v_angle, vector(), velocity, VOICETYPE_PLAYERSOUND, VOL_BASE, waterlevel, and WATERLEVEL_SWIMMING.

Referenced by MUTATOR_HOOKFUNCTION().

218 {
219  // can't use return value from PM_dodging_checkpressedkeys because they're called from different hooks
220  if (!this.dodging_action) return;
221 
222  // when swimming or dead, no dodging allowed..
223  bool frozen_dodging = (PHYS_FROZEN(this) && PHYS_DODGING_FROZEN(this));
224  if (this.waterlevel >= WATERLEVEL_SWIMMING || IS_DEAD(this) || (PHYS_DODGING_CLIENTSELECT && !PHYS_DODGING_ENABLED(this) && !frozen_dodging))
225  {
226  this.dodging_action = 0;
227  this.dodging_direction.x = 0;
228  this.dodging_direction.y = 0;
229  return;
230  }
231 
232  vector forward, right, up;
233  if(PHYS_DODGING_AIR)
234  MAKE_VECTORS(this.v_angle, forward, right, up);
235  else
236  MAKE_VECTORS(this.angles, forward, right, up);
237 
238  // fraction of the force to apply each frame
239  // if we have e.g. 0.5 sec ramptime and a frametime of 0.25, then the ramp code
240  // will be called ramp_time/frametime times = 2 times. so, we need to
241  // add 0.5 * the total speed each frame until the dodge action is done..
242  float common_factor = PHYS_DODGING_FRAMETIME / PHYS_DODGING_RAMP_TIME;
243  // NOTE: depending on cl_netfps the client may (and probably will) send more input frames during each server frame
244  // but common_factor uses server frame rate so players with higher cl_netfps will ramp slightly faster
245 
246  float velocity_increase = min(common_factor * this.dodging_force_total, this.dodging_force_remaining);
247  this.dodging_force_remaining -= velocity_increase;
248  this.velocity += this.dodging_direction.x * velocity_increase * forward
249  + this.dodging_direction.y * velocity_increase * right;
250 
251  // the up part of the dodge is a single shot action
252  if (this.dodging_single_action == 1)
253  {
254  UNSET_ONGROUND(this);
255 
256  this.velocity += PHYS_DODGING_UP_SPEED * up;
257 
258 #ifdef SVQC
259  if (autocvar_sv_dodging_sound)
260  PlayerSound(this, playersound_jump, CH_PLAYER, VOL_BASE, VOICETYPE_PLAYERSOUND);
261 
263 #endif
264 
265  this.dodging_single_action = 0;
266  }
267 
268  if(this.dodging_force_remaining <= 0)
269  {
270  // reset state so next dodge can be done correctly
271  this.dodging_action = 0;
272  this.dodging_direction.x = 0;
273  this.dodging_direction.y = 0;
274  }
275 }
vector dodging_direction
Definition: sv_dodging.qc:101
const int VOICETYPE_PLAYERSOUND
Definition: globalsound.qh:64
float waterlevel
Definition: progsdefs.qc:181
const int ANIMACTION_JUMP
Definition: animdecide.qh:141
vector v_angle
Definition: progsdefs.qc:161
float dodging_action
Definition: sv_dodging.qc:89
#define PHYS_DODGING_FROZEN(s)
Definition: player.qh:108
#define PHYS_DODGING_AIR
Definition: sv_dodging.qc:18
#define PHYS_DODGING_CLIENTSELECT
Definition: sv_dodging.qc:21
#define UNSET_ONGROUND(s)
Definition: movetypes.qh:18
#define PHYS_FROZEN(s)
Definition: player.qh:114
float dodging_force_total
Definition: sv_dodging.qc:108
#define PHYS_DODGING_RAMP_TIME
Definition: sv_dodging.qc:15
float dodging_single_action
Definition: sv_dodging.qc:92
void animdecide_setaction(entity e, float action, float restart)
Definition: animdecide.qc:338
const float VOL_BASE
Definition: sound.qh:36
float dodging_force_remaining
Definition: sv_dodging.qc:110
#define IS_DEAD(s)
Definition: utils.qh:26
vector(float skel, float bonenum) _skel_get_boneabs_hidden
const int WATERLEVEL_SWIMMING
Definition: movetypes.qh:13
const int CH_PLAYER
Definition: sound.qh:20
#define PHYS_DODGING_UP_SPEED
Definition: sv_dodging.qc:16
vector angles
Definition: csprogsdefs.qc:104
vector velocity
Definition: csprogsdefs.qc:103
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ PM_dodging_checkpressedkeys()

bool PM_dodging_checkpressedkeys ( entity  this)

Definition at line 151 of file sv_dodging.qc.

References angles, determine_force(), dodging_action, dodging_direction, dodging_force_remaining, dodging_force_total, dodging_single_action, is_close_to_ground(), is_close_to_wall(), last_dodging_time, PHYS_DODGING_AIR, PHYS_DODGING_AIR_MAXSPEED, PHYS_DODGING_DELAY, PHYS_DODGING_DISTANCE_THRESHOLD, PHYS_DODGING_FROZEN, PHYS_DODGING_FROZEN_DOUBLETAP, PHYS_DODGING_HEIGHT_THRESHOLD, PHYS_DODGING_MAXSPEED, PHYS_DODGING_WALL, PHYS_FROZEN, sqrt(), time, vdist, vector(), velocity, and X.

Referenced by MUTATOR_HOOKFUNCTION(), and PM_dodging().

152 {
153  bool frozen_dodging = (PHYS_FROZEN(this) && PHYS_DODGING_FROZEN(this));
154  bool frozen_no_doubletap = (frozen_dodging && !PHYS_DODGING_FROZEN_DOUBLETAP);
155 
156  float tap_direction_x = 0;
157  float tap_direction_y = 0;
158  bool dodge_detected = false;
159  vector mymovement = PHYS_CS(this).movement;
160 
161  #define X(COND,BTN,RESULT) \
162  if (mymovement_##COND) { \
163  /* is this a state change? */ \
164  if(!(PHYS_DODGING_PRESSED_KEYS(this) & KEY_##BTN) || frozen_no_doubletap) { \
165  tap_direction_##RESULT; \
166  if ((time - this.last_##BTN##_KEY_time) < PHYS_DODGING_TIMEOUT(this) || frozen_no_doubletap) { \
167  dodge_detected = true; \
168  } else if(PHYS_INPUT_BUTTON_DODGE(this)) { \
169  dodge_detected = true; \
170  } \
171  this.last_##BTN##_KEY_time = time; \
172  } \
173  }
174  X(x < 0, BACKWARD, x--);
175  X(x > 0, FORWARD, x++);
176  X(y < 0, LEFT, y--);
177  X(y > 0, RIGHT, y++);
178  #undef X
179 
180  if (!dodge_detected) return false;
181 
182  // this check has to be after checking keys:
183  // the first key press of the double tap is allowed to be before dodging delay,
184  // only the second has to be after, otherwise +dodge gives an advantage because typical repress time is 0.1 s
185  // or higher which means players using +dodge would be able to do it more often
187  return false;
188 
189  vector forward, right, up;
190  MAKE_VECTORS(this.angles, forward, right, up);
191 
193  bool can_wall_dodge = (PHYS_DODGING_WALL && is_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD, forward, right));
194  bool can_air_dodge = (PHYS_DODGING_AIR && (PHYS_DODGING_AIR_MAXSPEED == 0 || vdist(this.velocity, <, PHYS_DODGING_AIR_MAXSPEED)));
195  if (!can_dodge && !can_wall_dodge && !can_air_dodge) return false;
196 
197  this.last_dodging_time = time;
198 
199  this.dodging_action = 1;
200  this.dodging_single_action = 1;
201 
204 
205  this.dodging_direction.x = tap_direction_x;
206  this.dodging_direction.y = tap_direction_y;
207 
208  // normalize the dodging_direction vector.. (unlike UT99) XD
209  float length = sqrt(this.dodging_direction.x ** 2 + this.dodging_direction.y ** 2);
210 
211  this.dodging_direction.x = this.dodging_direction.x / length;
212  this.dodging_direction.y = this.dodging_direction.y / length;
213 
214  return true;
215 }
vector dodging_direction
Definition: sv_dodging.qc:101
#define PHYS_DODGING_HEIGHT_THRESHOLD
Definition: sv_dodging.qc:9
float determine_force(entity player)
Definition: sv_dodging.qc:142
#define PHYS_DODGING_AIR_MAXSPEED
Definition: sv_dodging.qc:20
#define PHYS_DODGING_DISTANCE_THRESHOLD
Definition: sv_dodging.qc:7
bool is_close_to_wall(entity this, float threshold, vector forward, vector right)
Definition: sv_dodging.qc:122
#define PHYS_DODGING_FROZEN_DOUBLETAP
Definition: sv_dodging.qc:8
float dodging_action
Definition: sv_dodging.qc:89
#define PHYS_DODGING_FROZEN(s)
Definition: player.qh:108
#define PHYS_DODGING_MAXSPEED
Definition: sv_dodging.qc:19
#define PHYS_DODGING_AIR
Definition: sv_dodging.qc:18
#define X(dir)
Definition: sv_dodging.qc:116
#define PHYS_FROZEN(s)
Definition: player.qh:114
float last_dodging_time
Definition: sv_dodging.qc:105
float dodging_force_total
Definition: sv_dodging.qc:108
float dodging_single_action
Definition: sv_dodging.qc:92
float dodging_force_remaining
Definition: sv_dodging.qc:110
vector(float skel, float bonenum) _skel_get_boneabs_hidden
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
bool is_close_to_ground(entity this, float threshold, vector up)
Definition: sv_dodging.qc:132
vector angles
Definition: csprogsdefs.qc:104
#define PHYS_DODGING_WALL
Definition: sv_dodging.qc:17
float time
Definition: csprogsdefs.qc:16
#define PHYS_DODGING_DELAY
Definition: sv_dodging.qc:6
vector velocity
Definition: csprogsdefs.qc:103
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ REPLICATE() [1/2]

REPLICATE ( cvar_cl_dodging_timeout  ,
float  ,
"cl_dodging_timeout"   
)

◆ REPLICATE() [2/2]

REPLICATE ( cvar_cl_dodging  ,
bool  ,
"cl_dodging"   
)

Variable Documentation

◆ dodging_action

float dodging_action

Definition at line 89 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), PM_dodging(), and PM_dodging_checkpressedkeys().

◆ dodging_direction

vector dodging_direction

Definition at line 101 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), PM_dodging(), and PM_dodging_checkpressedkeys().

◆ dodging_force_remaining

float dodging_force_remaining

Definition at line 110 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), PM_dodging(), and PM_dodging_checkpressedkeys().

◆ dodging_force_total

float dodging_force_total

Definition at line 108 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), PM_dodging(), and PM_dodging_checkpressedkeys().

◆ dodging_single_action

float dodging_single_action

Definition at line 92 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), PM_dodging(), and PM_dodging_checkpressedkeys().

◆ last_BACKWARD_KEY_time

float last_BACKWARD_KEY_time

Definition at line 96 of file sv_dodging.qc.

◆ last_dodging_time

float last_dodging_time

Definition at line 105 of file sv_dodging.qc.

Referenced by MUTATOR_HOOKFUNCTION(), and PM_dodging_checkpressedkeys().

◆ last_FORWARD_KEY_time

float last_FORWARD_KEY_time

Definition at line 95 of file sv_dodging.qc.

◆ last_LEFT_KEY_time

float last_LEFT_KEY_time

Definition at line 97 of file sv_dodging.qc.

◆ last_RIGHT_KEY_time

float last_RIGHT_KEY_time

Definition at line 98 of file sv_dodging.qc.