-float waypointsprite_initialized;
-float waypointsprite_fadedistance;
-float waypointsprite_normdistance;
-float waypointsprite_minscale;
-float waypointsprite_minalpha;
-float waypointsprite_distancealphaexponent;
-float waypointsprite_timealphaexponent;
-float waypointsprite_scale;
-float waypointsprite_fontsize;
-float waypointsprite_edgefadealpha;
-float waypointsprite_edgefadescale;
-float waypointsprite_edgefadedistance;
-float waypointsprite_edgeoffset_bottom;
-float waypointsprite_edgeoffset_left;
-float waypointsprite_edgeoffset_right;
-float waypointsprite_edgeoffset_top;
-float waypointsprite_crosshairfadealpha;
-float waypointsprite_crosshairfadescale;
-float waypointsprite_crosshairfadedistance;
-float waypointsprite_distancefadealpha;
-float waypointsprite_distancefadescale;
-float waypointsprite_distancefadedistance;
-float waypointsprite_alpha;
-
-.float helpme;
-.float rule;
-.string netname; // primary picture
-.string netname2; // secondary picture
-.string netname3; // tertiary picture
-.float team; // team that gets netname2
-.float lifetime;
-.float fadetime;
-.float maxdistance;
-.float hideflags;
-.float spawntime;
-.float health;
-.float build_started;
-.float build_starthealth;
-.float build_finished;
-
-const float SPRITE_HEALTHBAR_WIDTH = 144;
-const float SPRITE_HEALTHBAR_HEIGHT = 9;
-const float SPRITE_HEALTHBAR_MARGIN = 6;
-const float SPRITE_HEALTHBAR_BORDER = 2;
-const float SPRITE_HEALTHBAR_BORDERALPHA = 1;
-const float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5;
-const float SPRITE_ARROW_SCALE = 1.0;
-const float SPRITE_HELPME_BLINK = 2;
+#include "waypointsprites.qh"
void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f)
{
// hotspot-relative coordinates of the corners
v1 = hotspot;
- v2 = hotspot + '1 0 0' * sz_x;
- v3 = hotspot + '1 0 0' * sz_x + '0 1 0' * sz_y;
- v4 = hotspot + '0 1 0' * sz_y;
+ v2 = hotspot + '1 0 0' * sz.x;
+ v3 = hotspot + '1 0 0' * sz.x + '0 1 0' * sz.y;
+ v4 = hotspot + '0 1 0' * sz.y;
// rotate them, and make them absolute
rot = -rot; // rotate by the opposite angle, as our coordinate system is reversed
up = rotate(up, rot);
owidth = width + 2 * border;
- o = o - up * (margin + border + height) + ri * (sz_x - owidth) * 0.5;
+ o = o - up * (margin + border + height) + ri * (sz.x - owidth) * 0.5;
drawquad(o - up * border, ri * owidth, up * border, "", rgb, a, f);
drawquad(o + up * height, ri * owidth, up * border, "", rgb, a, f);
float sw, w, h;
float aspect, sa, ca;
- sw = stringwidth(s, FALSE, fontsize);
+ sw = stringwidth(s, false, fontsize);
if(sw > minwidth)
w = sw;
else
w = minwidth;
- h = fontsize_y;
+ h = fontsize.y;
// how do corners work?
aspect = vid_conwidth / vid_conheight;
}
// align
- o_x -= w * algnx;
- o_y -= h * algny;
+ o.x -= w * algnx;
+ o.y -= h * algny;
// we want to be onscreen
- if(o_x < 0)
- o_x = 0;
- if(o_y < 0)
- o_y = 0;
- if(o_x > vid_conwidth - w)
- o_x = vid_conwidth - w;
- if(o_y > vid_conheight - h)
- o_x = vid_conheight - h;
+ if(o.x < 0)
+ o.x = 0;
+ if(o.y < 0)
+ o.y = 0;
+ if(o.x > vid_conwidth - w)
+ o.x = vid_conwidth - w;
+ if(o.y > vid_conheight - h)
+ o.x = vid_conheight - h;
- o_x += 0.5 * (w - sw);
+ o.x += 0.5 * (w - sw);
drawstring(o, s, fontsize, rgb, a, DRAWFLAG_NORMAL);
- o_x += 0.5 * sw;
- o_y += 0.5 * h;
+ o.x += 0.5 * sw;
+ o.y += 0.5 * h;
return o;
}
}
vector spritelookupcolor(string s, vector def)
{
+ if(substring(s, 0, 4) == "wpn-")
+ return (get_weaponinfo(stof(substring(s, 4, strlen(s)))).wpcolor);
+
switch(s)
{
case "keycarrier-friend": return '0 1 0';
- case "wpn-laser": return '1 0.5 0.5';
- case "wpn-shotgun": return '0.5 0.25 0';
- case "wpn-uzi": return '1 1 0';
- case "wpn-gl": return '1 0 0';
- case "wpn-electro": return '0 0.5 1';
- case "wpn-crylink": return '1 0.5 1';
- case "wpn-nex": return '0.5 1 1';
- case "wpn-hagar": return '1 1 0.5';
- case "wpn-rl": return '1 1 0';
- case "wpn-porto": return '0.5 0.5 0.5';
- case "wpn-minstanex": return '0.5 1 1';
- case "wpn-hookgun": return '0 0.5 0';
- case "wpn-fireball": return '1 0.5 0';
- case "wpn-hlac": return '0 1 0';
- case "wpn-campingrifle": return '0.5 1 0';
- case "wpn-minelayer": return '0.75 1 0';
default: return def;
}
}
string spritelookuptext(string s)
{
+ if(substring(s, 0, 4) == "wpn-") { return (get_weaponinfo(stof(substring(s, 4, strlen(s)))).message); }
+ if(substring(s, 0, 5) == "buff-") { return Buff_PrettyName(Buff_Type_FromSprite(s)); }
+
switch(s)
{
case "as-push": return _("Push");
case "nb-ball": return _("Ball");
case "ka-ball": return _("Ball");
case "ka-ballcarrier": return _("Ball carrier");
- case "wpn-laser": return _("Laser");
- case "wpn-shotgun": return _("Shotgun");
- case "wpn-uzi": return _("Machine Gun");
- case "wpn-gl": return _("Mortar");
- case "wpn-electro": return _("Electro");
- case "wpn-crylink": return _("Crylink");
- case "wpn-nex": return _("Nex");
- case "wpn-hagar": return _("Hagar");
- case "wpn-rl": return _("Rocket Launcher");
- case "wpn-porto": return _("Port-O-Launch");
- case "wpn-minstanex": return _("Minstanex");
- case "wpn-hookgun": return _("Hook");
- case "wpn-fireball": return _("Fireball");
- case "wpn-hlac": return _("HLAC");
- case "wpn-campingrifle": return _("Rifle");
- case "wpn-minelayer": return _("Mine Layer");
case "dom-neut": return _("Control point");
case "dom-red": return _("Control point");
case "dom-blue": return _("Control point");
case "item-shield": return _("Shield");
case "item-fuelregen": return _("Fuel regen");
case "item-jetpack": return _("Jet Pack");
- case "freezetag_frozen": return _("Frozen!");
+ case "frozen": return _("Frozen!");
case "tagged-target": return _("Tagged");
case "vehicle": return _("Vehicle");
default: return s;
}
vector fixrgbexcess(vector rgb)
{
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 1');
- if(rgb_y > 1)
+ if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '0 0 1');
- if(rgb_z > 1)
- rgb_z = 1;
+ if(rgb.z > 1)
+ rgb.z = 1;
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '0 1 0');
- if(rgb_y > 1)
- rgb_y = 1;
+ if(rgb.y > 1)
+ rgb.y = 1;
}
}
- else if(rgb_y > 1)
+ else if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 1');
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 0 1');
- if(rgb_z > 1)
- rgb_z = 1;
+ if(rgb.z > 1)
+ rgb.z = 1;
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '1 0 0');
- if(rgb_x > 1)
- rgb_x = 1;
+ if(rgb.x > 1)
+ rgb.x = 1;
}
}
- else if(rgb_z > 1)
+ else if(rgb.z > 1)
{
rgb = fixrgbexcess_move(rgb, '0 0 1', '1 1 0');
- if(rgb_x > 1)
+ if(rgb.x > 1)
{
rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 0');
- if(rgb_y > 1)
- rgb_y = 1;
+ if(rgb.y > 1)
+ rgb.y = 1;
}
- else if(rgb_y > 1)
+ else if(rgb.y > 1)
{
rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 0');
- if(rgb_x > 1)
- rgb_x = 1;
+ if(rgb.x > 1)
+ rgb.x = 1;
}
}
return rgb;
}
-float waypointsprite_count, waypointsprite_newcount;
void Draw_WaypointSprite()
{
string spriteimage;
float ang;
o = project_3d_to_2d(self.origin);
- if(o_z < 0
- || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
- || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
- || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
- || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
+ if(o.z < 0
+ || o.x < (vid_conwidth * waypointsprite_edgeoffset_left)
+ || o.y < (vid_conheight * waypointsprite_edgeoffset_top)
+ || o.x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
+ || o.y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
{
// scale it to be just in view
vector d;
float f1, f2;
d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
- ang = atan2(-d_x, -d_y);
- if(o_z < 0)
+ ang = atan2(-d.x, -d.y);
+ if(o.z < 0)
ang += M_PI;
- f1 = d_x / vid_conwidth;
- f2 = d_y / vid_conheight;
+ f1 = d.x / vid_conwidth;
+ f2 = d.y / vid_conheight;
if(max(f1, -f1) > max(f2, -f2))
{
- if(d_z * f1 > 0)
+ if(d.z * f1 > 0)
{
// RIGHT edge
d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
}
else
{
- if(d_z * f2 > 0)
+ if(d.z * f2 > 0)
{
// BOTTOM edge
d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
#else
vector d;
d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
- ang = atan2(-d_x, -d_y);
+ ang = atan2(-d.x, -d.y);
#endif
}
- o_z = 0;
+ o.z = 0;
float edgedistance_min, crosshairdistance;
- edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
- (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
- (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
- (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
+ edgedistance_min = min((o.y - (vid_conheight * waypointsprite_edgeoffset_top)),
+ (o.x - (vid_conwidth * waypointsprite_edgeoffset_left)),
+ (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o.x,
+ (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o.y);
float vidscale;
vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
- crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
+ crosshairdistance = sqrt( pow(o.x - vid_conwidth/2, 2) + pow(o.y - vid_conheight/2, 2) );
t = waypointsprite_scale * vidscale;
a *= waypointsprite_alpha;
void Ent_WaypointSprite()
{
- float sendflags, f, t;
+ int sendflags, f, t;
sendflags = ReadByte();
if(!self.spawntime)
if(f & 0x80)
{
self.(teamradar_times[self.teamradar_time_index]) = time;
- self.teamradar_time_index = mod(self.teamradar_time_index + 1, MAX_TEAMRADAR_TIMES);
+ self.teamradar_time_index = (self.teamradar_time_index + 1) % MAX_TEAMRADAR_TIMES;
}
self.teamradar_color_x = ReadByte() / 255.0;
self.teamradar_color_y = ReadByte() / 255.0;
{
float dh, n, i, o, f;
string s, sname, sframes;
- dh = search_begin(strcat("models/sprites/*_frame*", ext), FALSE, FALSE);
+ dh = search_begin(strcat("models/sprites/*_frame*", ext), false, false);
if (dh < 0)
return;
float ext_len = strlen(ext);