#include "quakedef.h"
-typedef struct
+typedef struct sbarpic_s
{
char name[32];
}
sbarpic_t *somsb_ammo[4];
sbarpic_t *somsb_armor[3];
-cvar_t showfps = {CVAR_SAVE, "showfps", "0"};
-cvar_t showtime = {CVAR_SAVE, "showtime", "0"};
-cvar_t showtime_format = {CVAR_SAVE, "showtime_format", "%H:%M:%S"};
-cvar_t showdate = {CVAR_SAVE, "showdate", "0"};
-cvar_t showdate_format = {CVAR_SAVE, "showdate_format", "%Y-%m-%d"};
-cvar_t sbar_alpha_bg = {CVAR_SAVE, "sbar_alpha_bg", "0.4"};
-cvar_t sbar_alpha_fg = {CVAR_SAVE, "sbar_alpha_fg", "1"};
+sbarpic_t *zymsb_crosshair_center;
+sbarpic_t *zymsb_crosshair_line;
+sbarpic_t *zymsb_crosshair_health;
+sbarpic_t *zymsb_crosshair_ammo;
+sbarpic_t *zymsb_crosshair_clip;
+sbarpic_t *zymsb_crosshair_background;
+sbarpic_t *zymsb_crosshair_left1;
+sbarpic_t *zymsb_crosshair_left2;
+sbarpic_t *zymsb_crosshair_right;
+
+cvar_t showfps = {CVAR_SAVE, "showfps", "0", "shows your rendered fps (frames per second)"};
+cvar_t showtime = {CVAR_SAVE, "showtime", "0", "shows current time of day (useful on screenshots)"};
+cvar_t showtime_format = {CVAR_SAVE, "showtime_format", "%H:%M:%S", "format string for time of day"};
+cvar_t showdate = {CVAR_SAVE, "showdate", "0", "shows current date (useful on screenshots)"};
+cvar_t showdate_format = {CVAR_SAVE, "showdate_format", "%Y-%m-%d", "format string for date"};
+cvar_t sbar_alpha_bg = {CVAR_SAVE, "sbar_alpha_bg", "0.4", "opacity value of the statusbar background image"};
+cvar_t sbar_alpha_fg = {CVAR_SAVE, "sbar_alpha_fg", "1", "opacity value of the statusbar weapon/item icons and numbers"};
+
+cvar_t cl_deathscoreboard = {0, "cl_deathscoreboard", "1", "shows scoreboard (+showscores) while dead"};
void Sbar_MiniDeathmatchOverlay (int x, int y);
void Sbar_DeathmatchOverlay (void);
numsbarpics = 0;
- if (gamemode == GAME_SOM)
+ if (gamemode == GAME_NETHERWORLD)
+ {
+ }
+ else if (gamemode == GAME_SOM)
{
sb_disc = Sbar_NewPic("gfx/disc");
for(i = 0; i < 9;i++)
sb_weapons[0][i] = Sbar_NewPic(va("gfx/inv_weapon%i",i));
}
+ else if (gamemode == GAME_ZYMOTIC)
+ {
+ zymsb_crosshair_center = Sbar_NewPic ("gfx/hud/crosshair_center");
+ zymsb_crosshair_line = Sbar_NewPic ("gfx/hud/crosshair_line");
+ zymsb_crosshair_health = Sbar_NewPic ("gfx/hud/crosshair_health");
+ zymsb_crosshair_clip = Sbar_NewPic ("gfx/hud/crosshair_clip");
+ zymsb_crosshair_ammo = Sbar_NewPic ("gfx/hud/crosshair_ammo");
+ zymsb_crosshair_background = Sbar_NewPic ("gfx/hud/crosshair_background");
+ zymsb_crosshair_left1 = Sbar_NewPic ("gfx/hud/crosshair_left1");
+ zymsb_crosshair_left2 = Sbar_NewPic ("gfx/hud/crosshair_left2");
+ zymsb_crosshair_right = Sbar_NewPic ("gfx/hud/crosshair_right");
+ }
else
{
sb_disc = Sbar_NewPic("gfx/disc");
void Sbar_Init (void)
{
- Cmd_AddCommand ("+showscores", Sbar_ShowScores);
- Cmd_AddCommand ("-showscores", Sbar_DontShowScores);
+ Cmd_AddCommand ("+showscores", Sbar_ShowScores, "show scoreboard");
+ Cmd_AddCommand ("-showscores", Sbar_DontShowScores, "hide scoreboard");
Cvar_RegisterVariable (&showfps);
Cvar_RegisterVariable (&showtime);
Cvar_RegisterVariable (&showtime_format);
Cvar_RegisterVariable (&showdate_format);
Cvar_RegisterVariable (&sbar_alpha_bg);
Cvar_RegisterVariable (&sbar_alpha_fg);
+ Cvar_RegisterVariable (&cl_deathscoreboard);
R_RegisterModule("sbar", sbar_start, sbar_shutdown, sbar_newmap);
}
//=============================================================================
+int Sbar_IsTeammatch()
+{
+ // currently only nexuiz uses the team score board
+ return ((gamemode == GAME_NEXUIZ)
+ && (teamplay.integer > 0));
+}
+
/*
===============
Sbar_SortFrags
*/
static int fragsort[MAX_SCOREBOARD];
static int scoreboardlines;
+
+//[515]: Sbar_GetPlayer for csqc "getplayerkey" func
+int Sbar_GetPlayer (int index)
+{
+ if(index < 0)
+ {
+ index = -1-index;
+ if(index >= scoreboardlines)
+ return -1;
+ index = fragsort[index];
+ }
+ if(index >= scoreboardlines)
+ return -1;
+ return index;
+}
+
+static scoreboard_t teams[MAX_SCOREBOARD];
+static int teamsort[MAX_SCOREBOARD];
+static int teamlines;
void Sbar_SortFrags (void)
{
- int i, j, k;
+ int i, j, k, color;
-// sort by frags
+ // sort by frags
scoreboardlines = 0;
for (i=0 ; i<cl.maxclients ; i++)
{
fragsort[j] = fragsort[j+1];
fragsort[j+1] = k;
}
+
+ teamlines = 0;
+ if (Sbar_IsTeammatch ())
+ {
+ // now sort players by teams.
+ for (i=0 ; i<scoreboardlines ; i++)
+ {
+ for (j=0 ; j<scoreboardlines-1-i ; j++)
+ {
+ if (cl.scores[fragsort[j]].colors < cl.scores[fragsort[j+1]].colors)
+ {
+ k = fragsort[j];
+ fragsort[j] = fragsort[j+1];
+ fragsort[j+1] = k;
+ }
+ }
+ }
+
+ // calculate team scores
+ color = -1;
+ for (i=0 ; i<scoreboardlines ; i++)
+ {
+ if (color != (cl.scores[fragsort[i]].colors & 15))
+ {
+ color = cl.scores[fragsort[i]].colors & 15;
+ teamlines++;
+
+ if (color == 4)
+ strcpy(teams[teamlines-1].name, "^1Red Team");
+ else if (color == 13)
+ strcpy(teams[teamlines-1].name, "^4Blue Team");
+ else if (color == 9)
+ strcpy(teams[teamlines-1].name, "^6Pink Team");
+ else if (color == 12)
+ strcpy(teams[teamlines-1].name, "^3Yellow Team");
+ else
+ strcpy(teams[teamlines-1].name, "Total Team Score");
+
+ teams[teamlines-1].frags = 0;
+ teams[teamlines-1].colors = color + 16 * color;
+ }
+
+ if (cl.scores[fragsort[i]].frags != -666)
+ {
+ // do not add spedcators
+ // (ugly hack for nexuiz)
+ teams[teamlines-1].frags += cl.scores[fragsort[i]].frags;
+ }
+ }
+
+ // now sort teams by scores.
+ for (i=0 ; i<teamlines ; i++)
+ teamsort[i] = i;
+ for (i=0 ; i<teamlines ; i++)
+ {
+ for (j=0 ; j<teamlines-1-i ; j++)
+ {
+ if (teams[teamsort[j]].frags < teams[teamsort[j+1]].frags)
+ {
+ k = teamsort[j];
+ teamsort[j] = teamsort[j+1];
+ teamsort[j+1] = k;
+ }
+ }
+ }
+ }
}
/*
int i, k, l, x, f;
char num[12];
scoreboard_t *s;
- qbyte *c;
+ unsigned char *c;
Sbar_SortFrags ();
s = &cl.scores[k];
// draw background
- c = (qbyte *)&palette_complete[(s->colors & 0xf0) + 8];
+ c = (unsigned char *)&palette_complete[(s->colors & 0xf0) + 8];
DrawQ_Fill (sbar_x + x + 10, sbar_y - 23, 28, 4, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
- c = (qbyte *)&palette_complete[((s->colors & 15)<<4) + 8];
+ c = (unsigned char *)&palette_complete[((s->colors & 15)<<4) + 8];
DrawQ_Fill (sbar_x + x + 10, sbar_y + 4 - 23, 28, 3, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
// draw number
f = s->frags;
sprintf (num, "%3i",f);
- Sbar_DrawCharacter (x + 8, -24, num[0]);
- Sbar_DrawCharacter (x + 16, -24, num[1]);
- Sbar_DrawCharacter (x + 24, -24, num[2]);
-
if (k == cl.viewentity - 1)
{
Sbar_DrawCharacter ( x + 2, -24, 16);
Sbar_DrawCharacter ( x + 32 - 4, -24, 17);
}
+ Sbar_DrawCharacter (x + 8, -24, num[0]);
+ Sbar_DrawCharacter (x + 16, -24, num[1]);
+ Sbar_DrawCharacter (x + 24, -24, num[2]);
x += 32;
}
}
{
char num[12];
scoreboard_t *s;
- qbyte *c;
+ unsigned char *c;
s = &cl.scores[cl.viewentity - 1];
// draw background
Sbar_DrawPic (112, 0, rsb_teambord);
- c = (qbyte *)&palette_complete[(s->colors & 0xf0) + 8];
+ c = (unsigned char *)&palette_complete[(s->colors & 0xf0) + 8];
DrawQ_Fill (sbar_x + 113, vid_conheight.integer-SBAR_HEIGHT+3, 22, 9, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
- c = (qbyte *)&palette_complete[((s->colors & 15)<<4) + 8];
+ c = (unsigned char *)&palette_complete[((s->colors & 15)<<4) + 8];
DrawQ_Fill (sbar_x + 113, vid_conheight.integer-SBAR_HEIGHT+12, 22, 9, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
// draw number
char fpsstring[32];
char timestring[32];
char datestring[32];
+ qboolean red = false;
fpsstring[0] = 0;
timestring[0] = 0;
datestring[0] = 0;
if (showfps.integer)
{
- int calc;
+ float calc;
if (showfps.integer > 1)
{
static double currtime, frametimes[32];
framecycle++;
framecycle &= 31;
if (showfps.integer == 2)
- calc = (int) (((double) count / total) + 0.5);
+ calc = (((double)count / total) + 0.5);
else // showfps 3, rapid update
- calc = (int) ((1.0 / (newtime - currtime)) + 0.5);
+ calc = ((1.0 / (newtime - currtime)) + 0.5);
currtime = newtime;
}
else
{
static double nexttime = 0, lasttime = 0;
- static int framerate = 0, framecount = 0;
+ static float framerate = 0;
+ static int framecount = 0;
double newtime;
newtime = Sys_DoubleTime();
if (newtime >= nexttime)
{
- framerate = (int) (framecount / (newtime - lasttime) + 0.5);
+ framerate = ((float)framecount / (newtime - lasttime) + 0.5);
lasttime = newtime;
nexttime = max(nexttime + 1, lasttime - 1);
framecount = 0;
framecount++;
calc = framerate;
}
- dpsnprintf(fpsstring, sizeof(fpsstring), "%4i fps", calc);
+
+ if ((red = (calc < 1.0f)))
+ dpsnprintf(fpsstring, sizeof(fpsstring), "%4i spf", (int)(1.0f / calc + 0.5));
+ else
+ dpsnprintf(fpsstring, sizeof(fpsstring), "%4i fps", (int)(calc + 0.5));
}
if (showtime.integer)
strlcpy(timestring, Sys_TimeString(showtime_format.string), sizeof(timestring));
{
fps_x = vid_conwidth.integer - fps_scalex * strlen(fpsstring);
DrawQ_Fill(fps_x, fps_y, fps_scalex * strlen(fpsstring), fps_scaley, 0, 0, 0, 0.5, 0);
- DrawQ_String(fps_x, fps_y, fpsstring, 0, fps_scalex, fps_scaley, 1, 1, 1, 1, 0);
+ if (red)
+ DrawQ_String(fps_x, fps_y, fpsstring, 0, fps_scalex, fps_scaley, 1, 0, 0, 1, 0);
+ else
+ DrawQ_String(fps_x, fps_y, fpsstring, 0, fps_scalex, fps_scaley, 1, 1, 1, 1, 0);
fps_y += fps_scaley;
}
if (timestring[0])
}
}
+void Sbar_DrawGauge(float x, float y, const char *picname, float width, float height, float rangey, float rangeheight, float c1, float c2, float c1r, float c1g, float c1b, float c1a, float c2r, float c2g, float c2b, float c2a, float c3r, float c3g, float c3b, float c3a, int drawflags)
+{
+ float r[5];
+ c2 = bound(0, c2, 1);
+ c1 = bound(0, c1, 1 - c2);
+ r[0] = 0;
+ r[1] = rangey + rangeheight * (c2 + c1);
+ r[2] = rangey + rangeheight * (c2);
+ r[3] = rangey;
+ r[4] = height;
+ if (r[1] > r[0])
+ DrawQ_SuperPic(x, y + r[0], picname, width, (r[1] - r[0]), 0,(r[0] / height), c3r,c3g,c3b,c3a, 1,(r[0] / height), c3r,c3g,c3b,c3a, 0,(r[1] / height), c3r,c3g,c3b,c3a, 1,(r[1] / height), c3r,c3g,c3b,c3a, drawflags);
+ if (r[2] > r[1])
+ DrawQ_SuperPic(x, y + r[1], picname, width, (r[2] - r[1]), 0,(r[1] / height), c1r,c1g,c1b,c1a, 1,(r[1] / height), c1r,c1g,c1b,c1a, 0,(r[2] / height), c1r,c1g,c1b,c1a, 1,(r[2] / height), c1r,c1g,c1b,c1a, drawflags);
+ if (r[3] > r[2])
+ DrawQ_SuperPic(x, y + r[2], picname, width, (r[3] - r[2]), 0,(r[2] / height), c2r,c2g,c2b,c2a, 1,(r[2] / height), c2r,c2g,c2b,c2a, 0,(r[3] / height), c2r,c2g,c2b,c2a, 1,(r[3] / height), c2r,c2g,c2b,c2a, drawflags);
+ if (r[4] > r[3])
+ DrawQ_SuperPic(x, y + r[3], picname, width, (r[4] - r[3]), 0,(r[3] / height), c3r,c3g,c3b,c3a, 1,(r[3] / height), c3r,c3g,c3b,c3a, 0,(r[4] / height), c3r,c3g,c3b,c3a, 1,(r[4] / height), c3r,c3g,c3b,c3a, drawflags);
+}
+
/*
===============
Sbar_Draw
===============
*/
+extern float v_dmg_time, v_dmg_roll, v_dmg_pitch;
+extern cvar_t v_kicktime;
void Sbar_Draw (void)
{
- if (cl.intermission == 1)
+ if(cl.csqc_vidvars.drawenginesbar) //[515]: csqc drawsbar
{
- Sbar_IntermissionOverlay();
- return;
- }
- else if (cl.intermission == 2)
- {
- Sbar_FinaleOverlay();
- return;
- }
-
- if (gamemode == GAME_SOM)
- {
- if (sb_showscores || cl.stats[STAT_HEALTH] <= 0)
- Sbar_DrawScoreboard ();
- else if (sb_lines)
+ if (cl.intermission == 1)
{
- // this is the top left of the sbar area
- sbar_x = 0;
- sbar_y = vid_conheight.integer - 24*3;
+ Sbar_IntermissionOverlay();
+ return;
+ }
+ else if (cl.intermission == 2)
+ {
+ Sbar_FinaleOverlay();
+ return;
+ }
- // armor
- if (cl.stats[STAT_ARMOR])
+ if (gamemode == GAME_NETHERWORLD)
+ {
+ }
+ else if (gamemode == GAME_SOM)
+ {
+ if (sb_showscores || (cl.stats[STAT_HEALTH] <= 0 && cl_deathscoreboard.integer))
+ Sbar_DrawScoreboard ();
+ else if (sb_lines)
{
- if (cl.stats[STAT_ITEMS] & IT_ARMOR3)
- Sbar_DrawPic(0, 0, somsb_armor[2]);
- else if (cl.stats[STAT_ITEMS] & IT_ARMOR2)
- Sbar_DrawPic(0, 0, somsb_armor[1]);
- else if (cl.stats[STAT_ITEMS] & IT_ARMOR1)
- Sbar_DrawPic(0, 0, somsb_armor[0]);
- Sbar_DrawNum(24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
- }
+ // this is the top left of the sbar area
+ sbar_x = 0;
+ sbar_y = vid_conheight.integer - 24*3;
- // health
- Sbar_DrawPic(0, 24, somsb_health);
- Sbar_DrawNum(24, 24, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25);
-
- // ammo icon
- if (cl.stats[STAT_ITEMS] & IT_SHELLS)
- Sbar_DrawPic(0, 48, somsb_ammo[0]);
- else if (cl.stats[STAT_ITEMS] & IT_NAILS)
- Sbar_DrawPic(0, 48, somsb_ammo[1]);
- else if (cl.stats[STAT_ITEMS] & IT_ROCKETS)
- Sbar_DrawPic(0, 48, somsb_ammo[2]);
- else if (cl.stats[STAT_ITEMS] & IT_CELLS)
- Sbar_DrawPic(0, 48, somsb_ammo[3]);
- Sbar_DrawNum(24, 48, cl.stats[STAT_AMMO], 3, false);
- if (cl.stats[STAT_SHELLS])
- Sbar_DrawNum(24 + 3*24, 48, cl.stats[STAT_SHELLS], 1, true);
- }
- }
- else if (gamemode == GAME_NEXUIZ)
- {
- sbar_y = vid_conheight.integer - 47;
- sbar_x = (vid_conwidth.integer - 640)/2;
+ // armor
+ if (cl.stats[STAT_ARMOR])
+ {
+ if (cl.stats[STAT_ITEMS] & IT_ARMOR3)
+ Sbar_DrawPic(0, 0, somsb_armor[2]);
+ else if (cl.stats[STAT_ITEMS] & IT_ARMOR2)
+ Sbar_DrawPic(0, 0, somsb_armor[1]);
+ else if (cl.stats[STAT_ITEMS] & IT_ARMOR1)
+ Sbar_DrawPic(0, 0, somsb_armor[0]);
+ Sbar_DrawNum(24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
+ }
- if (sb_showscores || cl.stats[STAT_HEALTH] <= 0)
- {
- Sbar_DrawAlphaPic (0, 0, sb_scorebar, sbar_alpha_bg.value);
- Sbar_DrawScoreboard ();
+ // health
+ Sbar_DrawPic(0, 24, somsb_health);
+ Sbar_DrawNum(24, 24, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25);
+
+ // ammo icon
+ if (cl.stats[STAT_ITEMS] & IT_SHELLS)
+ Sbar_DrawPic(0, 48, somsb_ammo[0]);
+ else if (cl.stats[STAT_ITEMS] & IT_NAILS)
+ Sbar_DrawPic(0, 48, somsb_ammo[1]);
+ else if (cl.stats[STAT_ITEMS] & IT_ROCKETS)
+ Sbar_DrawPic(0, 48, somsb_ammo[2]);
+ else if (cl.stats[STAT_ITEMS] & IT_CELLS)
+ Sbar_DrawPic(0, 48, somsb_ammo[3]);
+ Sbar_DrawNum(24, 48, cl.stats[STAT_AMMO], 3, false);
+ if (cl.stats[STAT_SHELLS])
+ Sbar_DrawNum(24 + 3*24, 48, cl.stats[STAT_SHELLS], 1, true);
+ }
}
- else if (sb_lines)
+ else if (gamemode == GAME_NEXUIZ)
{
- int i;
- double time;
- float fade;
+ sbar_y = vid_conheight.integer - 47;
+ sbar_x = (vid_conwidth.integer - 640)/2;
- // we have a max time 2s (min time = 0)
- if ((time = cl.time - cl.weapontime) < 2)
+ if (sb_showscores || (cl.stats[STAT_HEALTH] <= 0 && cl_deathscoreboard.integer))
{
- fade = (1.0 - 0.5 * time);
- fade *= fade;
- for (i = 0; i < 8;i++)
- if (cl.stats[STAT_ITEMS] & (1 << i))
- Sbar_DrawWeapon(i + 1, fade, (i + 2 == cl.stats[STAT_ACTIVEWEAPON]));
-
- if((cl.stats[STAT_ITEMS] & (1<<12)))
- Sbar_DrawWeapon(0, fade, (cl.stats[STAT_ACTIVEWEAPON] == 1));
+ Sbar_DrawAlphaPic (0, 0, sb_scorebar, sbar_alpha_bg.value);
+ Sbar_DrawScoreboard ();
}
+ else if (sb_lines)
+ {
+ int i;
+ double time;
+ float fade;
- //if (!cl.islocalgame)
- // Sbar_DrawFrags ();
+ // we have a max time 2s (min time = 0)
+ if ((time = cl.time - cl.weapontime) < 2)
+ {
+ fade = (1.0 - 0.5 * time);
+ fade *= fade;
+ for (i = 0; i < 8;i++)
+ if (cl.stats[STAT_ITEMS] & (1 << i))
+ Sbar_DrawWeapon(i + 1, fade, (i + 2 == cl.stats[STAT_ACTIVEWEAPON]));
+
+ if((cl.stats[STAT_ITEMS] & (1<<12)))
+ Sbar_DrawWeapon(0, fade, (cl.stats[STAT_ACTIVEWEAPON] == 1));
+ }
- if (sb_lines > 24)
- Sbar_DrawAlphaPic (0, 0, sb_sbar, sbar_alpha_fg.value);
- else
- Sbar_DrawAlphaPic (0, 0, sb_sbar_minimal, sbar_alpha_fg.value);
+ //if (!cl.islocalgame)
+ // Sbar_DrawFrags ();
- // special items
- if (cl.stats[STAT_ITEMS] & IT_INVULNERABILITY)
- {
- // Nexuiz has no anum pics
- //Sbar_DrawNum (36, 0, 666, 3, 1);
- // Nexuiz has no disc pic
- //Sbar_DrawPic (0, 0, sb_disc);
- }
+ if (sb_lines > 24)
+ Sbar_DrawAlphaPic (0, 0, sb_sbar, sbar_alpha_fg.value);
+ else
+ Sbar_DrawAlphaPic (0, 0, sb_sbar_minimal, sbar_alpha_fg.value);
- // armor
- Sbar_DrawXNum ((340-3*24), 12, cl.stats[STAT_ARMOR], 3, 24, 0.6,0.7,0.8,1,0);
+ // special items
+ if (cl.stats[STAT_ITEMS] & IT_INVULNERABILITY)
+ {
+ // Nexuiz has no anum pics
+ //Sbar_DrawNum (36, 0, 666, 3, 1);
+ // Nexuiz has no disc pic
+ //Sbar_DrawPic (0, 0, sb_disc);
+ }
- // health
- if(cl.stats[STAT_HEALTH] > 100)
- Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,1,1,1,1,0);
- else if(cl.stats[STAT_HEALTH] <= 25 && cl.time - (int)cl.time > 0.5)
- Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,0.7,0,0,1,0);
- else
- Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,0.6,0.7,0.8,1,0);
+ // armor
+ Sbar_DrawXNum ((340-3*24), 12, cl.stats[STAT_ARMOR], 3, 24, 0.6,0.7,0.8,1,0);
- // AK dont draw ammo for the laser
- if(cl.stats[STAT_ACTIVEWEAPON] != 12)
- {
- if (cl.stats[STAT_ITEMS] & NEX_IT_SHELLS)
- Sbar_DrawPic (519, 0, sb_ammo[0]);
- else if (cl.stats[STAT_ITEMS] & NEX_IT_BULLETS)
- Sbar_DrawPic (519, 0, sb_ammo[1]);
- else if (cl.stats[STAT_ITEMS] & NEX_IT_ROCKETS)
- Sbar_DrawPic (519, 0, sb_ammo[2]);
- else if (cl.stats[STAT_ITEMS] & NEX_IT_CELLS)
- Sbar_DrawPic (519, 0, sb_ammo[3]);
-
- if(cl.stats[STAT_AMMO] <= 10)
- Sbar_DrawXNum ((519-3*24), 12, cl.stats[STAT_AMMO], 3, 24, 0.7, 0,0,1,0);
+ // health
+ if(cl.stats[STAT_HEALTH] > 100)
+ Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,1,1,1,1,0);
+ else if(cl.stats[STAT_HEALTH] <= 25 && cl.time - (int)cl.time > 0.5)
+ Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,0.7,0,0,1,0);
else
- Sbar_DrawXNum ((519-3*24), 12, cl.stats[STAT_AMMO], 3, 24, 0.6, 0.7,0.8,1,0);
+ Sbar_DrawXNum((154-3*24),12,cl.stats[STAT_HEALTH],3,24,0.6,0.7,0.8,1,0);
- }
+ // AK dont draw ammo for the laser
+ if(cl.stats[STAT_ACTIVEWEAPON] != 12)
+ {
+ if (cl.stats[STAT_ITEMS] & NEX_IT_SHELLS)
+ Sbar_DrawPic (519, 0, sb_ammo[0]);
+ else if (cl.stats[STAT_ITEMS] & NEX_IT_BULLETS)
+ Sbar_DrawPic (519, 0, sb_ammo[1]);
+ else if (cl.stats[STAT_ITEMS] & NEX_IT_ROCKETS)
+ Sbar_DrawPic (519, 0, sb_ammo[2]);
+ else if (cl.stats[STAT_ITEMS] & NEX_IT_CELLS)
+ Sbar_DrawPic (519, 0, sb_ammo[3]);
+
+ if(cl.stats[STAT_AMMO] <= 10)
+ Sbar_DrawXNum ((519-3*24), 12, cl.stats[STAT_AMMO], 3, 24, 0.7, 0,0,1,0);
+ else
+ Sbar_DrawXNum ((519-3*24), 12, cl.stats[STAT_AMMO], 3, 24, 0.6, 0.7,0.8,1,0);
- if (sb_lines > 24)
- DrawQ_Pic(sbar_x,sbar_y,sb_sbar_overlay->name,0,0,1,1,1,1,DRAWFLAG_MODULATE);
- }
+ }
- //if (vid_conwidth.integer > 320 && cl.gametype == GAME_DEATHMATCH)
- // Sbar_MiniDeathmatchOverlay (0, 17);
- }
- else // Quake and others
- {
- sbar_y = vid_conheight.integer - SBAR_HEIGHT;
- if (cl.gametype == GAME_DEATHMATCH && gamemode != GAME_TRANSFUSION)
- sbar_x = 0;
- else
- sbar_x = (vid_conwidth.integer - 320)/2;
+ if (sb_lines > 24)
+ DrawQ_Pic(sbar_x,sbar_y,sb_sbar_overlay->name,0,0,1,1,1,1,DRAWFLAG_MODULATE);
+ }
- if (sb_lines > 24)
- {
- if (gamemode != GAME_GOODVSBAD2)
- Sbar_DrawInventory ();
- if (!cl.islocalgame && gamemode != GAME_TRANSFUSION)
- Sbar_DrawFrags ();
+ //if (vid_conwidth.integer > 320 && cl.gametype == GAME_DEATHMATCH)
+ // Sbar_MiniDeathmatchOverlay (0, 17);
}
-
- if (sb_showscores || cl.stats[STAT_HEALTH] <= 0)
+ else if (gamemode == GAME_ZYMOTIC)
{
- if (gamemode != GAME_GOODVSBAD2)
- Sbar_DrawAlphaPic (0, 0, sb_scorebar, sbar_alpha_bg.value);
- Sbar_DrawScoreboard ();
+ #if 1
+ float scale = 64.0f / 256.0f;
+ float kickoffset[3];
+ VectorClear(kickoffset);
+ if (v_dmg_time > 0)
+ {
+ kickoffset[0] = (v_dmg_time/v_kicktime.value*v_dmg_roll) * 10 * scale;
+ kickoffset[1] = (v_dmg_time/v_kicktime.value*v_dmg_pitch) * 10 * scale;
+ }
+ sbar_x = (vid_conwidth.integer - 256 * scale)/2 + kickoffset[0];
+ sbar_y = (vid_conheight.integer - 256 * scale)/2 + kickoffset[1];
+ // left1 16, 48 : 126 -66
+ // left2 16, 128 : 196 -66
+ // right 176, 48 : 196 -136
+ Sbar_DrawGauge(sbar_x + 16 * scale, sbar_y + 48 * scale, zymsb_crosshair_left1->name, 64*scale, 80*scale, 78*scale, -66*scale, cl.stats[STAT_AMMO] * (1.0 / 200.0), cl.stats[STAT_SHELLS] * (1.0 / 200.0), 0.8f,0.8f,0.0f,1.0f, 0.8f,0.5f,0.0f,1.0f, 0.3f,0.3f,0.3f,1.0f, DRAWFLAG_NORMAL);
+ Sbar_DrawGauge(sbar_x + 16 * scale, sbar_y + 128 * scale, zymsb_crosshair_left2->name, 64*scale, 80*scale, 68*scale, -66*scale, cl.stats[STAT_NAILS] * (1.0 / 200.0), cl.stats[STAT_ROCKETS] * (1.0 / 200.0), 0.8f,0.8f,0.0f,1.0f, 0.8f,0.5f,0.0f,1.0f, 0.3f,0.3f,0.3f,1.0f, DRAWFLAG_NORMAL);
+ Sbar_DrawGauge(sbar_x + 176 * scale, sbar_y + 48 * scale, zymsb_crosshair_right->name, 64*scale, 160*scale, 148*scale, -136*scale, cl.stats[STAT_ARMOR] * (1.0 / 300.0), cl.stats[STAT_HEALTH] * (1.0 / 300.0), 0.0f,0.5f,1.0f,1.0f, 1.0f,0.0f,0.0f,1.0f, 0.3f,0.3f,0.3f,1.0f, DRAWFLAG_NORMAL);
+ DrawQ_Pic(sbar_x + 120 * scale, sbar_y + 120 * scale, zymsb_crosshair_center->name, 16 * scale, 16 * scale, 1, 1, 1, 1, DRAWFLAG_NORMAL);
+ #else
+ float scale = 128.0f / 256.0f;
+ float healthstart, healthheight, healthstarttc, healthendtc;
+ float shieldstart, shieldheight, shieldstarttc, shieldendtc;
+ float ammostart, ammoheight, ammostarttc, ammoendtc;
+ float clipstart, clipheight, clipstarttc, clipendtc;
+ float kickoffset[3], offset;
+ VectorClear(kickoffset);
+ if (v_dmg_time > 0)
+ {
+ kickoffset[0] = (v_dmg_time/v_kicktime.value*v_dmg_roll) * 10 * scale;
+ kickoffset[1] = (v_dmg_time/v_kicktime.value*v_dmg_pitch) * 10 * scale;
+ }
+ sbar_x = (vid_conwidth.integer - 256 * scale)/2 + kickoffset[0];
+ sbar_y = (vid_conheight.integer - 256 * scale)/2 + kickoffset[1];
+ offset = 0; // TODO: offset should be controlled by recoil (question: how to detect firing?)
+ DrawQ_SuperPic(sbar_x + 120 * scale, sbar_y + ( 88 - offset) * scale, zymsb_crosshair_line->name, 16 * scale, 36 * scale, 0,0, 1,1,1,1, 1,0, 1,1,1,1, 0,1, 1,1,1,1, 1,1, 1,1,1,1, 0);
+ DrawQ_SuperPic(sbar_x + (132 + offset) * scale, sbar_y + 120 * scale, zymsb_crosshair_line->name, 36 * scale, 16 * scale, 0,1, 1,1,1,1, 0,0, 1,1,1,1, 1,1, 1,1,1,1, 1,0, 1,1,1,1, 0);
+ DrawQ_SuperPic(sbar_x + 120 * scale, sbar_y + (132 + offset) * scale, zymsb_crosshair_line->name, 16 * scale, 36 * scale, 1,1, 1,1,1,1, 0,1, 1,1,1,1, 1,0, 1,1,1,1, 0,0, 1,1,1,1, 0);
+ DrawQ_SuperPic(sbar_x + ( 88 - offset) * scale, sbar_y + 120 * scale, zymsb_crosshair_line->name, 36 * scale, 16 * scale, 1,0, 1,1,1,1, 1,1, 1,1,1,1, 0,0, 1,1,1,1, 0,1, 1,1,1,1, 0);
+ healthheight = cl.stats[STAT_HEALTH] * (152.0f / 300.0f);
+ shieldheight = cl.stats[STAT_ARMOR] * (152.0f / 300.0f);
+ healthstart = 204 - healthheight;
+ shieldstart = healthstart - shieldheight;
+ healthstarttc = healthstart * (1.0f / 256.0f);
+ healthendtc = (healthstart + healthheight) * (1.0f / 256.0f);
+ shieldstarttc = shieldstart * (1.0f / 256.0f);
+ shieldendtc = (shieldstart + shieldheight) * (1.0f / 256.0f);
+ ammoheight = cl.stats[STAT_SHELLS] * (62.0f / 200.0f);
+ ammostart = 114 - ammoheight;
+ ammostarttc = ammostart * (1.0f / 256.0f);
+ ammoendtc = (ammostart + ammoheight) * (1.0f / 256.0f);
+ clipheight = cl.stats[STAT_AMMO] * (122.0f / 200.0f);
+ clipstart = 190 - clipheight;
+ clipstarttc = clipstart * (1.0f / 256.0f);
+ clipendtc = (clipstart + clipheight) * (1.0f / 256.0f);
+ if (healthheight > 0) DrawQ_SuperPic(sbar_x + 0 * scale, sbar_y + healthstart * scale, zymsb_crosshair_health->name, 256 * scale, healthheight * scale, 0,healthstarttc, 1.0f,0.0f,0.0f,1.0f, 1,healthstarttc, 1.0f,0.0f,0.0f,1.0f, 0,healthendtc, 1.0f,0.0f,0.0f,1.0f, 1,healthendtc, 1.0f,0.0f,0.0f,1.0f, DRAWFLAG_NORMAL);
+ if (shieldheight > 0) DrawQ_SuperPic(sbar_x + 0 * scale, sbar_y + shieldstart * scale, zymsb_crosshair_health->name, 256 * scale, shieldheight * scale, 0,shieldstarttc, 0.0f,0.5f,1.0f,1.0f, 1,shieldstarttc, 0.0f,0.5f,1.0f,1.0f, 0,shieldendtc, 0.0f,0.5f,1.0f,1.0f, 1,shieldendtc, 0.0f,0.5f,1.0f,1.0f, DRAWFLAG_NORMAL);
+ if (ammoheight > 0) DrawQ_SuperPic(sbar_x + 0 * scale, sbar_y + ammostart * scale, zymsb_crosshair_ammo->name, 256 * scale, ammoheight * scale, 0,ammostarttc, 0.8f,0.8f,0.0f,1.0f, 1,ammostarttc, 0.8f,0.8f,0.0f,1.0f, 0,ammoendtc, 0.8f,0.8f,0.0f,1.0f, 1,ammoendtc, 0.8f,0.8f,0.0f,1.0f, DRAWFLAG_NORMAL);
+ if (clipheight > 0) DrawQ_SuperPic(sbar_x + 0 * scale, sbar_y + clipstart * scale, zymsb_crosshair_clip->name, 256 * scale, clipheight * scale, 0,clipstarttc, 1.0f,1.0f,0.0f,1.0f, 1,clipstarttc, 1.0f,1.0f,0.0f,1.0f, 0,clipendtc, 1.0f,1.0f,0.0f,1.0f, 1,clipendtc, 1.0f,1.0f,0.0f,1.0f, DRAWFLAG_NORMAL);
+ DrawQ_Pic(sbar_x + 0 * scale, sbar_y + 0 * scale, zymsb_crosshair_background->name, 256 * scale, 256 * scale, 1, 1, 1, 1, DRAWFLAG_NORMAL);
+ DrawQ_Pic(sbar_x + 120 * scale, sbar_y + 120 * scale, zymsb_crosshair_center->name, 16 * scale, 16 * scale, 1, 1, 1, 1, DRAWFLAG_NORMAL);
+ #endif
}
- else if (sb_lines)
+ else // Quake and others
{
- Sbar_DrawAlphaPic (0, 0, sb_sbar, sbar_alpha_bg.value);
+ sbar_y = vid_conheight.integer - SBAR_HEIGHT;
+ if (cl.gametype == GAME_DEATHMATCH && gamemode != GAME_TRANSFUSION)
+ sbar_x = 0;
+ else
+ sbar_x = (vid_conwidth.integer - 320)/2;
- // keys (hipnotic only)
- //MED 01/04/97 moved keys here so they would not be overwritten
- if (gamemode == GAME_HIPNOTIC)
+ if (sb_lines > 24)
{
- if (cl.stats[STAT_ITEMS] & IT_KEY1)
- Sbar_DrawPic (209, 3, sb_items[0]);
- if (cl.stats[STAT_ITEMS] & IT_KEY2)
- Sbar_DrawPic (209, 12, sb_items[1]);
+ if (gamemode != GAME_GOODVSBAD2)
+ Sbar_DrawInventory ();
+ if (!cl.islocalgame && gamemode != GAME_TRANSFUSION)
+ Sbar_DrawFrags ();
}
- // armor
- if (gamemode != GAME_GOODVSBAD2)
+
+ if (sb_showscores || (cl.stats[STAT_HEALTH] <= 0 && cl_deathscoreboard.integer))
{
- if (cl.stats[STAT_ITEMS] & IT_INVULNERABILITY)
+ if (gamemode != GAME_GOODVSBAD2)
+ Sbar_DrawAlphaPic (0, 0, sb_scorebar, sbar_alpha_bg.value);
+ Sbar_DrawScoreboard ();
+ }
+ else if (sb_lines)
+ {
+ Sbar_DrawAlphaPic (0, 0, sb_sbar, sbar_alpha_bg.value);
+
+ // keys (hipnotic only)
+ //MED 01/04/97 moved keys here so they would not be overwritten
+ if (gamemode == GAME_HIPNOTIC)
{
- Sbar_DrawNum (24, 0, 666, 3, 1);
- Sbar_DrawPic (0, 0, sb_disc);
+ if (cl.stats[STAT_ITEMS] & IT_KEY1)
+ Sbar_DrawPic (209, 3, sb_items[0]);
+ if (cl.stats[STAT_ITEMS] & IT_KEY2)
+ Sbar_DrawPic (209, 12, sb_items[1]);
}
- else
+ // armor
+ if (gamemode != GAME_GOODVSBAD2)
{
- if (gamemode == GAME_ROGUE)
+ if (cl.stats[STAT_ITEMS] & IT_INVULNERABILITY)
{
- Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
- if (cl.stats[STAT_ITEMS] & RIT_ARMOR3)
- Sbar_DrawPic (0, 0, sb_armor[2]);
- else if (cl.stats[STAT_ITEMS] & RIT_ARMOR2)
- Sbar_DrawPic (0, 0, sb_armor[1]);
- else if (cl.stats[STAT_ITEMS] & RIT_ARMOR1)
- Sbar_DrawPic (0, 0, sb_armor[0]);
+ Sbar_DrawNum (24, 0, 666, 3, 1);
+ Sbar_DrawPic (0, 0, sb_disc);
}
else
{
- Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
- if (cl.stats[STAT_ITEMS] & IT_ARMOR3)
- Sbar_DrawPic (0, 0, sb_armor[2]);
- else if (cl.stats[STAT_ITEMS] & IT_ARMOR2)
- Sbar_DrawPic (0, 0, sb_armor[1]);
- else if (cl.stats[STAT_ITEMS] & IT_ARMOR1)
- Sbar_DrawPic (0, 0, sb_armor[0]);
+ if (gamemode == GAME_ROGUE)
+ {
+ Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
+ if (cl.stats[STAT_ITEMS] & RIT_ARMOR3)
+ Sbar_DrawPic (0, 0, sb_armor[2]);
+ else if (cl.stats[STAT_ITEMS] & RIT_ARMOR2)
+ Sbar_DrawPic (0, 0, sb_armor[1]);
+ else if (cl.stats[STAT_ITEMS] & RIT_ARMOR1)
+ Sbar_DrawPic (0, 0, sb_armor[0]);
+ }
+ else
+ {
+ Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25);
+ if (cl.stats[STAT_ITEMS] & IT_ARMOR3)
+ Sbar_DrawPic (0, 0, sb_armor[2]);
+ else if (cl.stats[STAT_ITEMS] & IT_ARMOR2)
+ Sbar_DrawPic (0, 0, sb_armor[1]);
+ else if (cl.stats[STAT_ITEMS] & IT_ARMOR1)
+ Sbar_DrawPic (0, 0, sb_armor[0]);
+ }
}
}
- }
- // face
- Sbar_DrawFace ();
+ // face
+ Sbar_DrawFace ();
- // health
- Sbar_DrawNum (154, 0, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25);
+ // health
+ Sbar_DrawNum (154, 0, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25);
- // ammo icon
- if (gamemode == GAME_ROGUE)
- {
- if (cl.stats[STAT_ITEMS] & RIT_SHELLS)
- Sbar_DrawPic (224, 0, sb_ammo[0]);
- else if (cl.stats[STAT_ITEMS] & RIT_NAILS)
- Sbar_DrawPic (224, 0, sb_ammo[1]);
- else if (cl.stats[STAT_ITEMS] & RIT_ROCKETS)
- Sbar_DrawPic (224, 0, sb_ammo[2]);
- else if (cl.stats[STAT_ITEMS] & RIT_CELLS)
- Sbar_DrawPic (224, 0, sb_ammo[3]);
- else if (cl.stats[STAT_ITEMS] & RIT_LAVA_NAILS)
- Sbar_DrawPic (224, 0, rsb_ammo[0]);
- else if (cl.stats[STAT_ITEMS] & RIT_PLASMA_AMMO)
- Sbar_DrawPic (224, 0, rsb_ammo[1]);
- else if (cl.stats[STAT_ITEMS] & RIT_MULTI_ROCKETS)
- Sbar_DrawPic (224, 0, rsb_ammo[2]);
- }
- else
- {
- if (cl.stats[STAT_ITEMS] & IT_SHELLS)
- Sbar_DrawPic (224, 0, sb_ammo[0]);
- else if (cl.stats[STAT_ITEMS] & IT_NAILS)
- Sbar_DrawPic (224, 0, sb_ammo[1]);
- else if (cl.stats[STAT_ITEMS] & IT_ROCKETS)
- Sbar_DrawPic (224, 0, sb_ammo[2]);
- else if (cl.stats[STAT_ITEMS] & IT_CELLS)
- Sbar_DrawPic (224, 0, sb_ammo[3]);
- }
+ // ammo icon
+ if (gamemode == GAME_ROGUE)
+ {
+ if (cl.stats[STAT_ITEMS] & RIT_SHELLS)
+ Sbar_DrawPic (224, 0, sb_ammo[0]);
+ else if (cl.stats[STAT_ITEMS] & RIT_NAILS)
+ Sbar_DrawPic (224, 0, sb_ammo[1]);
+ else if (cl.stats[STAT_ITEMS] & RIT_ROCKETS)
+ Sbar_DrawPic (224, 0, sb_ammo[2]);
+ else if (cl.stats[STAT_ITEMS] & RIT_CELLS)
+ Sbar_DrawPic (224, 0, sb_ammo[3]);
+ else if (cl.stats[STAT_ITEMS] & RIT_LAVA_NAILS)
+ Sbar_DrawPic (224, 0, rsb_ammo[0]);
+ else if (cl.stats[STAT_ITEMS] & RIT_PLASMA_AMMO)
+ Sbar_DrawPic (224, 0, rsb_ammo[1]);
+ else if (cl.stats[STAT_ITEMS] & RIT_MULTI_ROCKETS)
+ Sbar_DrawPic (224, 0, rsb_ammo[2]);
+ }
+ else
+ {
+ if (cl.stats[STAT_ITEMS] & IT_SHELLS)
+ Sbar_DrawPic (224, 0, sb_ammo[0]);
+ else if (cl.stats[STAT_ITEMS] & IT_NAILS)
+ Sbar_DrawPic (224, 0, sb_ammo[1]);
+ else if (cl.stats[STAT_ITEMS] & IT_ROCKETS)
+ Sbar_DrawPic (224, 0, sb_ammo[2]);
+ else if (cl.stats[STAT_ITEMS] & IT_CELLS)
+ Sbar_DrawPic (224, 0, sb_ammo[3]);
+ }
- Sbar_DrawNum (248, 0, cl.stats[STAT_AMMO], 3, cl.stats[STAT_AMMO] <= 10);
+ Sbar_DrawNum (248, 0, cl.stats[STAT_AMMO], 3, cl.stats[STAT_AMMO] <= 10);
- }
+ }
- if (vid_conwidth.integer > 320 && cl.gametype == GAME_DEATHMATCH)
- {
- if (gamemode == GAME_TRANSFUSION)
- Sbar_MiniDeathmatchOverlay (0, 0);
- else
- Sbar_MiniDeathmatchOverlay (324, vid_conheight.integer - sb_lines);
+ if (vid_conwidth.integer > 320 && cl.gametype == GAME_DEATHMATCH)
+ {
+ if (gamemode == GAME_TRANSFUSION)
+ Sbar_MiniDeathmatchOverlay (0, 0);
+ else
+ Sbar_MiniDeathmatchOverlay (324, vid_conheight.integer - sb_lines);
+ }
}
}
Sbar_ShowFPS();
- R_Draw2DCrosshair();
+ if(cl.csqc_vidvars.drawcrosshair)
+ R_Draw2DCrosshair();
if (cl_prydoncursor.integer)
DrawQ_Pic((cl.cmd.cursor_screen[0] + 1) * 0.5 * vid_conwidth.integer, (cl.cmd.cursor_screen[1] + 1) * 0.5 * vid_conheight.integer, va("gfx/prydoncursor%03i", cl_prydoncursor.integer), 0, 0, 1, 1, 1, 1, 0);
*/
float Sbar_PrintScoreboardItem(scoreboard_t *s, float x, float y)
{
- qbyte *c;
+ unsigned char *c;
// draw colors behind score
- c = (qbyte *)&palette_complete[(s->colors & 0xf0) + 8];
+ c = (unsigned char *)&palette_complete[(s->colors & 0xf0) + 8];
DrawQ_Fill(x + 8, y+1, 32, 3, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
- c = (qbyte *)&palette_complete[((s->colors & 15)<<4) + 8];
+ c = (unsigned char *)&palette_complete[((s->colors & 15)<<4) + 8];
DrawQ_Fill(x + 8, y+4, 32, 3, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), c[3] * (1.0f / 255.0f) * sbar_alpha_fg.value, 0);
// print the text
//DrawQ_String(x, y, va("%c%4i %s", (s - cl.scores) == cl.playerentity - 1 ? 13 : ' ', (int) s->frags, s->name), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0);
// draw the text
x = (vid_conwidth.integer - (6 + 15) * 8) / 2;
y = 40;
+
+ if (Sbar_IsTeammatch ())
+ {
+ // show team scores first
+ for (i = 0;i < teamlines && y < vid_conheight.integer;i++)
+ y += Sbar_PrintScoreboardItem((teams + teamsort[i]), x, y);
+ y += 5;
+ }
+
for (i = 0;i < scoreboardlines && y < vid_conheight.integer;i++)
y += Sbar_PrintScoreboardItem(cl.scores + fragsort[i], x, y);
}