Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
crosshair.qc File Reference
Include dependency graph for crosshair.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define CROSSHAIR_DO_BLUR(M, sz, wcross_name, wcross_alpha)
#define CROSSHAIR_DRAW(sz, wcross_name, wcross_alpha)
#define CROSSHAIR_DRAW_SINGLE(i, j, sz, scaled_sz, wcross_name, wcross_alpha)

Functions

vector crosshair_getcolor (entity this, float health_stat)
void DrawReticle (entity this)
int EnemyHitCheck ()
void HUD_Crosshair (entity this)
void HUD_Crosshair_ApplyPlayerAlpha (float new_alpha)
void HUD_Crosshair_Vehicle (entity this)
void TrueAim_Init ()
int TrueAimCheck (entity wepent)

Variables

float hitindication_crosshair_size
float pickup_crosshair_size
float pickup_crosshair_time
const float SHOTTYPE_HITENEMY = 4
const float SHOTTYPE_HITOBSTRUCTION = 2
const float SHOTTYPE_HITTEAM = 1
const float SHOTTYPE_HITWORLD = 3
entity tag_entity
entity trueaim
entity trueaim_rifle
float use_vortex_chargepool
float wcross_alpha_goal_prev
float wcross_alpha_prev
float wcross_changedonetime
vector wcross_color_goal_prev
vector wcross_color_prev
float wcross_name_alpha_goal_prev
float wcross_name_alpha_goal_prev_prev
float wcross_name_changedonetime
float wcross_name_changestarttime
string wcross_name_goal_prev
string wcross_name_goal_prev_prev
vector wcross_origin
float wcross_resolution_goal_prev
float wcross_resolution_goal_prev_prev
float wcross_ring_prev
float wcross_scale_goal_prev
float wcross_scale_prev

Macro Definition Documentation

◆ CROSSHAIR_DO_BLUR

#define CROSSHAIR_DO_BLUR ( M,
sz,
wcross_name,
wcross_alpha )
Value:
MACRO_BEGIN \
vector scaled_sz = sz * wcross_size; \
if (wcross_blur > 0) \
for (int j, i = -2; i <= 2; ++i) \
for (j = -2; j <= 2; ++j) \
M(i, j, sz, scaled_sz, wcross_name, wcross_alpha * 0.04); \
else \
M(0, 0, sz, scaled_sz, wcross_name, wcross_alpha); \
#define MACRO_END
Definition macro.qh:7

◆ CROSSHAIR_DRAW

#define CROSSHAIR_DRAW ( sz,
wcross_name,
wcross_alpha )
Value:
CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE, sz, wcross_name, wcross_alpha)
#define CROSSHAIR_DO_BLUR(M, sz, wcross_name, wcross_alpha)
#define CROSSHAIR_DRAW_SINGLE(i, j, sz, scaled_sz, wcross_name, wcross_alpha)

Referenced by HUD_Crosshair().

◆ CROSSHAIR_DRAW_SINGLE

#define CROSSHAIR_DRAW_SINGLE ( i,
j,
sz,
scaled_sz,
wcross_name,
wcross_alpha )
Value:
drawpic(wcross_origin - ('0.5 0 0' * (scaled_sz.x + i * wcross_blur) + '0 0.5 0' * (scaled_sz.y + j * wcross_blur)), wcross_name, scaled_sz, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
#define drawpic(position, pic, size, rgb, alpha, flag)
Definition draw.qh:21
vector wcross_origin
Definition crosshair.qc:22
const float DRAWFLAG_NORMAL

Function Documentation

◆ crosshair_getcolor()

vector crosshair_getcolor ( entity this,
float health_stat )

Definition at line 165 of file crosshair.qc.

166{
167 static float rainbow_last_flicker;
168 static vector rainbow_prev_color;
169 vector wcross_color = '0 0 0';
171 {
172 case 1: // weapon color
173 if (this != WEP_Null && hud == HUD_NORMAL)
174 {
175 wcross_color = this.m_color;
176 break;
177 }
178 else
179 goto normalcolor;
180
181 case 2: // color based on health and armor
182 {
183 vector v = healtharmor_maxdamage(health_stat, STAT(ARMOR), armorblockpercent, DEATH_WEAPON.m_id);
184 float health_and_armor = floor(v.x + 1);
185 wcross_color = HUD_Get_Num_Color(health_and_armor, 200, false);
186 break;
187 }
188
189 case 3: // rainbow/random color
190 if (time >= rainbow_last_flicker)
191 {
194 }
195 wcross_color = rainbow_prev_color;
196 break;
197LABEL(normalcolor)
198 default:
199 wcross_color = stov(autocvar_crosshair_color);
200 break;
201 }
202
203 return wcross_color;
204}
float armorblockpercent
Definition main.qh:160
int hud
Definition main.qh:173
vector healtharmor_maxdamage(float h, float a, float armorblock, int deathtype)
Definition util.qc:1289
#define LABEL(id)
Definition compiler.qh:34
const int HUD_NORMAL
Definition constants.qh:47
int autocvar_crosshair_color_special
Definition crosshair.qh:13
float autocvar_crosshair_color_special_rainbow_delay
Definition crosshair.qh:15
string autocvar_crosshair_color
Definition crosshair.qh:12
float autocvar_crosshair_color_special_rainbow_brightness
Definition crosshair.qh:14
float time
vector HUD_Get_Num_Color(float hp, float maxvalue, bool blink)
Definition hud.qc:123
#define STAT(...)
Definition stats.qh:82
vector stov(string s)
vector randomvec(void)
float floor(float f)
vector
Definition self.qh:92

References armorblockpercent, autocvar_crosshair_color, autocvar_crosshair_color_special, autocvar_crosshair_color_special_rainbow_brightness, autocvar_crosshair_color_special_rainbow_delay, entity(), floor(), healtharmor_maxdamage(), hud, HUD_Get_Num_Color(), HUD_NORMAL, LABEL, randomvec(), STAT, stov(), time, and vector.

Referenced by HUD_Crosshair(), and Vehicles_drawCrosshair().

◆ DrawReticle()

void DrawReticle ( entity this)

Definition at line 649 of file crosshair.qc.

650{
652 return;
653
654 string reticle_image = string_null;
655 bool wep_zoomed = false;
656 for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
657 {
658 entity wepe = viewmodels[slot];
659 Weapon wep = wepe.activeweapon;
660 if (wep != WEP_Null && wep.wr_zoom)
661 {
662 bool do_zoom = wep.wr_zoom(wep, NULL);
663 if (!reticle_image && wep.w_reticle && wep.w_reticle != "")
664 reticle_image = wep.w_reticle;
665 wep_zoomed += do_zoom;
666 }
667 }
668 // Draw the aiming reticle for weapons that use it
669 // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
670 // It must be a persisted float for fading out to work properly (you let go of the zoom button for
671 // the view to go back to normal, so reticle_type would become 0 as we fade out)
672 int reticle_type;
673 if (spectatee_status || (STAT(HEALTH) <= 0) || hud != HUD_NORMAL || this.viewloc || (autocvar_chase_active != 0 && !autocvar_cl_reticle_chase))
674 reticle_type = 0; // no zoom reticle while dead
675 else if (wep_zoomed && autocvar_cl_reticle_weapon)
676 {
677 if (reticle_image)
678 reticle_type = 2;
679 else
680 reticle_type = 0;
681 }
682 else if (button_zoom || zoomscript_caught)
683 reticle_type = 1; // normal zoom
684 else
685 reticle_type = 0;
686
687 if (reticle_type)
688 {
689 vector reticle_pos = '0 0 0', reticle_size = '0 0 0';
691 {
692 reticle_size.x = vid_conwidth;
693 reticle_size.y = vid_conheight;
694 reticle_pos.x = 0;
695 reticle_pos.y = 0;
696 }
697 else
698 {
699 reticle_size.x = max(vid_conwidth, vid_conheight);
700 reticle_size.y = max(vid_conwidth, vid_conheight);
701 reticle_pos.x = (vid_conwidth - reticle_size.x) / 2;
702 reticle_pos.y = (vid_conheight - reticle_size.y) / 2;
703 }
704
705 float f = (zoomscript_caught ? 1 : max(0.25, current_zoomfraction));
706 if (f)
707 switch (reticle_type)
708 {
709 case 1:
710 drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_normal_alpha, DRAWFLAG_NORMAL);
711 break;
712 case 2:
713 if (reticle_image)
714 drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL);
715 break;
716 }
717 }
718}
#define MUTATOR_CALLHOOK(id,...)
Definition base.qh:143
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
Definition weapon.qh:44
virtual void wr_zoom()
(BOTH) weapon specific zoom reticle
Definition weapon.qh:116
string w_reticle
A: reticle : per-weapon zoom reticle.
Definition weapon.qh:75
bool button_zoom
Definition main.qh:113
int spectatee_status
the -1 disables HUD panels before CSQC receives necessary data
Definition main.qh:197
float current_zoomfraction
Definition main.qh:148
void DrawReticle(entity this)
Definition crosshair.qc:649
bool autocvar_cl_reticle_weapon
Definition crosshair.qh:5
float autocvar_cl_reticle_weapon_alpha
Definition crosshair.qh:6
bool autocvar_cl_reticle_stretch
Definition crosshair.qh:7
float autocvar_cl_reticle_normal_alpha
Definition crosshair.qh:4
bool autocvar_cl_reticle_chase
Definition crosshair.qh:8
bool autocvar_cl_reticle
Definition crosshair.qh:3
noref float vid_conwidth
Definition draw.qh:8
noref float vid_conheight
Definition draw.qh:9
entity viewloc
Definition viewloc.qh:13
float max(float f,...)
string string_null
Definition nil.qh:9
#define NULL
Definition post.qh:14
int autocvar_chase_active
Definition view.qh:17
float zoomscript_caught
Definition view.qh:121
entity viewmodels[MAX_WEAPONSLOTS]
Definition view.qh:108
const int MAX_WEAPONSLOTS
Definition weapon.qh:16

References autocvar_chase_active, autocvar_cl_reticle, autocvar_cl_reticle_chase, autocvar_cl_reticle_normal_alpha, autocvar_cl_reticle_stretch, autocvar_cl_reticle_weapon, autocvar_cl_reticle_weapon_alpha, button_zoom, current_zoomfraction, DRAWFLAG_NORMAL, drawpic, DrawReticle(), entity(), hud, HUD_NORMAL, max(), MAX_WEAPONSLOTS, MUTATOR_CALLHOOK, NULL, spectatee_status, STAT, string_null, vector, vid_conheight, vid_conwidth, viewloc, viewmodels, Weapon::w_reticle, Weapon::wr_zoom(), and zoomscript_caught.

Referenced by CSQC_UpdateView(), DrawReticle(), and MUTATOR_HOOKABLE().

◆ EnemyHitCheck()

int EnemyHitCheck ( )

Definition at line 50 of file crosshair.qc.

51{
53 wcross_origin.z = 0;
54 float n;
55 if (trace_ent)
56 n = trace_ent.entnum;
57 else
59 if (n < 1)
60 return SHOTTYPE_HITWORLD;
61 if (n > maxclients)
62 return SHOTTYPE_HITWORLD;
63 int t = entcs_GetTeam(n - 1);
64 if (teamplay && t == myteam)
65 return SHOTTYPE_HITTEAM;
66 if (t == NUM_SPECTATOR)
67 return SHOTTYPE_HITWORLD;
68 return SHOTTYPE_HITENEMY;
69}
const float SHOTTYPE_HITTEAM
Definition crosshair.qc:39
const float SHOTTYPE_HITWORLD
Definition crosshair.qc:41
const float SHOTTYPE_HITENEMY
Definition crosshair.qc:42
float maxclients
entity trace_ent
float trace_networkentity
vector trace_endpos
int entcs_GetTeam(int i)
Definition ent_cs.qh:133
int myteam
Definition teams.qh:60
const int NUM_SPECTATOR
Definition teams.qh:23
bool teamplay
Definition teams.qh:59
vector project_3d_to_2d(vector vec)
Definition view.qc:373

References entcs_GetTeam(), maxclients, myteam, NUM_SPECTATOR, project_3d_to_2d(), SHOTTYPE_HITENEMY, SHOTTYPE_HITTEAM, SHOTTYPE_HITWORLD, teamplay, trace_endpos, trace_ent, trace_networkentity, and wcross_origin.

Referenced by TrueAimCheck().

◆ HUD_Crosshair()

void HUD_Crosshair ( entity this)

Definition at line 213 of file crosshair.qc.

214{
215 // reset player's alpha here upon death since forced scoreboard prevents running the crosshair_chase code
217 csqcplayer.alpha = csqcplayer.m_alpha;
218
220 {
221 if (csqcplayer.alpha != csqcplayer.m_alpha)
223 return;
224 }
225
226 if (!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) && !autocvar_cl_lockview
227 && spectatee_status != -1 && STAT(HEALTH) > 0 && !MUTATOR_CALLHOOK(DrawCrosshair)
228 && (!csqcplayer.viewloc || (!spectatee_status && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM)))
230 {
231 if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
232 return;
233
234 if (spectatee_status > 0 && STAT(CAMERA_SPECTATOR) == 2)
235 return;
236
237 if (hud != HUD_NORMAL)
238 {
240 return;
241 }
242
243 string wcross_style;
244 float wcross_alpha, wcross_resolution;
245 wcross_style = autocvar_crosshair;
246 if (csqcplayer.viewloc && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM) && autocvar_crosshair_2d != "")
247 wcross_style = autocvar_crosshair_2d;
248 if (wcross_style == "0")
249 return;
250 wcross_resolution = autocvar_crosshair_size;
251 if (wcross_resolution == 0)
252 return;
253 wcross_alpha = autocvar_crosshair_alpha;
254 if (wcross_alpha == 0)
255 return;
256
257 static int crosshair_chase_state = 0;
258
259 // wcross_origin = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
260 if (csqcplayer.viewloc && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))
263 {
264 vector player_org = (csqcplayer ? csqcplayer.origin + csqcplayer.view_ofs : view_origin);
265 float my_alpha = !csqcplayer.m_alpha ? 1 : csqcplayer.m_alpha;
266 float chase_playeralpha = bound(0.001, autocvar_crosshair_chase_playeralpha, 1);
267 if (csqcplayer && chase_playeralpha < 1 && my_alpha > chase_playeralpha)
268 {
269 crosshair_chase_state = 2;
270 bool hit = false;
271 if (pointinsidebox(view_origin, csqcplayer.absmin, csqcplayer.absmax))
272 hit = true;
273 else
274 {
276 if (trace_ent == csqcplayer)
277 hit = true;
278 }
279 float prev_alpha = csqcplayer.alpha;
280 float new_alpha = hit
281 ? max(csqcplayer.alpha - frametime * 5, chase_playeralpha)
282 : min(csqcplayer.alpha + frametime * 5, my_alpha);
283
284 if (new_alpha != prev_alpha)
286 }
287 traceline(player_org, player_org + max_shot_distance * view_forward, MOVE_WORLDONLY, NULL);
289 }
290 else
292 wcross_origin.z = 0;
293 if (crosshair_chase_state == 2) // enabled (this frame)
294 crosshair_chase_state = 1;
295 else if (crosshair_chase_state == 1) // turned off in the previous frame
296 {
297 // reset player alpha only in this frame
298 if (csqcplayer)
300 crosshair_chase_state = 0; // turned off and alpha reset
301 }
302
303 // TrueAim check
304 float shottype;
305
307 {
308 vector wcross_oldorigin;
309 entity thiswep = viewmodels[0]; // TODO: unhardcode
310 wcross_oldorigin = wcross_origin;
311 shottype = TrueAimCheck(thiswep);
312 if (shottype == SHOTTYPE_HITWORLD)
313 {
314 vector v = wcross_origin - wcross_oldorigin;
315 v.x /= vid_conwidth;
316 v.y /= vid_conheight;
317 if (vdist(v, >, 0.01))
318 shottype = SHOTTYPE_HITOBSTRUCTION;
319 }
321 wcross_origin = wcross_oldorigin;
322 }
323 else
324 shottype = SHOTTYPE_HITWORLD;
325
326 vector wcross_color = '0 0 0', wcross_size = '0 0 0';
327 string wcross_name = "";
328 float wcross_scale, wcross_blur;
329
330 entity e = WEP_Null;
332 {
333 entity wepent = viewmodels[0]; // TODO: unhardcode
334 e = wepent.switchingweapon;
336 {
337 // WEAPONTODO: access these through some general settings (with non-balance config settings)
338 //wcross_resolution *= cvar(strcat("crosshair_", wcross_wep, "_size"));
339 //if (wcross_resolution == 0)
340 //return;
341
342 //wcross_style = cvar_string(strcat("crosshair_", wcross_wep));
343 wcross_resolution *= e.w_crosshair_size;
344 wcross_name = e.w_crosshair;
345 }
346 }
347
348 if (wcross_name == "")
349 wcross_name = strcat("gfx/crosshair", wcross_style);
350
351 // MAIN CROSSHAIR COLOR DECISION
352 wcross_color = crosshair_getcolor(e, STAT(HEALTH));
353
355 {
356 wcross_scale = wcross_resolution;
357 wcross_resolution = 1;
358 }
359 else
360 wcross_scale = 1;
361
363 {
364 float stat_pickup_time = STAT(LAST_PICKUP);
365
366 if (pickup_crosshair_time < stat_pickup_time)
367 {
368 if (time - stat_pickup_time < 5) // don't trigger the animation if it's too old
370
371 pickup_crosshair_time = stat_pickup_time;
372 }
373
374 if (pickup_crosshair_size > 0)
376 else
378
380 }
381
382 // todo: make crosshair hit indication dependent on damage dealt
384 {
386
389
392 else
394
396 wcross_color.x += sin(hitindication_crosshair_size) * col.x;
397 wcross_color.y += sin(hitindication_crosshair_size) * col.y;
398 wcross_color.z += sin(hitindication_crosshair_size) * col.z;
399 }
400
401 // no effects needed for targeting enemies, this can't possibly span all valid targets!
402 // just show for teammates to give a sign that they're an invalid target
403 //if (shottype == SHOTTYPE_HITENEMY)
404 //wcross_scale *= autocvar_crosshair_hittest; // is not queried if hittest is 0
405 if (shottype == SHOTTYPE_HITTEAM)
406 wcross_scale /= autocvar_crosshair_hittest; // is not queried if hittest is 0
407
409 if (wcross_scale != wcross_scale_goal_prev || wcross_alpha != wcross_alpha_goal_prev || wcross_color != wcross_color_goal_prev)
411 if (wcross_name != wcross_name_goal_prev || wcross_resolution != wcross_resolution_goal_prev)
412 {
418 wcross_name_goal_prev = strzone(wcross_name);
421 wcross_resolution_goal_prev = wcross_resolution;
422 }
423
424 wcross_scale_goal_prev = wcross_scale;
425 wcross_alpha_goal_prev = wcross_alpha;
426 wcross_color_goal_prev = wcross_color;
427
430 {
431 wcross_blur = 1;
432 wcross_alpha *= 0.75;
433 }
434 else
435 wcross_blur = 0;
436 // *_prev is at time-frametime
437 // * is at wcross_changedonetime+f
438 // what do we have at time?
440 {
442 wcross_scale = f * wcross_scale + (1 - f) * wcross_scale_prev;
443 wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
444 wcross_color = f * wcross_color + (1 - f) * wcross_color_prev;
445 }
446
447 wcross_scale_prev = wcross_scale;
448 wcross_alpha_prev = wcross_alpha;
449 wcross_color_prev = wcross_color;
450
451 MUTATOR_CALLHOOK(UpdateCrosshair);
452
453 wcross_scale *= 1 - autocvar__menu_alpha;
454 wcross_alpha *= 1 - autocvar__menu_alpha;
455 wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
456
457 if (wcross_scale >= 0.001 && wcross_alpha >= 0.001)
458 {
459 // crosshair rings for weapon stats
461 {
462 // declarations and stats
463 float ring_value = 0, ring_scale = 0, ring_alpha = 0, ring_inner_value = 0, ring_inner_alpha = 0;
464 string ring_image = string_null, ring_inner_image = string_null;
465 vector ring_rgb = '0 0 0', ring_inner_rgb = '0 0 0';
466
467 ring_scale = autocvar_crosshair_ring_size;
468
469 entity wepent = viewmodels[0]; // TODO: unhardcode
470
471 int weapon_clipload = wepent.clip_load;
472 int weapon_clipsize = wepent.clip_size;
473
474 float arc_heat = wepent.arc_heat_percent;
475
476 if (vortex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
477 vortex_charge_movingavg = wepent.vortex_charge;
478
479 float charge = 0;
480 float chargepool = 0;
481 bool ring_vortex_enabled = false;
483 {
484 if (wepent.activeweapon == WEP_VORTEX)
485 {
486 charge = wepent.vortex_charge;
487 chargepool = wepent.vortex_chargepool_ammo;
488 }
489 else if (wepent.activeweapon == WEP_OVERKILL_NEX)
490 {
491 charge = wepent.oknex_charge;
492 chargepool = wepent.oknex_chargepool_ammo;
493 }
494 if (charge)
495 ring_vortex_enabled = true;
496 }
497
498 if (ring_vortex_enabled)
499 {
500 if (chargepool || use_vortex_chargepool)
501 {
503 ring_inner_value = chargepool;
504 }
505 else
506 {
508 vortex_charge_movingavg = (1 - rate) * vortex_charge_movingavg + rate * charge;
510 }
511
514 ring_inner_image = "gfx/crosshair_ring_inner";
515
516 // draw the outer ring to show the current charge of the weapon
517 ring_value = charge;
519 ring_rgb = wcross_color;
520 ring_image = "gfx/crosshair_ring_nexgun";
521 }
522 else if (autocvar_crosshair_ring && wepent.activeweapon == WEP_MINE_LAYER && WEP_CVAR(WEP_MINE_LAYER, limit) && autocvar_crosshair_ring_minelayer)
523 {
524 ring_value = bound(0, wepent.minelayer_mines / WEP_CVAR(WEP_MINE_LAYER, limit), 1);
526 ring_rgb = wcross_color;
527 ring_image = "gfx/crosshair_ring";
528 }
529 else if (wepent.activeweapon == WEP_HAGAR && wepent.hagar_load && autocvar_crosshair_ring_hagar)
530 {
531 ring_value = bound(0, wepent.hagar_load / WEP_CVAR_SEC(WEP_HAGAR, load_max), 1);
533 ring_rgb = wcross_color;
534 ring_image = "gfx/crosshair_ring";
535 }
536 else if (autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
537 {
538 ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
541 ring_rgb = wcross_color;
542
543 // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
544 // if a new image for another weapon is added, add the code (and its respective file/value) here
545 if (wepent.activeweapon == WEP_RIFLE && weapon_clipsize == 80)
546 ring_image = "gfx/crosshair_ring_rifle";
547 else
548 ring_image = "gfx/crosshair_ring";
549 }
550 else if (autocvar_crosshair_ring && autocvar_crosshair_ring_arc && arc_heat && wepent.activeweapon == WEP_ARC)
551 {
552 ring_value = arc_heat;
553 ring_alpha = (1 - arc_heat) * autocvar_crosshair_ring_arc_cold_alpha +
555 ring_rgb = (1 - arc_heat) * wcross_color + arc_heat * autocvar_crosshair_ring_arc_hot_color;
556 ring_image = "gfx/crosshair_ring";
557 }
558
559 // if in weapon switch animation, fade ring out/in
561 {
563 if (f >= 1)
564 wcross_ring_prev = (ring_image ? true : false);
565
567 {
568 if (f < 1)
569 ring_alpha *= fabs(1 - bound(0, f, 1));
570 }
571 else
572 {
573 if (f < 1)
574 ring_alpha *= bound(0, f, 1);
575 }
576 }
577
578 if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
579 DrawCircleClippedPic(wcross_origin, wcross_size.x * wcross_resolution * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
580
581 if (ring_value)
582 DrawCircleClippedPic(wcross_origin, wcross_size.x * wcross_resolution * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
583 }
584
585 #define CROSSHAIR_DO_BLUR(M, sz, wcross_name, wcross_alpha) MACRO_BEGIN \
586 vector scaled_sz = sz * wcross_size; \
587 if (wcross_blur > 0) \
588 for (int j, i = -2; i <= 2; ++i) \
589 for (j = -2; j <= 2; ++j) \
590 M(i, j, sz, scaled_sz, wcross_name, wcross_alpha * 0.04); \
591 else \
592 M(0, 0, sz, scaled_sz, wcross_name, wcross_alpha); \
593 MACRO_END
594
595 #define CROSSHAIR_DRAW_SINGLE(i, j, sz, scaled_sz, wcross_name, wcross_alpha) \
596 drawpic(wcross_origin - ('0.5 0 0' * (scaled_sz.x + i * wcross_blur) + '0 0.5 0' * (scaled_sz.y + j * wcross_blur)), wcross_name, scaled_sz, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
597
598 #define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \
599 CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE, sz, wcross_name, wcross_alpha)
600
603 {
605 wcross_size = draw_getimagesize(wcross_name_goal_prev_prev) * wcross_scale;
607 f = 1 - f;
608 }
609 else
610 f = 1;
611
613
614 wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
615 CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
616
618 {
619 vector wcross_color_old;
620 wcross_color_old = wcross_color;
621
623 wcross_color = stov(autocvar_crosshair_dot_color);
624
625 CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot", f * autocvar_crosshair_dot_alpha);
626 // FIXME why don't we use wcross_alpha here?
627 wcross_color = wcross_color_old;
628 }
629 }
630 }
631 else
632 {
646 }
647}
bool HUD_MinigameMenu_IsOpened()
entity csqcplayer
Definition cl_player.qh:26
void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector rgb, float a, float drawflag)
Definition draw.qc:190
float alpha
Definition items.qc:13
vector view_origin
Definition main.qh:109
float camera_active
Definition main.qh:153
vector view_forward
Definition main.qh:109
float pickup_crosshair_size
Definition crosshair.qc:18
float wcross_resolution_goal_prev_prev
Definition crosshair.qc:30
string wcross_name_goal_prev_prev
Definition crosshair.qc:29
float wcross_alpha_prev
Definition crosshair.qc:23
void HUD_Crosshair_ApplyPlayerAlpha(float new_alpha)
Definition crosshair.qc:207
float wcross_scale_goal_prev
Definition crosshair.qc:25
float pickup_crosshair_time
Definition crosshair.qc:18
void HUD_Crosshair_Vehicle(entity this)
Definition crosshair.qc:156
vector wcross_color_prev
Definition crosshair.qc:24
float wcross_resolution_goal_prev
Definition crosshair.qc:30
float use_vortex_chargepool
Definition crosshair.qc:20
float wcross_changedonetime
Definition crosshair.qc:27
#define CROSSHAIR_DRAW(sz, wcross_name, wcross_alpha)
int TrueAimCheck(entity wepent)
Definition crosshair.qc:71
vector wcross_color_goal_prev
Definition crosshair.qc:26
const float SHOTTYPE_HITOBSTRUCTION
Definition crosshair.qc:40
float wcross_name_changestarttime
Definition crosshair.qc:31
string wcross_name_goal_prev
Definition crosshair.qc:29
float wcross_name_changedonetime
Definition crosshair.qc:31
float wcross_scale_prev
Definition crosshair.qc:23
float hitindication_crosshair_size
Definition crosshair.qc:19
vector crosshair_getcolor(entity this, float health_stat)
Definition crosshair.qc:165
float wcross_alpha_goal_prev
Definition crosshair.qc:25
float wcross_ring_prev
Definition crosshair.qc:34
float wcross_name_alpha_goal_prev_prev
Definition crosshair.qc:32
float wcross_name_alpha_goal_prev
Definition crosshair.qc:32
bool autocvar_crosshair_ring_hagar
Definition crosshair.qh:39
float autocvar_crosshair_ring_vortex_inner_color_blue
Definition crosshair.qh:46
bool autocvar_crosshair_ring
Definition crosshair.qh:35
float autocvar_crosshair_ring_vortex_inner_color_red
Definition crosshair.qh:48
string autocvar_crosshair_2d
Definition crosshair.qh:10
float autocvar_crosshair_ring_vortex_alpha
Definition crosshair.qh:42
bool autocvar_crosshair_hitindication
Definition crosshair.qh:24
bool autocvar_crosshair_hittest
Definition crosshair.qh:28
float autocvar_crosshair_size
Definition crosshair.qh:57
bool autocvar_crosshair_effect_scalefade
Definition crosshair.qh:21
float autocvar_crosshair_ring_reload_size
Definition crosshair.qh:56
bool autocvar_crosshair_ring_arc
Definition crosshair.qh:49
string autocvar_crosshair_dot_color
Definition crosshair.qh:18
bool autocvar_crosshair_enabled
Definition crosshair.qh:23
float autocvar_crosshair_ring_size
Definition crosshair.qh:53
float autocvar_crosshair_ring_reload_alpha
Definition crosshair.qh:55
bool autocvar_crosshair_ring_inner
Definition crosshair.qh:36
float autocvar_crosshair_ring_vortex_currentcharge_movingavg_rate
Definition crosshair.qh:43
float autocvar_crosshair_ring_hagar_alpha
Definition crosshair.qh:40
bool autocvar_crosshair_hittest_blur_wall
Definition crosshair.qh:30
float autocvar_crosshair_ring_vortex_inner_color_green
Definition crosshair.qh:47
float autocvar_crosshair_pickup_speed
Definition crosshair.qh:34
float autocvar_crosshair_dot_size
Definition crosshair.qh:20
bool autocvar_crosshair_ring_minelayer
Definition crosshair.qh:37
float autocvar_crosshair_ring_vortex_currentcharge_scale
Definition crosshair.qh:44
bool autocvar_crosshair_ring_reload
Definition crosshair.qh:54
float autocvar_crosshair_ring_arc_cold_alpha
Definition crosshair.qh:51
bool autocvar_crosshair_hittest_showimpact
Definition crosshair.qh:31
bool autocvar_crosshair_per_weapon
Definition crosshair.qh:32
float autocvar_crosshair_ring_vortex_inner_alpha
Definition crosshair.qh:45
vector autocvar_crosshair_ring_arc_hot_color
Definition crosshair.qh:50
bool autocvar_crosshair_hittest_blur_teammate
Definition crosshair.qh:29
float autocvar_crosshair_pickup
Definition crosshair.qh:33
float vortex_charge_movingavg
Definition crosshair.qh:61
float autocvar_crosshair_hitindication_speed
Definition crosshair.qh:27
float autocvar_crosshair_effect_time
Definition crosshair.qh:22
float autocvar_crosshair_ring_minelayer_alpha
Definition crosshair.qh:38
bool autocvar_crosshair_dot
Definition crosshair.qh:16
bool autocvar_crosshair_dot_color_custom
Definition crosshair.qh:19
string autocvar_crosshair_hitindication_per_weapon_color
Definition crosshair.qh:26
bool autocvar_crosshair_ring_vortex
Definition crosshair.qh:41
float autocvar_crosshair_dot_alpha
Definition crosshair.qh:17
string autocvar_crosshair_hitindication_color
Definition crosshair.qh:25
float autocvar_crosshair_chase_playeralpha
Definition crosshair.qh:59
string autocvar_crosshair
Definition crosshair.qh:9
float autocvar_crosshair_alpha
Definition crosshair.qh:11
bool autocvar_crosshair_chase
Definition crosshair.qh:58
float autocvar_crosshair_ring_arc_hot_alpha
Definition crosshair.qh:52
const float DRAWFLAG_ADDITIVE
float frametime
const float MOVE_NORMAL
float MOVE_WORLDONLY
float intermission
#define true
Definition csprogsdefs.qh:5
float autocvar__menu_alpha
Definition hud.qh:187
void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
Definition common.qc:348
const int VIEWLOC_FREEAIM
Definition viewloc.qh:5
float bound(float min, float value, float max)
float sin(float f)
float min(float f,...)
void strunzone(string s)
float fabs(float f)
string strzone(string s)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
bool scoreboard_active
Definition scoreboard.qh:16
#define strfree(this)
Definition string.qh:59
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition vector.qh:8
#define pointinsidebox(point, bmins, bmaxs)
Definition vector.qh:79
#define vec3(_x, _y, _z)
Definition vector.qh:95
float unaccounted_damage
Definition view.qh:120
vector viewloc_mousepos
Definition view.qh:110
bool autocvar_chase_front
Definition view.qh:18
bool autocvar_cl_lockview
Definition view.qh:20
#define WEP_CVAR(wep, name)
Definition all.qh:321
#define WEP_CVAR_SEC(wep, name)
Definition all.qh:323
int max_shot_distance
Definition weapon.qh:203

References autocvar__menu_alpha, autocvar_chase_active, autocvar_chase_front, autocvar_cl_lockview, autocvar_crosshair, autocvar_crosshair_2d, autocvar_crosshair_alpha, autocvar_crosshair_chase, autocvar_crosshair_chase_playeralpha, autocvar_crosshair_color_special, autocvar_crosshair_dot, autocvar_crosshair_dot_alpha, autocvar_crosshair_dot_color, autocvar_crosshair_dot_color_custom, autocvar_crosshair_dot_size, autocvar_crosshair_effect_scalefade, autocvar_crosshair_effect_time, autocvar_crosshair_enabled, autocvar_crosshair_hitindication, autocvar_crosshair_hitindication_color, autocvar_crosshair_hitindication_per_weapon_color, autocvar_crosshair_hitindication_speed, autocvar_crosshair_hittest, autocvar_crosshair_hittest_blur_teammate, autocvar_crosshair_hittest_blur_wall, autocvar_crosshair_hittest_showimpact, autocvar_crosshair_per_weapon, autocvar_crosshair_pickup, autocvar_crosshair_pickup_speed, autocvar_crosshair_ring, autocvar_crosshair_ring_arc, autocvar_crosshair_ring_arc_cold_alpha, autocvar_crosshair_ring_arc_hot_alpha, autocvar_crosshair_ring_arc_hot_color, autocvar_crosshair_ring_hagar, autocvar_crosshair_ring_hagar_alpha, autocvar_crosshair_ring_inner, autocvar_crosshair_ring_minelayer, autocvar_crosshair_ring_minelayer_alpha, autocvar_crosshair_ring_reload, autocvar_crosshair_ring_reload_alpha, autocvar_crosshair_ring_reload_size, autocvar_crosshair_ring_size, autocvar_crosshair_ring_vortex, autocvar_crosshair_ring_vortex_alpha, autocvar_crosshair_ring_vortex_currentcharge_movingavg_rate, autocvar_crosshair_ring_vortex_currentcharge_scale, autocvar_crosshair_ring_vortex_inner_alpha, autocvar_crosshair_ring_vortex_inner_color_blue, autocvar_crosshair_ring_vortex_inner_color_green, autocvar_crosshair_ring_vortex_inner_color_red, autocvar_crosshair_size, bound(), camera_active, CROSSHAIR_DRAW, crosshair_getcolor(), csqcplayer, DrawCircleClippedPic(), DRAWFLAG_ADDITIVE, entity(), fabs(), frametime, hitindication_crosshair_size, hud, HUD_Crosshair_ApplyPlayerAlpha(), HUD_Crosshair_Vehicle(), HUD_MinigameMenu_IsOpened(), HUD_NORMAL, intermission, max(), max_shot_distance, min(), MOVE_NORMAL, MOVE_WORLDONLY, MUTATOR_CALLHOOK, NULL, pickup_crosshair_size, pickup_crosshair_time, pointinsidebox, project_3d_to_2d(), scoreboard_active, SHOTTYPE_HITOBSTRUCTION, SHOTTYPE_HITTEAM, SHOTTYPE_HITWORLD, sin(), spectatee_status, STAT, stov(), strcat(), strfree, string_null, strunzone(), strzone(), time, trace_endpos, trace_ent, true, TrueAimCheck(), unaccounted_damage, use_vortex_chargepool, vdist, vec3, vector, vid_conheight, vid_conwidth, view_forward, view_origin, VIEWLOC_FREEAIM, viewloc_mousepos, viewmodels, vortex_charge_movingavg, WarpZone_TraceLine(), wcross_alpha_goal_prev, wcross_alpha_prev, wcross_changedonetime, wcross_color_goal_prev, wcross_color_prev, wcross_name_alpha_goal_prev, wcross_name_alpha_goal_prev_prev, wcross_name_changedonetime, wcross_name_changestarttime, wcross_name_goal_prev, wcross_name_goal_prev_prev, wcross_origin, wcross_resolution_goal_prev, wcross_resolution_goal_prev_prev, wcross_ring_prev, wcross_scale_goal_prev, wcross_scale_prev, WEP_CVAR, and WEP_CVAR_SEC.

Referenced by HUD_Draw().

◆ HUD_Crosshair_ApplyPlayerAlpha()

void HUD_Crosshair_ApplyPlayerAlpha ( float new_alpha)

Definition at line 207 of file crosshair.qc.

208{
209 csqcplayer.alpha = new_alpha;
210 FOREACH_ENTITY_CLASS("ENT_CLIENT_MODEL", it.tag_entity == csqcplayer, it.alpha = new_alpha);
211}
#define FOREACH_ENTITY_CLASS(class, cond, body)
Definition iter.qh:189

References csqcplayer, and FOREACH_ENTITY_CLASS.

Referenced by HUD_Crosshair().

◆ HUD_Crosshair_Vehicle()

void HUD_Crosshair_Vehicle ( entity this)

Definition at line 156 of file crosshair.qc.

157{
158 if (hud != HUD_BUMBLEBEE_GUN)
159 {
160 Vehicle info = REGISTRY_GET(Vehicles, hud);
161 info.vr_crosshair(info, this);
162 }
163}
virtual void vr_crosshair()
(CLIENT) logic to run every frame
Definition vehicle.qh:80
const int HUD_BUMBLEBEE_GUN
Definition constants.qh:48
#define REGISTRY_GET(id, i)
Definition registry.qh:43

References entity(), hud, HUD_BUMBLEBEE_GUN, REGISTRY_GET, and Vehicle::vr_crosshair().

Referenced by HUD_Crosshair().

◆ TrueAim_Init()

void TrueAim_Init ( )

Definition at line 44 of file crosshair.qc.

45{
48}
entity trueaim_rifle
Definition crosshair.qc:37
entity trueaim
Definition crosshair.qc:36
float DPCONTENTS_SOLID
float DPCONTENTS_CORPSE
float DPCONTENTS_BODY
float dphitcontentsmask
#define new_pure(class)
purely logical entities (not linked to the area grid)
Definition oo.qh:67

References DPCONTENTS_BODY, DPCONTENTS_CORPSE, DPCONTENTS_SOLID, dphitcontentsmask, new_pure, trueaim, and trueaim_rifle.

Referenced by PostInit().

◆ TrueAimCheck()

int TrueAimCheck ( entity wepent)

Definition at line 71 of file crosshair.qc.

72{
73 if (wepent.activeweapon.spawnflags & WEP_FLAG_NOTRUEAIM)
74 return SHOTTYPE_HITWORLD;
75
76 vector mi = '0 0 0', ma = '0 0 0';
77 entity ta = trueaim;
78 float mv = MOVE_NOMONSTERS;
79
80 switch (wepent.activeweapon) // WEAPONTODO
81 {
82 case WEP_VORTEX:
83 case WEP_OVERKILL_NEX:
84 case WEP_VAPORIZER:
85 mv = MOVE_NORMAL;
86 break;
87 case WEP_RIFLE:
88 ta = trueaim_rifle;
89 mv = MOVE_NORMAL;
91 {
92 tracebox(view_origin, '0 0 0', '0 0 0', view_origin + view_forward * max_shot_distance, mv, ta);
93 return EnemyHitCheck();
94 }
95 break;
96 case WEP_DEVASTATOR: // projectile has a size!
97 mi = '-3 -3 -3';
98 ma = '3 3 3';
99 break;
100 case WEP_FIREBALL: // projectile has a size!
101 mi = '-16 -16 -16';
102 ma = '16 16 16';
103 break;
104 case WEP_SEEKER: // projectile has a size!
105 mi = '-2 -2 -2';
106 ma = '2 2 2';
107 break;
108 case WEP_ELECTRO: // projectile has a size!
109 mi = '0 0 -3';
110 ma = '0 0 -3';
111 break;
112 }
113
114 vector traceorigin = entcs_receiver(player_localentnum - 1).origin + (eZ * STAT(VIEWHEIGHT));
115
116 traceline(traceorigin, traceorigin + view_forward * max_shot_distance, mv, ta);
117 vector trueaimpoint = trace_endpos;
118 // move trueaimpoint a little bit forward to make the final tracebox reliable
119 // since it sometimes doesn't reach a teammate by a hair
120 trueaimpoint += view_forward;
121
122 if (vdist((trueaimpoint - traceorigin), <, g_trueaim_minrange))
123 trueaimpoint = traceorigin + view_forward * g_trueaim_minrange;
124
125 vector vecs = decompressShotOrigin(STAT(SHOTORG));
126
127 if (vecs.x > 0)
128 vecs.y = -vecs.y;
129 else
130 vecs = '0 0 0';
131
132 vector dv = view_right * vecs.y + view_up * vecs.z;
133 vector w_shotorg = traceorigin + dv;
134
135 // now move the vecs forward as much as requested if possible
136 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?
137 tracebox(w_shotorg, mi, ma, w_shotorg + view_forward * (vecs.x + nudge), MOVE_NORMAL, ta); // FIXME this MOVE_NORMAL part will misbehave a little in csqc
139
140 tracebox(w_shotorg, mi, ma, trueaimpoint, MOVE_NORMAL, ta);
141 float shottype = EnemyHitCheck();
142 if (shottype != SHOTTYPE_HITWORLD)
143 return shottype;
144
145#if 0
146 // FIXME WHY DOES THIS NOT WORK FOR THE ROCKET LAUNCHER?
147 // or rather, I know why, but see no fix
148 if (vlen(trace_endpos - trueaimpoint) > vlen(ma) + vlen(mi) + 1)
149 // yes, this is an ugly hack... but it seems good enough to find out whether the test hits the same place as the initial trace
151#endif
152
153 return SHOTTYPE_HITWORLD;
154}
float g_trueaim_minrange
Definition main.qh:171
vector view_up
Definition main.qh:109
vector view_right
Definition main.qh:109
vector decompressShotOrigin(int f)
Definition util.qc:1275
int EnemyHitCheck()
Definition crosshair.qc:50
const float MOVE_NOMONSTERS
float player_localentnum
#define entcs_receiver(...)
Definition ent_cs.qh:65
float vlen(vector v)
vector w_shotorg
Definition tracing.qh:19
const vector eZ
Definition vector.qh:46
const int WEP_FLAG_NOTRUEAIM
Definition weapon.qh:226

References decompressShotOrigin(), EnemyHitCheck(), entcs_receiver, entity(), eZ, g_trueaim_minrange, max_shot_distance, MOVE_NOMONSTERS, MOVE_NORMAL, player_localentnum, SHOTTYPE_HITOBSTRUCTION, SHOTTYPE_HITWORLD, STAT, trace_endpos, trueaim, trueaim_rifle, vdist, vector, view_forward, view_origin, view_right, view_up, vlen(), w_shotorg, WEP_FLAG_NOTRUEAIM, and zoomscript_caught.

Referenced by HUD_Crosshair().

Variable Documentation

◆ hitindication_crosshair_size

float hitindication_crosshair_size

Definition at line 19 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ pickup_crosshair_size

float pickup_crosshair_size

Definition at line 18 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ pickup_crosshair_time

float pickup_crosshair_time

Definition at line 18 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ SHOTTYPE_HITENEMY

const float SHOTTYPE_HITENEMY = 4

Definition at line 42 of file crosshair.qc.

Referenced by EnemyHitCheck().

◆ SHOTTYPE_HITOBSTRUCTION

const float SHOTTYPE_HITOBSTRUCTION = 2

Definition at line 40 of file crosshair.qc.

Referenced by HUD_Crosshair(), and TrueAimCheck().

◆ SHOTTYPE_HITTEAM

const float SHOTTYPE_HITTEAM = 1

Definition at line 39 of file crosshair.qc.

Referenced by EnemyHitCheck(), and HUD_Crosshair().

◆ SHOTTYPE_HITWORLD

const float SHOTTYPE_HITWORLD = 3

Definition at line 41 of file crosshair.qc.

Referenced by EnemyHitCheck(), HUD_Crosshair(), and TrueAimCheck().

◆ tag_entity

entity tag_entity

Definition at line 206 of file crosshair.qc.

◆ trueaim

entity trueaim

Definition at line 36 of file crosshair.qc.

Referenced by TrueAim_Init(), and TrueAimCheck().

◆ trueaim_rifle

entity trueaim_rifle

Definition at line 37 of file crosshair.qc.

Referenced by TrueAim_Init(), and TrueAimCheck().

◆ use_vortex_chargepool

float use_vortex_chargepool

Definition at line 20 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_alpha_goal_prev

float wcross_alpha_goal_prev

Definition at line 25 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_alpha_prev

float wcross_alpha_prev

Definition at line 23 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_changedonetime

float wcross_changedonetime

Definition at line 27 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_color_goal_prev

vector wcross_color_goal_prev

Definition at line 26 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_color_prev

vector wcross_color_prev

Definition at line 24 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_alpha_goal_prev

float wcross_name_alpha_goal_prev

Definition at line 32 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_alpha_goal_prev_prev

float wcross_name_alpha_goal_prev_prev

Definition at line 32 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_changedonetime

float wcross_name_changedonetime

Definition at line 31 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_changestarttime

float wcross_name_changestarttime

Definition at line 31 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_goal_prev

string wcross_name_goal_prev

Definition at line 29 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_name_goal_prev_prev

string wcross_name_goal_prev_prev

Definition at line 29 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_origin

vector wcross_origin

Definition at line 22 of file crosshair.qc.

Referenced by EnemyHitCheck(), and HUD_Crosshair().

◆ wcross_resolution_goal_prev

float wcross_resolution_goal_prev

Definition at line 30 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_resolution_goal_prev_prev

float wcross_resolution_goal_prev_prev

Definition at line 30 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_ring_prev

float wcross_ring_prev

Definition at line 34 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_scale_goal_prev

float wcross_scale_goal_prev

Definition at line 25 of file crosshair.qc.

Referenced by HUD_Crosshair().

◆ wcross_scale_prev

float wcross_scale_prev

Definition at line 23 of file crosshair.qc.

Referenced by HUD_Crosshair().