Public feed
#722689
// Electro - wrote into a seperate function (easier to plugin)
void Sbar_ElectroDeathmatchOverlay (int start)
{
int i, k, l;
int top, bottom;
int x, y;
int xofs;
char num[128];
player_info_t *s;
int total;
int minutes;
int p;
char team[5];
int skip = 10;
int total_columns = 0, rank_width, trans_bottom, n, tens, units, fph, startx, tempx;
float brighter;
char header[128], teamcolumn[10], pingcolumn[10], plcolumn[10], fphcolumn[10], timecolumn[10], timestring[20];
extern void Surmo_Draw_String (int xh, int y, char *str);
#ifndef CLIENTONLY
// FIXME
// check number of connections instead?
if (cl.gametype == GAME_COOP && com_serveractive && !coop.value)
return;
#endif
if (largegame)
skip = 8;
// request new ping times every two second
if (cls.realtime - cl.last_ping_request > 2)
{
cl.last_ping_request = cls.realtime;
MSG_WriteByte (&cls.netchan.message, clc_stringcmd);
SZ_Print (&cls.netchan.message, "pings");
}
scr_copyeverything = 1;
scr_fullupdate = 0;
if (start)
y = start;
else
y = 40;
rank_width = scoreboard_width(); // Electro - width of the table
// can toggle columns too
if (cl.teamplay)
sprintf (teamcolumn, " Team");
else
strcpy (teamcolumn, "");
if (cl_scoreboard_ping.value)
sprintf (pingcolumn, " Ping");
else
strcpy (pingcolumn, "");
if (cl_scoreboard_pl.value)
sprintf (plcolumn, " Pl ");
else
strcpy (plcolumn, "");
if (cl_scoreboard_fph.value)
sprintf (fphcolumn, " FPH");
else
strcpy (fphcolumn, "");
if (cl_scoreboard_time.value)
sprintf (timecolumn, " Time");
else
strcpy (timecolumn, "");
if (cl_scoreboard_align.value == -1)
xofs = 20; // Electro - left
else if (cl_scoreboard_align.value == 1)
xofs = (vid.width - rank_width) - 10; // Electro - right
else
xofs = (vid.width - rank_width)/2; // Electro - center (default)
Draw_Fill (xofs - 11, y-9, rank_width + 2, 1, 0, 1); // Electro - Border - Top
Draw_Fill (xofs - 10, y-8, rank_width, 9, 1, 0.7f); // Electro - draw heading row
//sprintf (header, " Ping Pl FPH Time Frags Team Name");
if (cl.teamplay)
sprintf (header, "%s%s%s%s Frags%s Name", pingcolumn, plcolumn, fphcolumn, timecolumn, teamcolumn);
else
sprintf (header, "%s%s%s%s Frags Name", pingcolumn, plcolumn, fphcolumn, timecolumn);
Draw_String(xofs - 8, y-8, header);
Draw_Fill (xofs - 11, y+1, rank_width + 2, 1, 0, 1); // Electro - Border - Top (under header)
y += 2; // Electro - dont go over the black border, move the rest down
Draw_Fill (xofs - 11, y-10, 1, 10, 0, 1); // Electro - Border - Left
Draw_Fill ((xofs - 11) + rank_width + 1, y-10, 1, 10, 0, 1); // Electro - Border - Right
x = xofs;
startx = x;
// silly math used to align the players shirt/pants colour bar properly - value changes through-out below
tempx = xofs+rank_width-(MAX_SCOREBOARDNAME*8)-56; // touching this could prove ugly
if (!cl_scoreboard_pl.value)
tempx -= 8;
if (!cl_scoreboard_time.value)
tempx -= 8;
if (!cl_scoreboard_fph.value)
tempx += 8;
Sbar_SortFrags (true); // scores
l = scoreboardlines; // draw the text
for (i=0 ; i<l && y <= vid.height-10 ; i++)
{
k = fragsort[i];
s = &cl.players[k];
if (!s->name[0])
continue;
// Electro - moved this up, we need to use it early
// draw background
top = s->topcolor;
bottom = s->bottomcolor;
top = Sbar_ColorForMap (top);
bottom = Sbar_ColorForMap (bottom);
// render your own row slightly brighter than everyone elses (except spectators)
if ( (k == cl.playernum) && (!s->spectator) )
brighter = 0.7f;
else
brighter = 0.4f;
// Electro - render the main background transparencies behind players row
if ((cl.teamplay) && (!s->spectator))
{
// Electro - red vs blue are common teams, force the colours, regardless of enemycolor cvar
Q_strncpyz(team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
if (!(strcmp("red", team)))
trans_bottom = 72; // forced red
else if (!(strcmp("blue", team)))
trans_bottom = 216; // forced blue
else
trans_bottom = bottom;
Draw_Fill (xstart - 10, y, rank_width, skip, trans_bottom);
}
else
Draw_Fill (xofs - 10, y, rank_width, skip, 2, brighter);
Draw_Fill (xofs - 11, y, 1, skip, 0, 1); // Electro - Border - Left
Draw_Fill ((xofs - 11) + rank_width + 1, y, 1, skip, 0, 1); // Electro - Border - Right
// draw ping
p = s->ping;
if (p < 0 || p > 999)
p = 999;
if (cl_scoreboard_ping.value)
{
if (con_rankingscheme.value)
{
sprintf (num, "&c668%4i&r", p);
Surmo_Draw_String(x, y, num);
}
else
{
sprintf (num, "%4i", p);
Draw_String(x, y, num);
}
x += 32; // move it forward, ready to print next column
}
else
x -= 8; // move x back, so pl can print at x
// draw pl
p = s->pl;
if (cl_scoreboard_pl.value)
{
if (con_rankingscheme.value)
{
if (p > 25)
sprintf (num, "&c822%3i&r", p);
else
sprintf (num, "&c870%3i&r", p);
Surmo_Draw_String (x, y, num);
}
else
{
sprintf (num, "%3i", p);
if (p > 25)
Draw_Alt_String (x, y, num);
else
Draw_String (x, y, num);
}
x += 32;
}
if (s->spectator)
{
//x -= 16;
if (con_rankingscheme.value)
Surmo_Draw_String (x, y, " &c900(&c910s&c930p&c950e&c852c&c653t&c445a&c336t&c227o&c118r&c009)&r");
else
Draw_String (x, y, "(spectator)");
x += 136; // move across to print the name
// draw name
Draw_String (x, y, s->name);
y += skip;
x = startx;
continue;
}
// draw time
if (cl.intermission)
total = cl.completed_time - s->entertime;
else
total = cls.realtime - s->entertime;
minutes = (int)total/60;
n = total - minutes*60;
tens = '0' + n/10;
units = '0' + n%10;
// Electro - frags per hour count, cheers again LordHavoc
fph = total ? (int) ((float) s->frags * 3600.0 / total) : 0;
if (fph < -999) fph = -999;
if (fph > 9999) fph = 9999;
if (cl_scoreboard_time.value)
sprintf (timestring, "%2i:%c%c ", minutes, tens, units);
else
sprintf (timestring, "");
if (cl_scoreboard_fph.value)
sprintf (fphcolumn, "%4i ", fph);
else
sprintf (fphcolumn, " ");
// print the shirt/pants colour bars
if (cl.teamplay)
{
Draw_Fill (tempx-40, y, 40, 4, top, 1);
Draw_Fill (tempx-40, y+4, 40, 4, bottom, 1);
}
else
{
Draw_Fill (tempx, y, 40, 4, top, 1);
Draw_Fill (tempx, y+4, 40, 4, bottom, 1);
}
// team
if (cl.teamplay)
{
Q_strncpyz (team, Info_ValueForKey(s->userinfo, "team"), sizeof(team));
sprintf (num, "%s%s%4i %5s %s", fphcolumn, timestring, s->frags, team, s->name);
}
else
sprintf (num, "%s%s%4i %s", fphcolumn, timestring, s->frags, s->name);
Draw_String (x, y, num);
y += skip;
x = startx;
}
Draw_Fill (startx - 11, y - 1, rank_width + 2, 1, 0, 1); // Electro - Border - Bottom
if (y >= vid.height-10) // we ran over the screen size, squish
largegame = true;
}