Xonotic
tracing.qh File Reference
+ Include dependency graph for tracing.qh:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define W_SetupProjVelocity_Basic(ent, pspeed, pspread)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, pspeed, 0, 0, pspread, false)
 
#define W_SetupProjVelocity_BOTH(ent, wepname, isprimary)
 
#define W_SetupProjVelocity_PRE(ent, wepname, prefix)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), 0, 0, WEP_CVAR(wepname, prefix##spread), false)
 
#define W_SetupProjVelocity_PRI(ent, wepname)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), 0, 0, WEP_CVAR_PRI(wepname, spread), false)
 
#define W_SetupProjVelocity_SEC(ent, wepname)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), 0, 0, WEP_CVAR_SEC(wepname, spread), false)
 
#define W_SetupProjVelocity_UP_BOTH(ent, wepname, isprimary)
 
#define W_SetupProjVelocity_UP_PRE(ent, wepname, prefix)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), WEP_CVAR(wepname, prefix##speed_up), WEP_CVAR(wepname, prefix##speed_z), WEP_CVAR(wepname, prefix##spread), false)
 
#define W_SetupProjVelocity_UP_PRI(ent, wepname)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), WEP_CVAR_PRI(wepname, speed_up), WEP_CVAR_PRI(wepname, speed_z), WEP_CVAR_PRI(wepname, spread), false)
 
#define W_SetupProjVelocity_UP_SEC(ent, wepname)   W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), WEP_CVAR_SEC(wepname, speed_up), WEP_CVAR_SEC(wepname, speed_z), WEP_CVAR_SEC(wepname, spread), false)
 
#define W_SetupShot(ent, wepent, antilag, recoil, snd, chan, maxdamage, deathtype)   W_SetupShot_ProjectileSize(ent, wepent, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, deathtype)
 
#define W_SetupShot_Dir(ent, wepent, s_forward, antilag, recoil, snd, chan, maxdamage, deathtype)   W_SetupShot_Dir_ProjectileSize(ent, wepent, s_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, deathtype)
 
#define W_SetupShot_Dir_ProjectileSize(ent, wepent, s_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, deathtype)   W_SetupShot_Dir_ProjectileSize_Range(ent, wepent, s_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, max_shot_distance, deathtype)
 
#define W_SetupShot_ProjectileSize(ent, wepent, mi, ma, antilag, recoil, snd, chan, maxdamage, deathtype)   W_SetupShot_Dir_ProjectileSize(ent, wepent, v_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, deathtype)
 
#define W_SetupShot_Range(ent, wepent, antilag, recoil, snd, chan, maxdamage, range, deathtype)   W_SetupShot_Dir_ProjectileSize_Range(ent, wepent, v_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, range, deathtype)
 

Functions

void crosshair_trace (entity pl)
 
void crosshair_trace_plusvisibletriggers (entity pl)
 
void crosshair_trace_plusvisibletriggers__is_wz (entity pl, bool is_wz)
 
void fireBullet (entity this,.entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect)
 
void fireBullet_antilag (entity this,.entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect, bool do_antilag)
 
void fireBullet_trace_callback (vector start, vector hit, vector end)
 
void FireRailgunBullet (entity this,.entity weaponentity, vector start, vector end, float bdamage, bool headshot_notify, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype)
 
 STATIC_INIT (g_railgunhit)
 
 STATIC_INIT (g_ctrace_changed)
 
void traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
 
vector W_CalculateProjectileVelocity (entity actor, vector pvelocity, vector mvelocity, float forceAbsolute)
 
void W_SetupProjVelocity_Explicit (entity proj, vector dir, vector upDir, float pSpeed, float pUpSpeed, float pZSpeed, float spread, float forceAbsolute)
 
void W_SetupShot_Dir_ProjectileSize_Range (entity ent,.entity weaponentity, vector s_forward, vector mi, vector ma, float antilag, float recoil, Sound snd, float chan, float maxdamage, float range, int deathtype)
 
void WarpZone_crosshair_trace (entity pl)
 
void WarpZone_crosshair_trace_plusvisibletriggers (entity pl)
 
void WarpZone_traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
 

Variables

float autocvar_g_ballistics_density_corpse
 
float autocvar_g_ballistics_density_player
 
float autocvar_g_ballistics_mindistance
 
bool autocvar_g_ballistics_penetrate_clips = true
 
float autocvar_g_ballistics_solidpenetration_exponent = 1
 
bool autocvar_g_norecoil
 
int autocvar_g_projectiles_newton_style
 
float autocvar_g_projectiles_newton_style_2_maxfactor
 
float autocvar_g_projectiles_newton_style_2_minfactor
 
int autocvar_g_projectiles_spread_style
 
float autocvar_g_trueaim_minrange
 
float ballistics_density
 
entity fireBullet_last_hit
 
entity fireBullet_trace_callback_eff
 
IntrusiveList g_ctrace_changed
 
IntrusiveList g_railgunhit
 
float railgundistance
 
vector railgunforce
 
bool railgunhit
 
vector railgunhitloc
 
float railgunhitsolidbackup
 
vector w_shotdir
 
vector w_shotend
 
vector w_shotorg
 

Macro Definition Documentation

◆ W_SetupProjVelocity_Basic

#define W_SetupProjVelocity_Basic (   ent,
  pspeed,
  pspread 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, pspeed, 0, 0, pspread, false)

Definition at line 48 of file tracing.qh.

Referenced by W_Nexball_Attack2().

◆ W_SetupProjVelocity_BOTH

#define W_SetupProjVelocity_BOTH (   ent,
  wepname,
  isprimary 
)
Value:
if(isprimary) { W_SetupProjVelocity_PRI(ent, wepname); } \
else { W_SetupProjVelocity_SEC(ent, wepname); }
#define W_SetupProjVelocity_SEC(ent, wepname)
Definition: tracing.qh:66
#define W_SetupProjVelocity_PRI(ent, wepname)
Definition: tracing.qh:64

Definition at line 69 of file tracing.qh.

◆ W_SetupProjVelocity_PRE

#define W_SetupProjVelocity_PRE (   ent,
  wepname,
  prefix 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), 0, 0, WEP_CVAR(wepname, prefix##spread), false)

Definition at line 62 of file tracing.qh.

◆ W_SetupProjVelocity_PRI

#define W_SetupProjVelocity_PRI (   ent,
  wepname 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), 0, 0, WEP_CVAR_PRI(wepname, spread), false)

Definition at line 64 of file tracing.qh.

◆ W_SetupProjVelocity_SEC

#define W_SetupProjVelocity_SEC (   ent,
  wepname 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), 0, 0, WEP_CVAR_SEC(wepname, spread), false)

Definition at line 66 of file tracing.qh.

◆ W_SetupProjVelocity_UP_BOTH

#define W_SetupProjVelocity_UP_BOTH (   ent,
  wepname,
  isprimary 
)
Value:
if(isprimary) { W_SetupProjVelocity_UP_PRI(ent, wepname); } \
else { W_SetupProjVelocity_UP_SEC(ent, wepname); }
#define W_SetupProjVelocity_UP_SEC(ent, wepname)
Definition: tracing.qh:55
#define W_SetupProjVelocity_UP_PRI(ent, wepname)
Definition: tracing.qh:53

Definition at line 58 of file tracing.qh.

◆ W_SetupProjVelocity_UP_PRE

#define W_SetupProjVelocity_UP_PRE (   ent,
  wepname,
  prefix 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), WEP_CVAR(wepname, prefix##speed_up), WEP_CVAR(wepname, prefix##speed_z), WEP_CVAR(wepname, prefix##spread), false)

Definition at line 51 of file tracing.qh.

◆ W_SetupProjVelocity_UP_PRI

#define W_SetupProjVelocity_UP_PRI (   ent,
  wepname 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), WEP_CVAR_PRI(wepname, speed_up), WEP_CVAR_PRI(wepname, speed_z), WEP_CVAR_PRI(wepname, spread), false)

Definition at line 53 of file tracing.qh.

◆ W_SetupProjVelocity_UP_SEC

#define W_SetupProjVelocity_UP_SEC (   ent,
  wepname 
)    W_SetupProjVelocity_Explicit(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), WEP_CVAR_SEC(wepname, speed_up), WEP_CVAR_SEC(wepname, speed_z), WEP_CVAR_SEC(wepname, spread), false)

Definition at line 55 of file tracing.qh.

◆ W_SetupShot

#define W_SetupShot (   ent,
  wepent,
  antilag,
  recoil,
  snd,
  chan,
  maxdamage,
  deathtype 
)    W_SetupShot_ProjectileSize(ent, wepent, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, deathtype)

Definition at line 33 of file tracing.qh.

Referenced by CheatCommand(), W_Nexball_Attack(), and W_Nexball_Attack2().

◆ W_SetupShot_Dir

#define W_SetupShot_Dir (   ent,
  wepent,
  s_forward,
  antilag,
  recoil,
  snd,
  chan,
  maxdamage,
  deathtype 
)    W_SetupShot_Dir_ProjectileSize(ent, wepent, s_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, deathtype)

Definition at line 31 of file tracing.qh.

◆ W_SetupShot_Dir_ProjectileSize

#define W_SetupShot_Dir_ProjectileSize (   ent,
  wepent,
  s_forward,
  mi,
  ma,
  antilag,
  recoil,
  snd,
  chan,
  maxdamage,
  deathtype 
)    W_SetupShot_Dir_ProjectileSize_Range(ent, wepent, s_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, max_shot_distance, deathtype)

Definition at line 27 of file tracing.qh.

◆ W_SetupShot_ProjectileSize

#define W_SetupShot_ProjectileSize (   ent,
  wepent,
  mi,
  ma,
  antilag,
  recoil,
  snd,
  chan,
  maxdamage,
  deathtype 
)    W_SetupShot_Dir_ProjectileSize(ent, wepent, v_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, deathtype)

Definition at line 29 of file tracing.qh.

Referenced by FireGrapplingHook().

◆ W_SetupShot_Range

#define W_SetupShot_Range (   ent,
  wepent,
  antilag,
  recoil,
  snd,
  chan,
  maxdamage,
  range,
  deathtype 
)    W_SetupShot_Dir_ProjectileSize_Range(ent, wepent, v_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, range, deathtype)

Definition at line 35 of file tracing.qh.

Function Documentation

◆ crosshair_trace()

void crosshair_trace ( entity  pl)

Definition at line 508 of file tracing.qc.

References ANTILAG_LATENCY, CS(), cursor_trace_endpos, cursor_trace_start, MOVE_NORMAL, normalize(), and traceline_antilag().

Referenced by CheatCommand(), crosshair_trace_plusvisibletriggers__is_wz(), and MUTATOR_HOOKFUNCTION().

509 {
510  traceline_antilag(pl, CS(pl).cursor_trace_start, CS(pl).cursor_trace_start + normalize(CS(pl).cursor_trace_endpos - CS(pl).cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
511 }
const float MOVE_NORMAL
Definition: csprogsdefs.qc:252
ClientState CS(Client this)
Definition: state.qh:47
vector cursor_trace_start
vector cursor_trace_endpos
#define ANTILAG_LATENCY(e)
Definition: antilag.qh:19
void traceline_antilag(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:203
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ crosshair_trace_plusvisibletriggers()

void crosshair_trace_plusvisibletriggers ( entity  pl)

Definition at line 513 of file tracing.qc.

References crosshair_trace_plusvisibletriggers__is_wz().

Referenced by Drag(), and sandbox_ObjectEdit_Get().

514 {
516 }
void crosshair_trace_plusvisibletriggers__is_wz(entity pl, bool is_wz)
Definition: tracing.qc:523
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ crosshair_trace_plusvisibletriggers__is_wz()

void crosshair_trace_plusvisibletriggers__is_wz ( entity  pl,
bool  is_wz 
)

Definition at line 523 of file tracing.qc.

References crosshair_trace(), FOREACH_ENTITY_FLOAT, g_ctrace_changed, IL_CLEAR, IL_EACH, solid, SOLID_TRIGGER, and WarpZone_crosshair_trace().

Referenced by crosshair_trace_plusvisibletriggers(), and WarpZone_crosshair_trace_plusvisibletriggers().

524 {
526  {
527  if(it.model != "")
528  {
529  it.solid = SOLID_BSP;
530  IL_PUSH(g_ctrace_changed, it);
531  }
532  });
533 
534  if (is_wz)
536  else
537  crosshair_trace(pl);
538 
539  IL_EACH(g_ctrace_changed, true, { it.solid = SOLID_TRIGGER; });
540 
542 }
#define IL_EACH(this, cond, body)
IntrusiveList g_ctrace_changed
Definition: tracing.qh:109
#define IL_CLEAR(this)
Remove all elements.
void crosshair_trace(entity pl)
Definition: tracing.qc:508
void WarpZone_crosshair_trace(entity pl)
Definition: tracing.qc:544
const float SOLID_TRIGGER
Definition: csprogsdefs.qc:245
float solid
Definition: csprogsdefs.qc:99
#define FOREACH_ENTITY_FLOAT(fld, match, body)
Definition: iter.qh:174
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fireBullet()

void fireBullet ( entity  this,
.entity  weaponentity,
vector  start,
vector  dir,
float  spread,
float  max_solid_penetration,
float  damage,
float  headshot_multiplier,
float  force,
float  dtype,
entity  tracer_effect 
)

Definition at line 503 of file tracing.qc.

References fireBullet_antilag().

504 {
505  fireBullet_antilag(this, weaponentity, start, dir, spread, max_solid_penetration, damage, headshot_multiplier, force, dtype, tracer_effect, true);
506 }
int dir
Definition: impulse.qc:89
void fireBullet_antilag(entity this,.entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect, bool do_antilag)
Definition: tracing.qc:357
+ Here is the call graph for this function:

◆ fireBullet_antilag()

void fireBullet_antilag ( entity  this,
.entity  weaponentity,
vector  start,
vector  dir,
float  spread,
float  max_solid_penetration,
float  damage,
float  headshot_multiplier,
float  force,
float  dtype,
entity  tracer_effect,
bool  do_antilag 
)

Definition at line 357 of file tracing.qc.

References accuracy_add(), accuracy_isgooddamage(), antilag_getlag(), antilag_restore_all(), antilag_takeback_all(), autocvar_g_ballistics_mindistance, autocvar_g_ballistics_penetrate_clips, autocvar_g_ballistics_solidpenetration_exponent, Damage(), Damage_DamageInfo(), DPCONTENTS_BODY, DPCONTENTS_CORPSE, DPCONTENTS_OPAQUE, DPCONTENTS_SOLID, dphitcontentsmask, entity(), fireBullet_last_hit, fireBullet_trace_callback(), fireBullet_trace_callback_eff, Headshot(), IS_PLAYER, M_ARGV, max(), min(), MOVE_NORMAL, MUTATOR_CALLHOOK, normalize(), NULL, pow(), PS, Q3SURFACEFLAG_NODRAW, Q3SURFACEFLAG_NONSOLID, Q3SURFACEFLAG_SKY, randomvec(), SOLID_BSP, SOLID_SLIDEBOX, trace_dphitcontents, trace_dphitq3surfaceflags, trace_endpos, trace_ent, trace_fraction, trailparticles, vdist, vector(), vlen(), WarpZone_trace_forent, WarpZone_trace_transform, WarpZone_TraceBox_ThroughZone(), WarpZone_TransformOrigin(), WarpZone_TransformVelocity(), world, and yoda.

Referenced by fireBullet().

358 {
359  dir = normalize(dir + randomvec() * spread);
360  vector end = start + dir * max_shot_distance;
361 
363  fireBullet_trace_callback_eff = tracer_effect;
364 
365  float solid_penetration_fraction = 1;
366  float damage_fraction = 1;
367  float total_damage = 0;
368 
369  float lag = ((do_antilag) ? antilag_getlag(this) : 0);
370  if(lag)
371  antilag_takeback_all(this, lag);
372 
373  // change shooter to SOLID_BBOX so the shot can hit corpses
374  int oldsolid = this.dphitcontentsmask;
375  if(this)
377 
378  WarpZone_trace_forent = this;
379 
380  bool headshot = false; // indicates that one of the hit targets was a headshot
381  for (;;)
382  {
386  start = trace_endpos;
387  entity hit = trace_ent;
388 
389  // traced up to max_shot_distance and didn't hit anything at all
390  if (trace_fraction == 1.0)
391  break;
392 
393  // When hitting sky, stop.
395  break;
396 
397  // can't use noimpact, as we need to pass through walls
398  //if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
399  //break;
400 
401  // if we hit "weapclip", bail out
402  //
403  // rationale of this check:
404  //
405  // any shader that is solid, nodraw AND trans is meant to clip weapon
406  // shots and players, but has no other effect!
407  //
408  // if it is not trans, it is caulk and should not have this side effect
409  //
410  // matching shaders:
411  // common/weapclip (intended)
412  // common/noimpact (is supposed to eat projectiles, but is erased anyway)
413  bool is_weapclip = false;
417  is_weapclip = true;
418 
419  if(!hit || hit.solid == SOLID_BSP || hit.solid == SOLID_SLIDEBOX)
420  Damage_DamageInfo(start, damage * damage_fraction, 0, 0, max(1, force) * dir * damage_fraction, dtype, hit.species, this);
421 
422  if (hit && hit != WarpZone_trace_forent && hit != fireBullet_last_hit) // Avoid self-damage (except after going through a warp); avoid hitting the same entity twice (engine bug).
423  {
424  fireBullet_last_hit = hit;
425  yoda = 0;
426  MUTATOR_CALLHOOK(FireBullet_Hit, this, hit, start, end, damage, this.(weaponentity));
427  damage = M_ARGV(4, float);
428  if(headshot_multiplier && Headshot(hit, this, start, end))
429  {
430  damage *= headshot_multiplier;
431  headshot = true;
432  }
433  bool gooddamage = accuracy_isgooddamage(this, hit);
434  Damage(hit, this, this, damage * damage_fraction, dtype, weaponentity, start, force * dir * damage_fraction);
435  // calculate hits for ballistic weapons
436  if(gooddamage)
437  {
438  // do not exceed 100%
439  float added_damage = min(damage - total_damage, damage * damage_fraction);
440  total_damage += damage * damage_fraction;
441  accuracy_add(this, this.(weaponentity).m_weapon, 0, added_damage);
442  }
443  }
444 
445  if (is_weapclip && !autocvar_g_ballistics_penetrate_clips)
446  break;
447 
448  // go through solid!
449  // outside the world? forget it
450  if(start.x > world.maxs.x || start.y > world.maxs.y || start.z > world.maxs.z || start.x < world.mins.x || start.y < world.mins.y || start.z < world.mins.z)
451  break;
452 
453  float maxdist;
454  entity hitstore = IS_PLAYER(hit) ? PS(hit) : hit;
455  if(max_solid_penetration < 0)
456  break;
457  else if(hitstore.ballistics_density < -1)
458  break; // -2: no solid penetration, ever
459  else if(hitstore.ballistics_density < 0)
460  maxdist = vlen(hit.maxs - hit.mins) + 1; // -1: infinite travel distance
461  else if(hitstore.ballistics_density == 0)
462  maxdist = max_solid_penetration * solid_penetration_fraction;
463  else
464  maxdist = max_solid_penetration * solid_penetration_fraction / hitstore.ballistics_density;
465 
466  if(maxdist <= autocvar_g_ballistics_mindistance)
467  break;
468 
469  // move the entity along its velocity until it's out of solid, then let it resume
470  // The previously hit entity is ignored here!
471  traceline_inverted (start, start + dir * maxdist, MOVE_NORMAL, WarpZone_trace_forent, true, hit);
472  if(trace_fraction == 1) // 1: we never got out of solid
473  break;
474 
475  float dist_taken = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - start));
476  float fraction_used_of_what_is_left = dist_taken / maxdist;
477  solid_penetration_fraction -= solid_penetration_fraction * fraction_used_of_what_is_left;
478  solid_penetration_fraction = max(solid_penetration_fraction, 0);
479  damage_fraction = pow(solid_penetration_fraction, autocvar_g_ballistics_solidpenetration_exponent);
480 
481  // Only show effect when going through a player (invisible otherwise)
482  if (hit && (hit.solid != SOLID_BSP))
483  if(vdist(trace_endpos - start, >, 4))
485 
486  start = trace_endpos;
487 
488  if(hit.solid == SOLID_BSP)
489  Damage_DamageInfo(start, 0, 0, 0, max(1, force) * normalize(dir) * -damage_fraction, dtype, 0, this);
490  }
491 
492  if(headshot)
493  Send_Notification(NOTIF_ONE, this, MSG_ANNCE, ANNCE_HEADSHOT);
494 
495  if(lag)
496  antilag_restore_all(this);
497 
498  // restore shooter solid type
499  if(this)
500  this.dphitcontentsmask = oldsolid;
501 }
const float SOLID_SLIDEBOX
Definition: csprogsdefs.qc:247
entity world
Definition: csprogsdefs.qc:15
float trace_dphitq3surfaceflags
void fireBullet_trace_callback(vector start, vector hit, vector end)
Definition: tracing.qc:349
float antilag_getlag(entity e)
Definition: antilag.qc:151
float trace_dphitcontents
entity() spawn
float Q3SURFACEFLAG_NONSOLID
vector WarpZone_TransformOrigin(entity wz, vector v)
Definition: common.qc:499
const float MOVE_NORMAL
Definition: csprogsdefs.qc:252
float autocvar_g_ballistics_mindistance
Definition: tracing.qh:8
#define PS(this)
Definition: state.qh:18
entity trace_ent
Definition: csprogsdefs.qc:40
void antilag_restore_all(entity ignore)
Definition: antilag.qc:138
entity WarpZone_trace_forent
Definition: common.qh:34
float Q3SURFACEFLAG_SKY
#define NULL
Definition: post.qh:17
float DPCONTENTS_SOLID
vector trace_endpos
Definition: csprogsdefs.qc:37
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
Definition: damage.qc:583
#define M_ARGV(x, type)
Definition: events.qh:17
bool Headshot(entity targ, entity ent, vector start, vector end)
Definition: tracing.qc:220
vector WarpZone_TransformVelocity(entity wz, vector v)
Definition: common.qc:504
vector(float skel, float bonenum) _skel_get_boneabs_hidden
entity WarpZone_trace_transform
Definition: common.qh:37
float DPCONTENTS_OPAQUE
float autocvar_g_ballistics_solidpenetration_exponent
Definition: tracing.qh:10
const float SOLID_BSP
Definition: csprogsdefs.qc:248
float DPCONTENTS_BODY
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
void accuracy_add(entity this, Weapon w, float fired, float hit)
Definition: accuracy.qc:83
float Q3SURFACEFLAG_NODRAW
bool autocvar_g_ballistics_penetrate_clips
Definition: tracing.qh:9
bool accuracy_isgooddamage(entity attacker, entity targ)
Definition: accuracy.qc:112
#define MUTATOR_CALLHOOK(id,...)
Definition: base.qh:140
void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, int deathtype, float bloodtype, entity dmgowner)
float dphitcontentsmask
entity fireBullet_trace_callback_eff
Definition: tracing.qh:91
#define trailparticles
Definition: csprogsdefs.qh:12
void antilag_takeback_all(entity ignore, float lag)
Definition: antilag.qc:125
int dir
Definition: impulse.qc:89
entity fireBullet_last_hit
Definition: tracing.qh:92
float trace_fraction
Definition: csprogsdefs.qc:36
void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
Definition: common.qc:202
#define IS_PLAYER(v)
Definition: utils.qh:9
float yoda
Definition: damage.qh:51
float DPCONTENTS_CORPSE
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fireBullet_trace_callback()

void fireBullet_trace_callback ( vector  start,
vector  hit,
vector  end 
)

Definition at line 349 of file tracing.qc.

References fireBullet_last_hit, fireBullet_trace_callback_eff, NULL, trailparticles, vdist, and WarpZone_trace_forent.

Referenced by fireBullet_antilag().

350 {
351  if(vdist(hit - start, >, 16))
355 }
entity WarpZone_trace_forent
Definition: common.qh:34
#define NULL
Definition: post.qh:17
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
entity fireBullet_trace_callback_eff
Definition: tracing.qh:91
#define trailparticles
Definition: csprogsdefs.qh:12
entity fireBullet_last_hit
Definition: tracing.qh:92
+ Here is the caller graph for this function:

◆ FireRailgunBullet()

void FireRailgunBullet ( entity  this,
.entity  weaponentity,
vector  start,
vector  end,
float  bdamage,
bool  headshot_notify,
float  bforce,
float  mindist,
float  maxdist,
float  halflifedist,
float  forcehalflifedist,
int  deathtype 
)

Definition at line 231 of file tracing.qc.

References accuracy_add(), antilag_debug, ANTILAG_LATENCY, ATTEN_IDLE, bound(), CH_SHOTS, CS(), Damage_DamageInfo(), dir, entity(), FOREACH_CLIENT, g_railgunhit, Headshot(), IL_CLEAR, IL_EACH, IL_PUSH(), IS_REAL_CLIENT, IS_SPEC, min(), msg_entity, MSG_ONE, normalize(), NULL, SND, SOLID_BSP, SOLID_NOT, SOLID_SLIDEBOX, trace_dphitq3surfaceflags, trace_endpos, trace_ent, trace_fraction, vector(), vlen(), VOL_BASEVOICE, WarpZone_trace_firstzone, WarpZone_trace_transform, WarpZone_traceline_antilag(), WarpZone_TransformVelocity(), and WarpZone_UnTransformOrigin().

232 {
233  vector dir = normalize(end - start);
234  vector force = dir * bforce;
235 
236  // go a little bit into the wall because we need to hit this wall later
237  end = end + dir;
238 
239  float totaldmg = 0;
240  bool headshot = false; // indicates that one of the targets hit was a headshot
241 
242  // trace multiple times until we hit a wall, each obstacle will be made
243  // non-solid so we can hit the next, while doing this we spawn effects and
244  // note down which entities were hit so we can damage them later
245  entity o = this;
246  while (1)
247  {
248  if(CS(this).antilag_debug)
249  WarpZone_traceline_antilag (this, start, end, false, o, CS(this).antilag_debug);
250  else
251  WarpZone_traceline_antilag (this, start, end, false, o, ANTILAG_LATENCY(this));
252  if(o && WarpZone_trace_firstzone)
253  {
254  o = NULL;
255  continue;
256  }
257 
258  if(trace_ent.solid == SOLID_BSP || trace_ent.solid == SOLID_SLIDEBOX)
259  Damage_DamageInfo(trace_endpos, bdamage, 0, 0, force, deathtype, trace_ent.species, this);
260 
261  // if it is NULL we can't hurt it so stop now
262  if (trace_ent == NULL || trace_fraction == 1)
263  break;
264 
265  if(headshot_notify && !headshot && Headshot(trace_ent, this, start, end))
266  headshot = true;
267 
268  // make the entity non-solid so we can hit the next one
270  trace_ent.railgunhit = true;
271  trace_ent.railgunhitloc = end;
272  trace_ent.railgunhitsolidbackup = trace_ent.solid;
275 
276  // stop if this is a wall
277  if (trace_ent.solid == SOLID_BSP)
278  break;
279 
280  // make the entity non-solid
281  trace_ent.solid = SOLID_NOT;
282  }
283 
284  vector endpoint = trace_endpos;
285  entity endent = trace_ent;
286  float endq3surfaceflags = trace_dphitq3surfaceflags;
287 
288  // find all the entities the railgun hit and restore their solid state
289  IL_EACH(g_railgunhit, it.railgunhit,
290  {
291  it.solid = it.railgunhitsolidbackup;
292  });
293 
294  // Find all players the beam passed close by (even those hit)
295  float length = vlen(endpoint - start);
296  entity pseudoprojectile = NULL;
297  FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != this, {
298  // not when spectating the shooter
299  if (IS_SPEC(it) && it.enemy == this) continue;
300 
301  // nearest point on the beam
302  vector beampos = start + dir * bound(0, (it.origin - start) * dir, length);
303 
304  if(!pseudoprojectile)
305  pseudoprojectile = new(pseudoprojectile); // we need this so the sound uses the "entchannel4" volume
306 
307  msg_entity = it;
308  // we want this to be very loud when close but fall off quickly -> using max base volume and high attenuation
309  soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASEVOICE, ATTEN_IDLE, 0);
310  });
311  if(pseudoprojectile)
312  delete(pseudoprojectile);
313 
314  // find all the entities the railgun hit and hurt them
315  IL_EACH(g_railgunhit, it.railgunhit,
316  {
317  // removal from the list is handled below
318 
319  float foff = ExponentialFalloff(mindist, maxdist, halflifedist, it.railgundistance);
320  float ffs = ExponentialFalloff(mindist, maxdist, forcehalflifedist, it.railgundistance);
321 
322  if(accuracy_isgooddamage(this, it))
323  totaldmg += bdamage * foff;
324 
325  // apply the damage
326  if (it.takedamage)
327  Damage(it, this, this, bdamage * foff, deathtype, weaponentity, it.railgunhitloc, it.railgunforce * ffs);
328 
329  it.railgunhitloc = '0 0 0';
330  it.railgunhitsolidbackup = SOLID_NOT;
331  it.railgunhit = false;
332  it.railgundistance = 0;
333  });
334 
336 
337  if(headshot)
338  Send_Notification(NOTIF_ONE, this, MSG_ANNCE, ANNCE_HEADSHOT);
339 
340  // calculate hits and fired shots for hitscan
341  if(this.(weaponentity))
342  accuracy_add(this, this.(weaponentity).m_weapon, 0, min(bdamage, totaldmg));
343 
344  trace_endpos = endpoint;
345  trace_ent = endent;
346  trace_dphitq3surfaceflags = endq3surfaceflags;
347 }
const float SOLID_NOT
Definition: csprogsdefs.qc:244
#define IL_EACH(this, cond, body)
float antilag_debug
Definition: antilag.qc:19
const float SOLID_SLIDEBOX
Definition: csprogsdefs.qc:247
#define IL_CLEAR(this)
Remove all elements.
#define SND(id)
Definition: all.qh:35
float trace_dphitq3surfaceflags
IntrusiveList g_railgunhit
Definition: tracing.qh:84
entity() spawn
ClientState CS(Client this)
Definition: state.qh:47
#define FOREACH_CLIENT(cond, body)
Definition: utils.qh:49
#define IS_REAL_CLIENT(v)
Definition: utils.qh:17
entity trace_ent
Definition: csprogsdefs.qc:40
void WarpZone_traceline_antilag(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:221
vector WarpZone_UnTransformOrigin(entity wz, vector v)
Definition: common.qc:535
#define IS_SPEC(v)
Definition: utils.qh:10
entity msg_entity
Definition: progsdefs.qc:63
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
entity WarpZone_trace_firstzone
Definition: common.qh:38
#define NULL
Definition: post.qh:17
vector trace_endpos
Definition: csprogsdefs.qc:37
const int CH_SHOTS
Definition: sound.qh:14
bool Headshot(entity targ, entity ent, vector start, vector end)
Definition: tracing.qc:220
vector WarpZone_TransformVelocity(entity wz, vector v)
Definition: common.qc:504
vector(float skel, float bonenum) _skel_get_boneabs_hidden
entity WarpZone_trace_transform
Definition: common.qh:37
const float SOLID_BSP
Definition: csprogsdefs.qc:248
void accuracy_add(entity this, Weapon w, float fired, float hit)
Definition: accuracy.qc:83
void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, int deathtype, float bloodtype, entity dmgowner)
#define ANTILAG_LATENCY(e)
Definition: antilag.qh:19
const float VOL_BASEVOICE
Definition: sound.qh:37
int dir
Definition: impulse.qc:89
float trace_fraction
Definition: csprogsdefs.qc:36
const float ATTEN_IDLE
Definition: sound.qh:32
+ Here is the call graph for this function:

◆ STATIC_INIT() [1/2]

STATIC_INIT ( g_railgunhit  )

Definition at line 85 of file tracing.qh.

References IL_NEW.

85 { g_railgunhit = IL_NEW(); }
IntrusiveList g_railgunhit
Definition: tracing.qh:84
#define IL_NEW()

◆ STATIC_INIT() [2/2]

STATIC_INIT ( g_ctrace_changed  )

Definition at line 110 of file tracing.qh.

References IL_NEW.

110 { g_ctrace_changed = IL_NEW(); }
IntrusiveList g_ctrace_changed
Definition: tracing.qh:109
#define IL_NEW()

◆ traceline_antilag()

void traceline_antilag ( entity  source,
vector  v1,
vector  v2,
float  nomonst,
entity  forent,
float  lag 
)

Definition at line 203 of file antilag.qc.

References autocvar_g_antilag, CS_CVAR, IS_CLIENT, and traceline_antilag_force().

Referenced by crosshair_trace().

204 {
205  bool noantilag = ((IS_CLIENT(source)) ? CS_CVAR(source).cvar_cl_noantilag : false);
206  if (autocvar_g_antilag != 2 || noantilag)
207  lag = 0;
208  traceline_antilag_force(source, v1, v2, nomonst, forent, lag);
209 }
#define IS_CLIENT(v)
Definition: utils.qh:13
#define CS_CVAR(this)
Definition: state.qh:51
void traceline_antilag_force(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:199
int autocvar_g_antilag
Definition: antilag.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ W_CalculateProjectileVelocity()

vector W_CalculateProjectileVelocity ( entity  actor,
vector  pvelocity,
vector  mvelocity,
float  forceAbsolute 
)

Definition at line 169 of file tracing.qc.

References autocvar_g_projectiles_newton_style, autocvar_g_projectiles_newton_style_2_maxfactor, autocvar_g_projectiles_newton_style_2_minfactor, get_shotvelocity(), normalize(), vector(), vlen(), and W_WeaponSpeedFactor().

Referenced by ctf_Handle_Throw(), IMPULSE(), kh_Key_DropAll(), kh_Key_DropOne(), W_Nexball_Attack(), and W_SetupProjVelocity_Explicit().

170 {
171  vector mdirection;
172  float mspeed;
173  vector outvelocity;
174 
175  mvelocity = mvelocity * W_WeaponSpeedFactor(actor);
176 
177  mdirection = normalize(mvelocity);
178  mspeed = vlen(mvelocity);
179 
181 
182  return outvelocity;
183 }
float autocvar_g_projectiles_newton_style_2_maxfactor
Definition: tracing.qh:12
int autocvar_g_projectiles_newton_style
Definition: tracing.qh:11
vector(float skel, float bonenum) _skel_get_boneabs_hidden
float W_WeaponSpeedFactor(entity this)
Definition: weaponsystem.qc:45
float autocvar_g_projectiles_newton_style_2_minfactor
Definition: tracing.qh:13
vector get_shotvelocity(vector myvel, vector mydir, float spd, float newton_style, float mi, float ma)
Definition: util.qc:1081
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ W_SetupProjVelocity_Explicit()

void W_SetupProjVelocity_Explicit ( entity  proj,
vector  dir,
vector  upDir,
float  pSpeed,
float  pUpSpeed,
float  pZSpeed,
float  spread,
float  forceAbsolute 
)

Definition at line 185 of file tracing.qc.

References autocvar_g_projectiles_spread_style, autocvar_g_weaponspreadfactor, error(), ftos(), gettime(), GETTIME_HIRES, LOG_INFO, normalize(), NULL, vlen(), W_CalculateProjectileVelocity(), and W_CalculateSpread().

Referenced by FireGrapplingHook().

186 {
187  if(proj.owner == NULL)
188  error("Unowned missile");
189 
190  dir = dir + upDir * (pUpSpeed / pSpeed);
191  dir.z += pZSpeed / pSpeed;
192  pSpeed *= vlen(dir);
193  dir = normalize(dir);
194 
195  #if 0
196  if(autocvar_g_projectiles_spread_style != mspercallsstyle)
197  {
198  mspercallsum = mspercallcount = 0;
199  mspercallsstyle = autocvar_g_projectiles_spread_style;
200  }
201  mspercallsum -= gettime(GETTIME_HIRES);
202  #endif
203 
205 
206  #if 0
207  mspercallsum += gettime(GETTIME_HIRES);
208  mspercallcount += 1;
209  LOG_INFO("avg: ", ftos(mspercallcount / mspercallsum), " per sec");
210  #endif
211 
212  proj.velocity = W_CalculateProjectileVelocity(proj.owner, proj.owner.velocity, pSpeed * dir, forceAbsolute);
213 }
vector W_CalculateSpread(vector forward, float spread, float spreadfactor, float spreadstyle)
int autocvar_g_projectiles_spread_style
Definition: tracing.qh:14
#define NULL
Definition: post.qh:17
#define LOG_INFO(...)
Definition: log.qh:70
float GETTIME_HIRES
float autocvar_g_weaponspreadfactor
Definition: weaponsystem.qh:5
vector W_CalculateProjectileVelocity(entity actor, vector pvelocity, vector mvelocity, float forceAbsolute)
Definition: tracing.qc:169
int dir
Definition: impulse.qc:89
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ W_SetupShot_Dir_ProjectileSize_Range()

void W_SetupShot_Dir_ProjectileSize_Range ( entity  ent,
.entity  weaponentity,
vector  s_forward,
vector  mi,
vector  ma,
float  antilag,
float  recoil,
Sound  snd,
float  chan,
float  maxdamage,
float  range,
int  deathtype 
)

Definition at line 24 of file tracing.qc.

References accuracy_add(), accuracy_canbegooddamage(), antilag_debug, ANTILAG_LATENCY, ATTN_NORM, autocvar_g_antilag, autocvar_g_norecoil, autocvar_g_trueaim_minrange, CS(), CS_CVAR, cursor_trace_ent, DEATH_WEAPONOF, DPCONTENTS_BODY, DPCONTENTS_CORPSE, DPCONTENTS_SOLID, entity(), IS_CLIENT, IS_PLAYER, LOG_INFO, MOVE_NOMONSTERS, MOVE_NORMAL, movedir, normalize(), NULL, sound, Weapon::spawnflags, TC, trace_endpos, trace_ent, tracebox_antilag(), traceline_antilag_force(), v_forward, v_right, v_up, vdist, vector(), VOL_BASE, W_DualWielding(), W_HitPlotAnalysis(), W_PlayStrengthSound(), w_shotdir, w_shotend, w_shotorg, WarpZone_trace_transform, WarpZone_TraceLine(), WarpZone_traceline_antilag(), WarpZone_UnTransformOrigin(), and WEP_FLAG_PENETRATEWALLS.

25 {
26  TC(Sound, snd);
27  float nudge = 1; // added to traceline target and subtracted from result TOOD(divVerent): do we still need this? Doesn't the engine do this now for us?
28  float oldsolid = ent.dphitcontentsmask;
29  Weapon wep = DEATH_WEAPONOF(deathtype);
30  if(!IS_CLIENT(ent))
31  antilag = false; // no antilag for non-clients!
32  if (IS_PLAYER(ent) && (wep.spawnflags & WEP_FLAG_PENETRATEWALLS))
33  {
34  // This is the reason rifle, MG, OKMG and other fireBullet weapons don't hit the crosshair when shooting at walls.
35  // This is intentional, otherwise if you stand too close to a (glass) wall and attempt to shoot an enemy through it,
36  // trueaim will cause the shot to hit the wall exactly but then miss the enemy (unless shooting from eye/center).
37  // TODO for fireBullet, find how far the shot will penetrate and aim at that
38  // for fireRailgunbullet, find the farthest target and aim at that
39  // this will avoid issues when another player is passing in front of you when you shoot
40  // (currently such a shot will hit him but then miss the original target)
41  ent.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_CORPSE;
42  }
43  else
44  ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
45  if(antilag)
46  WarpZone_traceline_antilag(NULL, ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + s_forward * range, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
47  // passing NULL, because we do NOT want it to touch dphitcontentsmask
48  else
49  WarpZone_TraceLine(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + s_forward * range, MOVE_NOMONSTERS, ent);
50  ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
51 
52  vector forward, right, up;
53  forward = v_forward;
54  right = v_right;
55  up = v_up;
57  v_forward = forward;
58  v_right = right;
59  v_up = up;
60 
61  // un-adjust trueaim if shotend is too close
62  if(vdist(w_shotend - (ent.origin + ent.view_ofs), <, autocvar_g_trueaim_minrange))
63  w_shotend = ent.origin + ent.view_ofs + s_forward * autocvar_g_trueaim_minrange;
64 
65  // track max damage
66  if (IS_PLAYER(ent) && accuracy_canbegooddamage(ent))
67  accuracy_add(ent, wep, maxdamage, 0);
68 
69  if(IS_PLAYER(ent))
70  W_HitPlotAnalysis(ent, wep, forward, right, up);
71 
72  vector md = ent.(weaponentity).movedir;
73  vector vecs = ((md.x > 0) ? md : '0 0 0');
74 
75  vector dv = right * -vecs.y + up * vecs.z;
76  w_shotorg = ent.origin + ent.view_ofs;
77  if(antilag)
78  {
79  if(CS(ent).antilag_debug)
80  tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent, CS(ent).antilag_debug);
81  else
82  tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
83  }
84  else
85  tracebox(w_shotorg, mi, ma, w_shotorg + dv, MOVE_NORMAL, ent);
87 
88  // now move the shotorg forward as much as requested if possible
89  if(antilag)
90  {
91  if(CS(ent).antilag_debug)
92  tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, CS(ent).antilag_debug);
93  else
94  tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
95  }
96  else
97  tracebox(w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent);
98  w_shotorg = trace_endpos - forward * nudge;
99  // calculate the shotdir from the chosen shotorg
100  if(W_DualWielding(ent))
101  w_shotdir = s_forward;
102  else
104 
105  //vector prevdir = w_shotdir;
106  //vector prevorg = w_shotorg;
107  //vector prevend = w_shotend;
108 
109  if (antilag)
110  if (!CS_CVAR(ent).cvar_cl_noantilag)
111  {
112  if (autocvar_g_antilag == 1) // switch to "ghost" if not hitting original
113  {
114  traceline(w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent);
115  if (!trace_ent.takedamage)
116  {
118  if (trace_ent.takedamage && IS_PLAYER(trace_ent))
119  {
120  entity e;
121  e = trace_ent;
122  traceline(w_shotorg, e.origin, MOVE_NORMAL, ent);
123  if(trace_ent == e)
125  }
126  }
127  }
128  else if(autocvar_g_antilag == 3) // client side hitscan
129  {
130  // this part MUST use prydon cursor
131  if (CS(ent).cursor_trace_ent) // client was aiming at someone
132  if (CS(ent).cursor_trace_ent != ent) // just to make sure
133  if (CS(ent).cursor_trace_ent.takedamage) // and that person is killable
134  if (IS_PLAYER(CS(ent).cursor_trace_ent)) // and actually a player
135  {
136  // verify that the shot would miss without antilag
137  // (avoids an issue where guns would always shoot at their origin)
138  traceline(w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent);
139  if (!trace_ent.takedamage)
140  {
141  // verify that the shot would hit if altered
142  traceline(w_shotorg, CS(ent).cursor_trace_ent.origin, MOVE_NORMAL, ent);
143  if (trace_ent == CS(ent).cursor_trace_ent)
144  w_shotdir = normalize(CS(ent).cursor_trace_ent.origin - w_shotorg);
145  else
146  LOG_INFO("antilag fail");
147  }
148  }
149  }
150  }
151 
152  ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX)
153 
154  if (!autocvar_g_norecoil)
155  ent.punchangle_x = recoil * -1;
156 
157  if (snd != SND_Null) {
158  sound(ent, chan, snd, (W_DualWielding(ent) ? VOL_BASE * 0.7 : VOL_BASE), ATTN_NORM);
159  W_PlayStrengthSound(ent);
160  }
161 
162  // nudge w_shotend so a trace to w_shotend hits
164  //if(w_shotend != prevend) { printf("SERVER: shotEND differs: %s - %s\n", vtos(w_shotend), vtos(prevend)); }
165  //if(w_shotorg != prevorg) { printf("SERVER: shotORG differs: %s - %s\n", vtos(w_shotorg), vtos(prevorg)); }
166  //if(w_shotdir != prevdir) { printf("SERVER: shotDIR differs: %s - %s\n", vtos(w_shotdir), vtos(prevdir)); }
167 }
const int WEP_FLAG_PENETRATEWALLS
Definition: weapon.qh:208
float antilag_debug
Definition: antilag.qc:19
vector w_shotorg
Definition: tracing.qh:18
#define IS_CLIENT(v)
Definition: utils.qh:13
void tracebox_antilag(entity source, vector v1, vector mi, vector ma, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:210
entity() spawn
const float MOVE_NORMAL
Definition: csprogsdefs.qc:252
ClientState CS(Client this)
Definition: state.qh:47
#define CS_CVAR(this)
Definition: state.qh:51
vector w_shotdir
Definition: tracing.qh:19
#define DEATH_WEAPONOF(t)
Definition: all.qh:41
entity trace_ent
Definition: csprogsdefs.qc:40
void WarpZone_traceline_antilag(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:221
vector WarpZone_UnTransformOrigin(entity wz, vector v)
Definition: common.qc:535
float autocvar_g_trueaim_minrange
Definition: tracing.qh:16
const float ATTN_NORM
Definition: csprogsdefs.qc:226
int spawnflags
M: flags : WEPSPAWNFLAG_...
Definition: weapon.qh:52
void W_HitPlotAnalysis(entity player, entity wep, vector screenforward, vector screenright, vector screenup)
Definition: hitplot.qc:58
vector movedir
Definition: progsdefs.qc:203
const float MOVE_NOMONSTERS
Definition: csprogsdefs.qc:253
void traceline_antilag_force(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:199
void W_PlayStrengthSound(entity player)
Definition: common.qc:44
bool W_DualWielding(entity player)
Definition: common.qc:20
vector v_up
Definition: csprogsdefs.qc:31
#define NULL
Definition: post.qh:17
#define LOG_INFO(...)
Definition: log.qh:70
float DPCONTENTS_SOLID
const float VOL_BASE
Definition: sound.qh:36
#define TC(T, sym)
Definition: _all.inc:82
vector trace_endpos
Definition: csprogsdefs.qc:37
int autocvar_g_antilag
Definition: antilag.qh:3
vector w_shotend
Definition: tracing.qh:20
Definition: sound.qh:119
vector(float skel, float bonenum) _skel_get_boneabs_hidden
entity WarpZone_trace_transform
Definition: common.qh:37
entity cursor_trace_ent
float DPCONTENTS_BODY
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
void accuracy_add(entity this, Weapon w, float fired, float hit)
Definition: accuracy.qc:83
void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
Definition: common.qc:338
vector v_right
Definition: csprogsdefs.qc:31
#define ANTILAG_LATENCY(e)
Definition: antilag.qh:19
#define sound(e, c, s, v, a)
Definition: sound.qh:52
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
Definition: weapon.qh:41
bool accuracy_canbegooddamage(entity attacker)
Definition: accuracy.qc:132
bool autocvar_g_norecoil
Definition: tracing.qh:15
#define IS_PLAYER(v)
Definition: utils.qh:9
float DPCONTENTS_CORPSE
vector v_forward
Definition: csprogsdefs.qc:31
+ Here is the call graph for this function:

◆ WarpZone_crosshair_trace()

void WarpZone_crosshair_trace ( entity  pl)

Definition at line 544 of file tracing.qc.

References ANTILAG_LATENCY, CS(), cursor_trace_endpos, cursor_trace_start, MOVE_NORMAL, normalize(), and WarpZone_traceline_antilag().

Referenced by crosshair_trace_plusvisibletriggers__is_wz(), crosshair_trace_waypoints(), and IMPULSE().

545 {
546  WarpZone_traceline_antilag(pl, CS(pl).cursor_trace_start, CS(pl).cursor_trace_start + normalize(CS(pl).cursor_trace_endpos - CS(pl).cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl));
547 }
const float MOVE_NORMAL
Definition: csprogsdefs.qc:252
ClientState CS(Client this)
Definition: state.qh:47
vector cursor_trace_start
vector cursor_trace_endpos
void WarpZone_traceline_antilag(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:221
#define ANTILAG_LATENCY(e)
Definition: antilag.qh:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ WarpZone_crosshair_trace_plusvisibletriggers()

void WarpZone_crosshair_trace_plusvisibletriggers ( entity  pl)

Definition at line 518 of file tracing.qc.

References crosshair_trace_plusvisibletriggers__is_wz().

Referenced by formatmessage(), and IMPULSE().

519 {
521 }
void crosshair_trace_plusvisibletriggers__is_wz(entity pl, bool is_wz)
Definition: tracing.qc:523
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ WarpZone_traceline_antilag()

void WarpZone_traceline_antilag ( entity  source,
vector  v1,
vector  v2,
float  nomonst,
entity  forent,
float  lag 
)

Definition at line 221 of file antilag.qc.

References autocvar_g_antilag, CS_CVAR, IS_CLIENT, and WarpZone_traceline_antilag_force().

Referenced by FireRailgunBullet(), W_SetupShot_Dir_ProjectileSize_Range(), and WarpZone_crosshair_trace().

222 {
223  bool noantilag = ((IS_CLIENT(source)) ? CS_CVAR(source).cvar_cl_noantilag : false);
224  if (autocvar_g_antilag != 2 || noantilag)
225  lag = 0;
226  WarpZone_traceline_antilag_force(source, v1, v2, nomonst, forent, lag);
227 }
#define IS_CLIENT(v)
Definition: utils.qh:13
void WarpZone_traceline_antilag_force(entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
Definition: antilag.qc:217
#define CS_CVAR(this)
Definition: state.qh:51
int autocvar_g_antilag
Definition: antilag.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ autocvar_g_ballistics_density_corpse

float autocvar_g_ballistics_density_corpse

Definition at line 6 of file tracing.qh.

Referenced by PlayerDamage().

◆ autocvar_g_ballistics_density_player

float autocvar_g_ballistics_density_player

Definition at line 7 of file tracing.qh.

Referenced by PutPlayerInServer().

◆ autocvar_g_ballistics_mindistance

float autocvar_g_ballistics_mindistance

Definition at line 8 of file tracing.qh.

Referenced by fireBullet_antilag().

◆ autocvar_g_ballistics_penetrate_clips

bool autocvar_g_ballistics_penetrate_clips = true

Definition at line 9 of file tracing.qh.

Referenced by fireBullet_antilag().

◆ autocvar_g_ballistics_solidpenetration_exponent

float autocvar_g_ballistics_solidpenetration_exponent = 1

Definition at line 10 of file tracing.qh.

Referenced by fireBullet_antilag().

◆ autocvar_g_norecoil

bool autocvar_g_norecoil

Definition at line 15 of file tracing.qh.

Referenced by spawnfunc(), and W_SetupShot_Dir_ProjectileSize_Range().

◆ autocvar_g_projectiles_newton_style

int autocvar_g_projectiles_newton_style

Definition at line 11 of file tracing.qh.

Referenced by W_CalculateProjectileVelocity().

◆ autocvar_g_projectiles_newton_style_2_maxfactor

float autocvar_g_projectiles_newton_style_2_maxfactor

Definition at line 12 of file tracing.qh.

Referenced by W_CalculateProjectileVelocity().

◆ autocvar_g_projectiles_newton_style_2_minfactor

float autocvar_g_projectiles_newton_style_2_minfactor

Definition at line 13 of file tracing.qh.

Referenced by W_CalculateProjectileVelocity().

◆ autocvar_g_projectiles_spread_style

int autocvar_g_projectiles_spread_style

Definition at line 14 of file tracing.qh.

Referenced by W_SetupProjVelocity_Explicit().

◆ autocvar_g_trueaim_minrange

float autocvar_g_trueaim_minrange

Definition at line 16 of file tracing.qh.

Referenced by ClientInit_misc(), and W_SetupShot_Dir_ProjectileSize_Range().

◆ ballistics_density

float ballistics_density

Definition at line 77 of file tracing.qh.

◆ fireBullet_last_hit

entity fireBullet_last_hit

Definition at line 92 of file tracing.qh.

Referenced by fireBullet_antilag(), and fireBullet_trace_callback().

◆ fireBullet_trace_callback_eff

entity fireBullet_trace_callback_eff

Definition at line 91 of file tracing.qh.

Referenced by fireBullet_antilag(), and fireBullet_trace_callback().

◆ g_ctrace_changed

IntrusiveList g_ctrace_changed

Definition at line 109 of file tracing.qh.

Referenced by crosshair_trace_plusvisibletriggers__is_wz().

◆ g_railgunhit

IntrusiveList g_railgunhit

Definition at line 84 of file tracing.qh.

Referenced by FireRailgunBullet().

◆ railgundistance

float railgundistance

Definition at line 87 of file tracing.qh.

◆ railgunforce

vector railgunforce

Definition at line 88 of file tracing.qh.

◆ railgunhit

bool railgunhit

Definition at line 80 of file tracing.qh.

◆ railgunhitloc

vector railgunhitloc

Definition at line 82 of file tracing.qh.

◆ railgunhitsolidbackup

float railgunhitsolidbackup

Definition at line 81 of file tracing.qh.

◆ w_shotdir

◆ w_shotend

vector w_shotend

Definition at line 20 of file tracing.qh.

Referenced by W_SetupShot_Dir_ProjectileSize_Range().

◆ w_shotorg