10 WriteHeader(MSG_ENTITY, waypointsprites);
12 sendflags = sendflags & 0x7F;
23 sendflags =
M_ARGV(2,
int);
24 hide_flags =
M_ARGV(3,
int);
38 dt =
bound(0, dt * 32, 16383);
39 WriteByte(MSG_ENTITY, (dt & 0xFF00) / 256 + 192);
46 WriteVector(MSG_ENTITY, this.
origin);
79 if (WaypointSprite_isteammate(this.
owner, WaypointSprite_getviewentity(to)))
81 float dt =
bound(0, (this.waypointsprite_helpmetime - time) / 0.1, 255);
93 void Ent_WaypointSprite(
entity this,
bool isnew);
95 Ent_WaypointSprite(
this, isnew);
99 void Ent_RemoveWaypointSprite(
entity this)
106 void Ent_WaypointSprite(
entity this,
bool isnew)
108 int sendflags = ReadByte();
114 this.draw2d = Draw_WaypointSprite;
123 if (sendflags & 0x80)
129 this.build_finished = 0;
133 t = (t - 192) * 256 + ReadByte();
135 if (this.build_finished)
138 this.build_starthealth = 0;
145 this.build_finished = 0;
151 this.
origin = ReadVector();
157 this.
team = ReadByte();
158 this.rule = ReadByte();
179 this.fadetime = ReadCoord();
180 this.maxdistance = ReadShort();
181 this.hideflags = ReadByte();
187 this.teamradar_icon = f &
BITS(7);
190 this.(teamradar_times[this.teamradar_time_index]) = time;
193 this.teamradar_color_x = ReadByte() / 255.0;
194 this.teamradar_color_y = ReadByte() / 255.0;
195 this.teamradar_color_z = ReadByte() / 255.0;
196 this.helpme = ReadByte() * 0.1;
203 this.entremove = Ent_RemoveWaypointSprite;
208 float spritelookupblinkvalue(
entity this,
string s)
210 if (s == WP_Weapon.netname) {
215 if(s == WP_FlagReturn.netname)
return 2;
222 if (s == WP_Weapon.netname || s == RADARICON_Weapon.netname)
return REGISTRY_GET(Weapons, this.
wp_extra).wpcolor;
223 if (s == WP_Item.netname || s == RADARICON_Item.netname)
return REGISTRY_GET(Items, this.
wp_extra).m_color;
231 string spritelookuptext(
entity this,
string s)
233 if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
245 FOREACH(Waypoints, it.netname == s, {
252 string spritelookupicon(
entity this,
string s)
265 FOREACH(Waypoints, it.netname == s, {
278 hotspot = -1 * hotspot;
282 v2 = hotspot +
'1 0 0' * sz.x;
283 v3 = hotspot +
'1 0 0' * sz.x +
'0 1 0' * sz.y;
284 v4 = hotspot +
'0 1 0' * sz.y;
288 v1 =
Rotate(v1, rot) + org;
289 v2 =
Rotate(v2, rot) + org;
290 v3 =
Rotate(v3, rot) + org;
291 v4 =
Rotate(v4, rot) + org;
294 R_BeginPolygon(pic, f,
true);
295 R_PolygonVertex(v1,
'0 0 0', rgb, a);
296 R_PolygonVertex(v2,
'1 0 0', rgb, a);
297 R_PolygonVertex(v3,
'1 1 0', rgb, a);
298 R_PolygonVertex(v4,
'0 1 0', rgb, a);
304 R_BeginPolygon(pic, f,
true);
305 R_PolygonVertex(o,
'0 0 0', rgb, a);
306 R_PolygonVertex(o + ri,
'1 0 0', rgb, a);
307 R_PolygonVertex(o + up + ri,
'1 1 0', rgb, a);
308 R_PolygonVertex(o + up,
'0 1 0', rgb, a);
312 void drawhealthbar(
vector org,
float rot,
float h,
vector sz,
vector hotspot,
float width,
float theheight,
float margin,
float border,
float align,
vector rgb,
float a,
vector hrgb,
float ha,
float f)
317 hotspot = -1 * hotspot;
329 owidth = width + 2 * border;
330 o = o - up * (margin + border + theheight) + ri * (sz.x - owidth) * 0.5;
332 drawquad(o - up * border, ri * owidth, up * border,
"", rgb, a, f);
333 drawquad(o + up * theheight, ri * owidth, up * border,
"", rgb, a, f);
334 drawquad(o, ri * border, up * theheight,
"", rgb, a, f);
335 drawquad(o + ri * (owidth - border), ri * border, up * theheight,
"", rgb, a, f);
336 drawquad(o + ri * (border + align * ((1 - h) * width)), ri * width * h, up * theheight,
"", hrgb, ha, f);
342 float size = 9.0 * t;
343 float border = 1.5 * t;
344 float margin = 4.0 * t;
346 float borderDiag = border *
M_SQRT2;
348 vector arrowY =
eY * (size+borderDiag);
349 vector borderX =
eX * (size+borderDiag);
350 vector borderY =
eY * (size+borderDiag+border);
353 R_PolygonVertex(o,
'0 0 0',
'0 0 0', a);
354 R_PolygonVertex(o +
Rotate(arrowY - borderX, ang),
'0 0 0',
'0 0 0', a);
355 R_PolygonVertex(o +
Rotate(borderY - borderX, ang),
'0 0 0',
'0 0 0', a);
356 R_PolygonVertex(o +
Rotate(borderY + borderX, ang),
'0 0 0',
'0 0 0', a);
357 R_PolygonVertex(o +
Rotate(arrowY + borderX, ang),
'0 0 0',
'0 0 0', a);
361 R_PolygonVertex(o +
Rotate(
eY * borderDiag, ang),
'0 0 0', rgb, a);
362 R_PolygonVertex(o +
Rotate(arrowY - arrowX, ang),
'0 0 0', rgb, a);
363 R_PolygonVertex(o +
Rotate(arrowY + arrowX, ang),
'0 0 0', rgb, a);
366 return o +
Rotate(
eY * (borderDiag+size+margin), ang);
370 vector drawsprite_TextOrIcon(
bool is_text,
vector o,
float ang,
float minwidth,
vector rgb,
float a,
vector sz,
string str)
374 float aspect, sa, ca;
390 ca =
cos(ang) * aspect;
395 algny = 0.5 - 0.5 * (f ? (ca / f) : 0);
400 algnx = 0.5 - 0.5 * (f ? (sa / f) : 0);
418 o.x += 0.5 * (w - sw);
433 vector yvec =
'0.299 0.587 0.114';
434 return rgb + dst * ((src * yvec) / (dst * yvec)) * ((rgb -
'1 1 1') * src);
440 rgb = fixrgbexcess_move(rgb,
'1 0 0',
'0 1 1');
442 rgb = fixrgbexcess_move(rgb,
'0 1 0',
'0 0 1');
443 if (rgb.z > 1) rgb.z = 1;
444 }
else if (rgb.z > 1) {
445 rgb = fixrgbexcess_move(rgb,
'0 0 1',
'0 1 0');
446 if (rgb.y > 1) rgb.y = 1;
448 }
else if (rgb.y > 1) {
449 rgb = fixrgbexcess_move(rgb,
'0 1 0',
'1 0 1');
451 rgb = fixrgbexcess_move(rgb,
'1 0 0',
'0 0 1');
452 if (rgb.z > 1) rgb.z = 1;
453 }
else if (rgb.z > 1) {
454 rgb = fixrgbexcess_move(rgb,
'0 0 1',
'1 0 0');
455 if (rgb.x > 1) rgb.x = 1;
457 }
else if (rgb.z > 1) {
458 rgb = fixrgbexcess_move(rgb,
'0 0 1',
'1 1 0');
460 rgb = fixrgbexcess_move(rgb,
'1 0 0',
'0 1 0');
461 if (rgb.y > 1) rgb.y = 1;
462 }
else if (rgb.y > 1) {
463 rgb = fixrgbexcess_move(rgb,
'0 1 0',
'1 0 0');
464 if (rgb.x > 1) rgb.x = 1;
470 void Draw_WaypointSprite(
entity this)
473 this.
alpha = (
bound(0, (this.fadetime - time) / this.
lifetime, 1) ** waypointsprite_timealphaexponent);
477 if (this.hideflags & 2)
480 if (autocvar_cl_hidewaypoints >= 2)
483 if ((this.hideflags & 1) && autocvar_cl_hidewaypoints)
489 string spriteimage =
"";
496 (autocvar_g_waypointsprite_itemstime == 1 && t ==
NUM_SPECTATOR + 1)
515 spriteimage = this.netname3;
516 else if (this.
team == t)
517 spriteimage = this.netname2;
522 error(
"Invalid waypointsprite rule!");
526 if (spriteimage ==
"")
529 ++waypointsprite_newcount;
534 if(this.maxdistance > 0)
537 float maxnormdistance =
bound(0, waypointsprite_normdistance, this.maxdistance - 1);
538 a *= (
bound(0, (this.maxdistance - dist) / (this.maxdistance - maxnormdistance), 1) ** waypointsprite_distancealphaexponent);
541 vector rgb = spritelookupcolor(
this, spriteimage, this.teamradar_color);
544 this.teamradar_color =
'1 0 1';
545 LOG_INFOF(
"WARNING: sprite of name %s has no color, using pink so you notice it", spriteimage);
549 float blink_time = (health_val >= 0) ? (health_val * 10) :
time;
550 if (blink_time -
floor(blink_time) > 0.5)
552 if (this.helpme && time < this.helpme)
553 a *= SPRITE_HELPME_BLINK;
555 a *= spritelookupblinkvalue(
this, spriteimage);
567 rgb = fixrgbexcess(rgb);
574 || o.x < (
vid_conwidth * waypointsprite_edgeoffset_left)
583 ang = atan2(-d.x, -d.y);
589 if (f1 == 0) { f1 = 0.000001; }
590 if (f2 == 0) { f2 = 0.000001; }
592 if (
max(f1, -f1) >
max(f2, -f2)) {
595 d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
598 d = d * (-(0.5 - waypointsprite_edgeoffset_left) / f1);
603 d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
606 d = d * (-(0.5 - waypointsprite_edgeoffset_top) / f2);
619 ang = atan2(-d.x, -d.y);
624 float edgedistance_min =
min((o.y - (vid_conheight * waypointsprite_edgeoffset_top)),
625 (o.x - (
vid_conwidth * waypointsprite_edgeoffset_left)),
627 (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o.y);
629 float crosshairdistance =
sqrt( ((o.x -
vid_conwidth/2) ** 2) + ((o.y - vid_conheight/2) ** 2) );
631 t = waypointsprite_scale;
632 a *= waypointsprite_alpha;
635 a = a * (1 - (1 - waypointsprite_distancefadealpha) * (
bound(0, dist/waypointsprite_distancefadedistance, 1)));
636 t = t * (1 - (1 - waypointsprite_distancefadescale) * (
bound(0, dist/waypointsprite_distancefadedistance, 1)));
638 if (edgedistance_min < waypointsprite_edgefadedistance) {
639 a = a * (1 - (1 - waypointsprite_edgefadealpha) * (1 -
bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
640 t = t * (1 - (1 - waypointsprite_edgefadescale) * (1 -
bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
642 if (crosshairdistance < waypointsprite_crosshairfadedistance) {
643 a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 -
bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
644 t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 -
bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
647 if (this.build_finished)
649 if (time < this.build_finished + 0.25)
651 if (time < this.build_started)
653 else if (time < this.build_finished)
654 SetResourceExplicit(
this,
RES_HEALTH, (time - this.build_started) / (this.build_finished - this.build_started) * (1 - this.build_starthealth) + this.build_starthealth);
662 o = drawspritearrow(o, ang, rgb, a, SPRITE_ARROW_SCALE * t);
666 if (!autocvar_g_waypointsprite_text)
668 string spr_icon = spritelookupicon(
this, spriteimage);
670 bool icon_found = !(!spr_icon || spr_icon ==
"");
676 pic =
strcat(
"gfx/hud/default/", spr_icon);
690 txt = spritelookuptext(
this, spriteimage);
691 if (this.helpme && time < this.helpme)
692 txt = sprintf(_(
"%s needing help!"), txt);
693 if (autocvar_g_waypointsprite_uppercase)
694 txt = strtoupper(txt);
696 sz = waypointsprite_fontsize *
'1 1 0';
702 txt_color = ((autocvar_g_waypointsprite_iconcolor) ?
'1 1 1' : rgb);
703 sz = autocvar_g_waypointsprite_iconsize *
'1 1 0';
709 float align = 0, marg;
710 if (this.build_finished)
715 marg = -(SPRITE_HEALTHBAR_MARGIN + SPRITE_HEALTHBAR_HEIGHT + 2 * SPRITE_HEALTHBAR_BORDER) * t - 0.5 * sz.y;
717 marg = SPRITE_HEALTHBAR_MARGIN * t + 0.5 * sz.y;
719 float minwidth = (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t;
720 o = drawsprite_TextOrIcon(is_text, o, ang, minwidth, txt_color, a, sz, txt);
727 SPRITE_HEALTHBAR_WIDTH * t,
728 SPRITE_HEALTHBAR_HEIGHT * t,
730 SPRITE_HEALTHBAR_BORDER * t,
733 a * SPRITE_HEALTHBAR_BORDERALPHA,
735 a * SPRITE_HEALTHBAR_HEALTHALPHA,
741 drawsprite_TextOrIcon(is_text, o, ang, 0, txt_color, a, sz, txt);
747 void WaypointSprite_Load_Frames(
string ext)
751 int ext_len =
strlen(ext);
753 for (
int i = 0; i < n; ++i)
761 int f =
stof(sframes) + 1;
767 void WaypointSprite_Load();
769 WaypointSprite_Load();
770 WaypointSprite_Load_Frames(
".tga");
771 WaypointSprite_Load_Frames(
".jpg");
773 void WaypointSprite_Load()
776 waypointsprite_normdistance = autocvar_g_waypointsprite_normdistance;
777 waypointsprite_minscale = autocvar_g_waypointsprite_minscale;
778 waypointsprite_minalpha = autocvar_g_waypointsprite_minalpha;
779 waypointsprite_distancealphaexponent = autocvar_g_waypointsprite_distancealphaexponent;
780 waypointsprite_timealphaexponent = autocvar_g_waypointsprite_timealphaexponent;
781 waypointsprite_scale = autocvar_g_waypointsprite_scale;
782 waypointsprite_fontsize = autocvar_g_waypointsprite_fontsize;
783 waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
784 waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
785 waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
786 waypointsprite_edgeoffset_bottom = autocvar_g_waypointsprite_edgeoffset_bottom;
787 waypointsprite_edgeoffset_left = autocvar_g_waypointsprite_edgeoffset_left;
788 waypointsprite_edgeoffset_right = autocvar_g_waypointsprite_edgeoffset_right;
789 waypointsprite_edgeoffset_top = autocvar_g_waypointsprite_edgeoffset_top;
790 waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha;
791 waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale;
792 waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;
793 waypointsprite_distancefadealpha = autocvar_g_waypointsprite_distancefadealpha;
794 waypointsprite_distancefadescale = autocvar_g_waypointsprite_distancefadescale;
795 waypointsprite_distancefadedistance = waypointsprite_fadedistance * autocvar_g_waypointsprite_distancefadedistancemultiplier;
798 waypointsprite_count = waypointsprite_newcount;
799 waypointsprite_newcount = 0;
806 string m1 = _m1.netname;
807 string m2 = _m2.netname;
808 string m3 = _m3.netname;
826 void WaypointSprite_UpdateHealth(
entity e,
float f)
828 f =
bound(0, f, e.max_health);
829 float step = e.max_health / 40;
838 void WaypointSprite_UpdateMaxHealth(
entity e,
float f)
840 if (f != e.max_health || e.pain_finished)
848 void WaypointSprite_UpdateBuildFinished(
entity e,
float f)
850 if (f != e.pain_finished || e.max_health)
867 void WaypointSprite_UpdateRule(
entity e,
float t,
float r)
879 int new_cnt = (e.cnt &
BIT(7)) | (i &
BITS(7));
880 if (new_cnt != e.cnt || col != e.colormod)
888 void WaypointSprite_Ping(
entity e)
891 if (time < e.waypointsprite_pingtime)
return;
892 e.waypointsprite_pingtime = time + 0.3;
898 void WaypointSprite_HelpMePing(
entity e)
900 WaypointSprite_Ping(e);
901 e.waypointsprite_helpmetime = time + waypointsprite_deployed_lifetime;
905 void WaypointSprite_FadeOutIn(
entity e,
float t)
910 e.teleport_time = time + t;
912 else if (t < (e.teleport_time - time))
918 float current_fadetime = e.teleport_time -
time;
919 e.teleport_time = time + t;
921 e.fade_time = -e.fade_time;
922 e.fade_time = e.fade_time * t / current_fadetime;
928 void WaypointSprite_Init()
930 waypointsprite_limitedrange = autocvar_sv_waypointsprite_limitedrange;
931 waypointsprite_deployed_lifetime = autocvar_sv_waypointsprite_deployed_lifetime;
932 waypointsprite_deadlifetime = autocvar_sv_waypointsprite_deadlifetime;
935 void WaypointSprite_Kill(
entity wp)
938 if (wp.owner) wp.owner.(wp.owned_by_field) =
NULL;
942 void WaypointSprite_Disown(
entity wp,
float fadetime)
945 if (wp.classname !=
"sprite_waypoint")
947 backtrace(
"Trying to disown a non-waypointsprite");
952 if (wp.exteriormodeltoclient == wp.owner)
953 wp.exteriormodeltoclient =
NULL;
954 wp.owner.(wp.owned_by_field) =
NULL;
957 WaypointSprite_FadeOutIn(wp, fadetime);
961 void WaypointSprite_Think(
entity this)
963 bool doremove =
false;
974 WaypointSprite_Kill(
this);
988 if (!autocvar_sv_itemstime)
995 if (this.
team != view.team)
1017 return e2.team == e.team;
1021 bool WaypointSprite_Customize(
entity this,
entity client)
1026 entity e = WaypointSprite_getviewentity(client);
1031 return this.waypointsprite_visible_for_player(
this, client, e);
1034 bool WaypointSprite_SendEntity(
entity this,
entity to,
float sendflags);
1036 void WaypointSprite_Reset(
entity this)
1041 WaypointSprite_Kill(
this);
1044 entity WaypointSprite_Spawn(
1046 float _lifetime,
float maxdistance,
1054 entity wp =
new(sprite_waypoint);
1055 wp.fade_time = _lifetime;
1057 _lifetime = -_lifetime;
1058 wp.teleport_time = time + _lifetime;
1059 wp.exteriormodeltoclient = ref;
1070 wp.currentammo = hideable;
1074 delete(own.(ownfield));
1075 own.(ownfield) = wp;
1076 wp.owned_by_field = ownfield;
1078 wp.fade_rate = maxdistance;
1079 setthink(wp, WaypointSprite_Think);
1080 wp.nextthink =
time;
1081 wp.model1 = spr.netname;
1082 setcefc(wp, WaypointSprite_Customize);
1083 wp.waypointsprite_visible_for_player = WaypointSprite_visible_for_player;
1084 wp.reset2 = WaypointSprite_Reset;
1086 wp.colormod = spr.m_color;
1087 Net_LinkEntity(wp,
false, 0, WaypointSprite_SendEntity);
1091 entity WaypointSprite_SpawnFixed(
1099 return WaypointSprite_Spawn(spr, 0, 0,
NULL, ofs,
NULL, 0, own, ownfield,
true, icon);
1102 entity WaypointSprite_DeployFixed(
1117 maxdistance = waypointsprite_limitedrange;
1120 return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance,
NULL, ofs,
NULL, t, player, waypointsprite_deployed_fixed,
false, icon);
1123 entity WaypointSprite_DeployPersonal(
1130 return WaypointSprite_Spawn(spr, 0, 0,
NULL, ofs,
NULL, 0, player, waypointsprite_deployed_personal,
false, icon);
1133 entity WaypointSprite_Attach(
1141 if (player.waypointsprite_attachedforcarrier)
1149 maxdistance = waypointsprite_limitedrange;
1152 return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, player,
'0 0 64',
NULL, t, player, waypointsprite_attached,
false, icon);
1155 entity WaypointSprite_AttachCarrier(
1161 WaypointSprite_Kill(carrier.waypointsprite_attached);
1162 entity e = WaypointSprite_Spawn(spr, 0, 0, carrier,
'0 0 64',
NULL, carrier.team, carrier, waypointsprite_attachedforcarrier,
false, icon);
1171 void WaypointSprite_DetachCarrier(
entity carrier)
1173 WaypointSprite_Disown(carrier.waypointsprite_attachedforcarrier, waypointsprite_deadlifetime);
1176 void WaypointSprite_ClearPersonal(
entity this)
1178 WaypointSprite_Kill(this.waypointsprite_deployed_personal);
1181 void WaypointSprite_ClearOwned(
entity this)
1183 WaypointSprite_Kill(this.waypointsprite_deployed_fixed);
1184 WaypointSprite_Kill(this.waypointsprite_deployed_personal);
1185 WaypointSprite_Kill(this.waypointsprite_attached);
1188 void WaypointSprite_PlayerDead(
entity this)
1190 WaypointSprite_Disown(this.waypointsprite_attached, waypointsprite_deadlifetime);
1191 WaypointSprite_DetachCarrier(
this);
1194 void WaypointSprite_PlayerGone(
entity this)
1196 WaypointSprite_Disown(this.waypointsprite_deployed_fixed, waypointsprite_deadlifetime);
1197 WaypointSprite_Kill(this.waypointsprite_deployed_personal);
1198 WaypointSprite_Disown(this.waypointsprite_attached, waypointsprite_deadlifetime);
1199 WaypointSprite_DetachCarrier(
this);
const int SPRITERULE_SPECTATOR
const int MAX_TEAMRADAR_TIMES
void InterpolateOrigin_Note(entity this)
ERASEABLE void db_put(int db, string key, string value)
#define draw_endBoldFont()
#define REGISTER_NET_LINKED(id)
vector project_3d_to_2d(vector vec)
void InterpolateOrigin_Undo(entity this)
snap origin to iorigin2 (actual origin)
bool SetResourceExplicit(entity e, Resource res_type, float amount)
Sets the resource amount of an entity without calling any hooks.
const int SPRITERULE_DEFAULT
float autocvar_hud_panel_fg_alpha
#define draw_beginBoldFont()
#define REGISTRY_GET(id, i)
#define NET_HANDLE(id, param)
#define STATIC_INIT(func)
during worldspawn
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1
const int SPRITERULE_TEAMPLAY
const float DRAWFLAG_ADDITIVE
float autocvar__menu_alpha
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
entity exteriormodeltoclient
spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2 f1 f1points f2
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
int wp_extra
Additional networked waypoint state, used for items, weapons, buffs.
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const float DRAWFLAG_NORMAL
ERASEABLE string db_get(int db, string key)
float race_mycheckpointtime
vector(float skel, float bonenum) _skel_get_boneabs_hidden
float race_checkpointtime
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
#define get_monsterinfo(i)
#define MUTATOR_CALLHOOK(id,...)
REGISTER_MUTATOR(waypointsprites, true)
ERASEABLE vector Rotate(vector v, float a)
float autocvar_g_balance_armor_blockpercent
IntrusiveList g_radaricons
#define FOREACH(list, cond, body)
void InterpolateOrigin_Do(entity this)
set origin based on iorigin1 (old pos), iorigin2 (desired pos), and time
const int WEP_FLAG_SUPERWEAPON
IntrusiveList g_drawables_2d