// 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 ; iname[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; }