2 float sb_lines; // still don't know what to do with that NOTE: check dp's sbar.c to see what that should be
13 void Sbar_FinaleOverlay()
17 void Sbar_DrawWeapon(float nr, float fade, float active)
19 vector pos, vsize, color;
22 value = (active) ? 1 : 0.6;
23 color_x = color_y = color_z = value;
25 if(sbar_hudselector == 1)
27 // width = 300, height = 100
28 const float w_width = 32, w_height = 12, w_space = 2, font_size = 8;
30 pos_x = (vid_conwidth - w_width * 9) * 0.5 + w_width * nr;
31 pos_y = (vid_conheight - w_height);
36 drawpic(pos, strcat("gfx/inv_weapon", ftos(nr)), vsize, color, value * fade * sbar_alpha_fg, 0);
42 drawstring(pos, ftos(nr+1), vsize, '1 1 0', sbar_alpha_fg, 0);
47 // width = 300, height = 100
48 const float w2_width = 300, w2_height = 100, w2_space = 10;
49 const float w2_scale = 0.4;
51 pos_x = vid_conwidth - (w2_width + w2_space) * w2_scale;
52 pos_y = (w2_height + w2_space) * w2_scale * nr + w2_space;
54 vsize_x = w2_width * w2_scale;
55 vsize_y = w2_height * w2_scale;
58 drawpic(pos, strcat("gfx/inv_weapon", ftos(nr)), vsize, color, value * fade * sbar_alpha_fg, 0);
61 void Sbar_DrawXNum (vector pos, float num, float digits, float lettersize, vector rgb, float a, float dflags)
68 vsize_x = vsize_y = lettersize;
83 str = strcat(substring("0000000000", 0, digits - strlen(tmp)), tmp);
91 str = substring(str, l-digits, 999);
94 pos_x += (digits-l) * lettersize;
98 drawpic(sbar + pos, "gfx/num_minus", vsize, rgb, a * sbar_alpha_fg, dflags);
102 for(i = 0; i < l; ++i)
104 drawpic(sbar + pos, strcat("gfx/num_", substring(str, i, 1)), vsize, rgb, a * sbar_alpha_fg, dflags);
109 float Sbar_PlayerCmp(entity l, entity r)
113 if(l.sb_team < r.sb_team)
115 else if(l.sb_team > r.sb_team)
118 if(l.sb_frags > r.sb_frags)
120 else if(l.sb_frags < r.sb_frags)
122 return (l.sb_player > r.sb_player);
124 float Sbar_TeamCmp(entity l, entity r)
126 if(l.sb_frags > r.sb_frags)
128 else if(l.sb_frags < r.sb_frags)
130 return (l.sb_player > r.sb_player);
133 void Sbar_SortFrags()
137 entity t1, t2, t3, t4, ts;
139 Sort_Remove(sortedPlayers);
140 sortedPlayers = Sort_New(Sbar_PlayerCmp);
145 Sort_Remove(sortedTeams);
153 t1.sb_team = COLOR_TEAM1;
154 t2.sb_team = COLOR_TEAM2;
155 t3.sb_team = COLOR_TEAM3;
156 t4.sb_team = COLOR_TEAM4;
157 ts.sb_team = COLOR_SPECTATOR;
159 t1.sb_player = t2.sb_player = t3.sb_player = t4.sb_player = ts.sb_player = 0;
160 t1.sb_frags = t2.sb_frags = t3.sb_frags = t4.sb_frags = 0;
161 sortedTeams = Sort_New(Sbar_TeamCmp);
163 for(i = 0; i < maxclients; ++i)
165 if(strlen(getplayerkey(i, "name")) <= 0)
170 tmp.sb_frags = stof(getplayerkey(i, "frags"));
171 if(tmp.sb_frags == -666)
172 tmp.sb_team = COLOR_SPECTATOR;
174 tmp.sb_team = GetPlayerColor(i);
178 case COLOR_TEAM1: t1.sb_frags += tmp.sb_frags; t1.sb_player++; break;
179 case COLOR_TEAM2: t2.sb_frags += tmp.sb_frags; t2.sb_player++; break;
180 case COLOR_TEAM3: t3.sb_frags += tmp.sb_frags; t3.sb_player++; break;
181 case COLOR_TEAM4: t4.sb_frags += tmp.sb_frags; t4.sb_player++; break;
182 case COLOR_SPECTATOR: ts.sb_frags += tmp.sb_frags; ts.sb_player++; break;
185 if(i == player_localentnum-1)
186 myteam = tmp.sb_team;
188 Sort_Add(sortedPlayers, tmp);
190 if(t1.sb_player) ++numteams;
191 if(t2.sb_player) ++numteams;
192 if(t3.sb_player) ++numteams;
193 if(t4.sb_player) ++numteams;
195 Sort_Add(sortedTeams, t1);
196 Sort_Add(sortedTeams, t2);
197 Sort_Add(sortedTeams, t3);
198 Sort_Add(sortedTeams, t4);
199 Sort_Add(sortedTeams, ts);
202 for(i = 0; i < maxclients; ++i)
204 if(strlen(getplayerkey(i, "name")) <= 0)
209 tmp.sb_frags = stof(getplayerkey(i, "frags"));
210 if(tmp.sb_frags == -666)
211 tmp.sb_team = COLOR_SPECTATOR;
213 tmp.sb_team = COLOR_TEAM1;
214 Sort_Add(sortedPlayers, tmp);
219 void Sbar_PrintScoreboardItem(vector pos, entity pl, float is_self, float mask)
227 str = bufstr_get(databuf, DATABUF_PING + pl.sb_player);
228 tmp_x = 4*8 - strlen(str) * 8 - 56;
229 drawstring(pos + tmp, str, '8 8 0', '0.8 0.8 0.8', 0.8, 0);
233 str = ftos(pl.sb_frags);
234 tmp_x = 4*8 - strlen(str) * 8;
235 drawstring(pos + tmp, str, '8 8 0', '1 1 1', 1, 0);
239 drawstring(pos + '40 0 0', "\x0D", '8 8 0', '1 1 1', 1, 0);
240 str = getplayerkey(pl.sb_player, "name");
241 tmp_x = 5*8 - strlen(str) * 8 + 56;
242 drawcolorcodedstring(pos + '48 0 0', str, '8 8 0', 1, 0);
244 void Sbar_PrintScoreboardTeamItem(vector pos, entity tm, vector rgb, string name)
252 str = ftos(tm.sb_frags);
253 tmp_x = 4*8 - strlen(str) * 8;
254 drawstring(pos + tmp, str, '8 8 0', rgb, 1, 0);
256 drawstring(pos + '48 0 0', name, '8 8 0', rgb, 1, 0);
259 void Sbar_DrawScoreboard()
261 // Assume: frags are already sorted
262 float xmin, xmax, ymin, ymax;
263 vector pos, teammin, teammax, rgb;
268 xmin = vid_conwidth / 4;
269 xmax = vid_conwidth - xmin;
271 ymax = vid_conheight - 50;
277 teammin = teammax = '0 0 0';
278 teammin_x = xmin - 2;
279 teammax_x = xmax - 2;
281 drawstring(pos, "ping", '8 8 0', '1 1 1', 1, 0);
282 drawstring(pos + '48 0 0', "frags", '8 8 0', '1 1 1', 1, 0);
283 drawstring(pos + '104 0 0', "name", '8 8 0', '1 1 1', 1, 0);
288 //for(t = 0; t < 4; ++t)
289 for(tm = sortedTeams.sort_next; tm; tm = tm.sort_next)
291 if(!tm.sb_player || tm.sb_team == COLOR_SPECTATOR) // no players in it?
294 teammin_y = pos_y - 2;
295 teammax_y = pos_y + 2 + 10 * (tm.sb_player+1);
296 rgb = GetTeamRGB(tm.sb_team);
297 drawfill(teammin, teammax - teammin, rgb, 0.2, DRAWFLAG_NORMAL);
298 Sbar_PrintScoreboardTeamItem(pos, tm, rgb, GetTeamName(tm.sb_team));
300 //for(i = 0; i < maxclients; ++i)
301 for(pl = sortedPlayers.sort_next; pl; pl = pl.sort_next)
303 if(pl.sb_team != tm.sb_team)
305 Sbar_PrintScoreboardItem(pos, pl, (pl.sb_player == player_localentnum - 1), 0);
312 // rgb := tempvector :)
313 rgb = pos + '0 12 0';
316 //for(i = 0; i < maxclients; ++i)
317 for(pl = sortedPlayers.sort_next; pl; pl = pl.sort_next)
319 if(pl.sb_team != COLOR_SPECTATOR)
321 //drawcolorcodedstring(pos, getplayerkey(pl.sb_player, "name"), '8 8 0', 1, 0);
322 Sbar_PrintScoreboardItem(pos, pl, (pl.sb_player == player_localentnum - 1), 1);
328 drawstring(rgb, "Spectators", '8 8 0', '1 1 1', 1, 0);
330 //for(i = 0; i < maxclients; ++i)
331 for(pl = sortedPlayers.sort_next; pl; pl = pl.sort_next)
333 if(pl.sb_team != COLOR_TEAM1)
335 //drawstring(pos, ftos(pl.sb_frags), '8 8 0', '1 1 1', 1, 0);
336 //drawcolorcodedstring(pos + '64 0 0', getplayerkey(pl.sb_player, "name"), '8 8 0', 1, 0);
337 Sbar_PrintScoreboardItem(pos, pl, (pl.sb_player == player_localentnum - 1), 0);
340 rgb = pos + '0 12 0';
343 for(pl = sortedPlayers.sort_next; pl; pl = pl.sort_next)
345 if(pl.sb_team != COLOR_SPECTATOR)
348 //drawcolorcodedstring(pos, getplayerkey(pl.sb_player, "name"), '8 8 0', 1, 0);
349 Sbar_PrintScoreboardItem(pos, pl, (pl.sb_player == player_localentnum - 1), 1);
353 drawstring(rgb, "Spectators", '8 8 0', '1 1 1', 1, 0);
358 void Sbar_Score(float margin)
360 float timelimit, timeleft, minutes, seconds, distribution, myplace;
361 vector sbar_save, place;
365 sbar_y = vid_conheight - (32+12);
376 //for(i = 0; i < 4; ++i)
377 for(tm = sortedTeams.sort_next; tm; tm = tm.sort_next)
379 if(tm.sb_team == COLOR_SPECTATOR || !tm.sb_player) // no players? don't display
382 if(tm.sb_team == myteam)
383 Sbar_DrawXNum('-128 0', tm.sb_frags, 4, 32, GetTeamRGB(tm.sb_team), 1, DRAWFLAG_NORMAL);
386 Sbar_DrawXNum(place, tm.sb_frags, 4, 12, GetTeamRGB(tm.sb_team), 1, DRAWFLAG_NORMAL);
391 // me vector := [team/connected frags id]
393 for(me = sortedPlayers.sort_next; me; me = me.sort_next)
395 if(me.sb_team != COLOR_SPECTATOR)
397 if(me.sb_player == player_localentnum - 1)
400 pl = sortedPlayers.sort_next;
404 if(pl && myplace != 1)
406 distribution = me.sb_frags - pl.sb_frags;
408 distribution = me.sb_frags - pl.sb_frags;
413 Sbar_DrawXNum('-36 -12', myplace, 3, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
414 else if(myplace == 2)
415 Sbar_DrawXNum('-36 -12', myplace, 3, 12, '1 1 0', 1, DRAWFLAG_NORMAL);
417 Sbar_DrawXNum('-36 -12', myplace, 3, 12, '1 0 0', 1, DRAWFLAG_NORMAL);
419 if(distribution >= 0)
421 Sbar_DrawXNum('-84 -12', distribution, 4, 12, ' 1 1 1', 1, DRAWFLAG_NORMAL);
422 Sbar_DrawXNum('-128 0', me.sb_frags, 4, 32, '1 1 1', 1, DRAWFLAG_NORMAL);
423 } else if(distribution >= -5)
425 Sbar_DrawXNum('-84 -12', distribution, 4, 12, ' 1 1 0', 1, DRAWFLAG_NORMAL);
426 Sbar_DrawXNum('-128 0', me.sb_frags, 4, 32, '1 1 0', 1, DRAWFLAG_NORMAL);
428 Sbar_DrawXNum('-84 -12', distribution, 4, 12, ' 1 0 0', 1, DRAWFLAG_NORMAL);
429 Sbar_DrawXNum('-128 0', me.sb_frags, 4, 32, '1 0 0', 1, DRAWFLAG_NORMAL);
432 timelimit = getstatf(STAT_TIMELIMIT);
435 timeleft = max(0, timelimit * 60 - time);
436 minutes = floor(timeleft / 60);
437 seconds = floor(timeleft - minutes*60);
440 Sbar_DrawXNum('-72 32', minutes, 3, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
441 drawpic(sbar + '-36 32', "gfx/num_colon", '12 12', '1 1 1', sbar_alpha_fg, 0);
442 Sbar_DrawXNum('-24 32', seconds, -2, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
443 } else if(minutes >= 1)
445 Sbar_DrawXNum('-72 32', minutes, 3, 12, '1 1 0', 1, DRAWFLAG_NORMAL);
446 drawpic(sbar + '-36 32', "gfx/num_colon", '12 12', '1 1 0', sbar_alpha_fg, 0);
447 Sbar_DrawXNum('-24 32', seconds, -2, 12, '1 1 0', 1, DRAWFLAG_NORMAL);
449 Sbar_DrawXNum('-24 32', seconds, -2, 12, '1 0 0', 1, DRAWFLAG_NORMAL);
452 minutes = floor(time / 60);
453 seconds = floor(time - minutes*60);
454 Sbar_DrawXNum('-72 32', minutes, 3, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
455 drawpic(sbar + '-36 32', "gfx/num_colon", '12 12', '1 1 1', sbar_alpha_fg, 0);
456 Sbar_DrawXNum('-24 32', seconds, -2, 12, '1 1 1', 1, DRAWFLAG_NORMAL);
461 void Sbar_MiniscoreItem(vector pos, entity pl, float is_self)
467 drawfill(pos + '0 1 0', '40 6 0', GetTeamRGB(pl.sb_team)*0.5, 1, DRAWFLAG_NORMAL);
469 drawfill(pos + '0 1 0', '40 6 0', '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
472 pos_x -= strlen(ftos(pl.sb_frags))*8;
473 drawstring(pos, ftos(pl.sb_frags), '8 8 0', '1 1 1', 1, DRAWFLAG_NORMAL);
478 drawstring(pos, "\x0D", '8 8 0', '1 1 1', 1, DRAWFLAG_NORMAL);
482 drawcolorcodedstring(pos, getplayerkey(pl.sb_player, "name"), '8 8 0', 1, 0);
485 void Sbar_MiniscoreTeamItem(vector pos, float color, float frags, float is_self)
491 drawfill(pos + '0 1 0', '40 6 0', GetTeamRGB(color)*0.5, 1, DRAWFLAG_NORMAL);
493 drawfill(pos + '0 1 0', '40 6 0', '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
496 pos_x -= strlen(ftos(frags))*8;
497 drawstring(pos, ftos(frags), '8 8 0', '1 1 1', 1, DRAWFLAG_NORMAL);
502 drawstring(pos, "\x0D", '8 8 0', '1 1 1', 1, DRAWFLAG_NORMAL);
506 drawstring(pos, GetTeamName(color), '8 8 0', '1 1 1', 1, DRAWFLAG_NORMAL);
509 void Sbar_MiniDeathmatchOverlay(vector pos)
511 float i, numlines, up, down;
513 float miniscoreboard_size;
514 miniscoreboard_size = cvar("sbar_miniscoreboard_size");
516 if(miniscoreboard_size == 0)
518 pos_y = vid_conheight - 8;
520 if(miniscoreboard_size < 0)
521 numlines = (vid_conheight - sbar_y + 7) / 8;
523 numlines = miniscoreboard_size;
525 // give up if there isn't enough room
526 if(pos_x >= vid_conwidth || pos_y >= vid_conheight || numlines < 1)
529 // me vector := [team/connected frags id]
530 for(me = sortedPlayers.sort_next; me; me = me.sort_next)
532 if(me.sb_player == player_localentnum - 1)
537 numlines -= numteams;
539 // figure out how many players above and below we can show
540 up = floor(numlines/2);
542 if((up + down) > numlines)
543 down = numlines - up;
546 for(pl = me.sort_next; pl && down > 0; pl = pl.sort_next)
548 if(pl.sb_team == COLOR_SPECTATOR)
550 Sbar_MiniscoreItem(pos, pl, false);
554 Sbar_MiniscoreItem(pos, me, true);
556 up += down; // if there weren't enough lines below... add them
557 for(pl = me.sort_prev; pl != sortedPlayers && up > 0; pl = pl.sort_prev)
559 if(pl.sb_team == COLOR_SPECTATOR)
561 Sbar_MiniscoreItem(pos, pl, false);
568 for(tm = sortedTeams.sort_next; tm.sort_next; tm = tm.sort_next);
569 for(; tm != sortedTeams; tm = tm.sort_prev)
571 if(!tm.sb_player || tm.sb_team == COLOR_SPECTATOR) // no players?
573 Sbar_MiniscoreTeamItem(pos, tm.sb_team, tm.sb_frags, (tm.sb_team == me.sb_team));
579 void Sbar_Draw (void)
590 Sbar_DrawScoreboard();
591 else if (intermission == 1)
593 Sbar_DrawScoreboard();
596 else if (intermission == 2)
597 Sbar_FinaleOverlay();
600 if (sb_showscores || (getstati(STAT_HEALTH) <= 0 && cvar("cl_deathscoreboard")))
602 sbar_x = (vid_conwidth - 640.0)*0.5;
603 sbar_y = vid_conheight - 47;
604 //Sbar_DrawAlphaPic (sbar_x, sbar_y, sb_scorebar, sbar_alpha_bg.value);
605 //drawpic('0 0', "gfx/scorebar", '0 0 0', '1 1 1', cvar("sbar_alpha_bg"), 0);
606 Sbar_DrawScoreboard ();
610 if (sb_lines && sbar_hudselector == 1)
612 stat_items = getstati(STAT_ITEMS);
614 sbar_x = (vid_conwidth - 320.0)*0.5;
615 sbar_y = vid_conheight - 24.0 - 16.0;
618 fade = 3.2 - 2 * (time - weapontime);
619 fade = bound(0.7, fade, 1);
622 for(i = 0; i < 8; ++i)
626 Sbar_DrawWeapon(i+1, fade, (i + 2 == activeweapon));
633 Sbar_DrawWeapon(0, fade, (activeweapon == 1));
637 x = getstati(STAT_ARMOR);
641 //Sbar_DrawStretchPic (72, 0, sb_armor[0], sbar_alpha_fg.value, 24, 24);
642 drawpic(sbar + '72 0', "gfx/sb_armor", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
644 Sbar_DrawXNum('0 0', x, 3, 24, '0 1 0', 1, 0);
646 Sbar_DrawXNum('0 0', x, 3, 24, '0.2 1 0', 1, 0);
648 Sbar_DrawXNum('0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
650 Sbar_DrawXNum('0 0', x, 3, 24, '1 1 0.2', 1, 0);
652 Sbar_DrawXNum('0 0', x, 3, 24, '0.7 0 0', 1, 0);
656 x = getstati(STAT_HEALTH);
660 //Sbar_DrawStretchPic (184, 0, sb_health, sbar_alpha_fg.value, 24, 24);
661 drawpic(sbar + '184 0', "gfx/sb_health", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
663 Sbar_DrawXNum('112 0', x, 3, 24, '0 1 0', 1, 0);
665 Sbar_DrawXNum('112 0', x, 3, 24, '0.2 1 0', 1, 0);
667 Sbar_DrawXNum('112 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
669 Sbar_DrawXNum('112 0', x, 3, 24, '1 1 0.2', 1, 0);
671 Sbar_DrawXNum('112 0', x, 3, 24, '0.7 0 0', 1, 0);
675 x = getstati(STAT_AMMO);
676 if ((stat_items & (NEX_IT_SHELLS | NEX_IT_BULLETS | NEX_IT_ROCKETS | NEX_IT_CELLS)) || x != 0)
678 if (stat_items & NEX_IT_SHELLS)
679 drawpic(sbar + '296 0', "gfx/sb_shells", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
680 else if (stat_items & NEX_IT_BULLETS)
681 drawpic(sbar + '296 0', "gfx/sb_bullets", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
682 else if (stat_items & NEX_IT_ROCKETS)
683 drawpic(sbar + '296 0', "gfx/sb_rocket", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
684 else if (stat_items & NEX_IT_CELLS)
685 drawpic(sbar + '296 0', "gfx/sb_cells", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
687 Sbar_DrawXNum('224 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
689 Sbar_DrawXNum('224 0', x, 3, 24, '0.7 0 0', 1, 0);
692 if (sbar_x + 320 + 160 <= vid_conwidth)
693 Sbar_MiniDeathmatchOverlay(sbar + '320 0');
696 // The margin can be at most 8 to support 640x480 console size:
697 // 320 + 2 * (144 + 16) = 640
702 stat_items = getstati(STAT_ITEMS);
704 sbar_x = (vid_conwidth - 640.0)*0.5;
705 sbar_y = vid_conheight - 47;
708 fade = 3 - 2 * (time - weapontime);
711 for(i = 0; i < 8; ++i)
715 Sbar_DrawWeapon(i+1, fade, (i + 2 == activeweapon));
722 Sbar_DrawWeapon(0, fade, (activeweapon == 1));
726 drawpic(sbar, "gfx/sbar", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
728 drawpic(sbar, "gfx/sbar_minimal", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
732 Sbar_DrawXNum('268 12', getstati(STAT_ARMOR), 3, 24, '0.6 0.7 0.8', 1, 0);
736 x = getstati(STAT_HEALTH);
738 Sbar_DrawXNum('82 12', x, 3, 24, '1 1 1', 1, 0);
739 else if(x <= 25 && time - floor(time) > 0.5)
740 Sbar_DrawXNum('82 12', x, 3, 24, '0.7 0 0', 1, 0);
742 Sbar_DrawXNum('81 12', x, 3, 24, '0.6 0.7 0.8', 1, 0);
744 // AK dont draw ammo for the laser
745 x = getstati(STAT_AMMO);
746 if(activeweapon != 12)
749 if (stat_items & NEX_IT_SHELLS)
750 drawpic(sbar + '519 0', "gfx/sb_shells", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
751 else if (stat_items & NEX_IT_BULLETS)
752 drawpic(sbar + '519 0', "gfx/sb_bullets", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
753 else if (stat_items & NEX_IT_ROCKETS)
754 drawpic(sbar + '519 0', "gfx/sb_rocket", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
755 else if (stat_items & NEX_IT_CELLS)
756 drawpic(sbar + '519 0', "gfx/sb_cells", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
758 Sbar_DrawXNum('447 12', x, 3, 24, '0.6 0.7 0.8', 1, 0);
760 Sbar_DrawXNum('447 12', x, 3, 24, '0.7 0 0', 1, 0);
764 drawpic(sbar, "gfx/sbar_overlay", '0 0 0', '1 1 1', 1, DRAWFLAG_MODULATE);
766 if (sbar_x + 600 + 160 <= vid_conwidth)
767 Sbar_MiniDeathmatchOverlay (sbar + '600 0');
772 // Mini scoreboard uses 12*4 per other team, that is, 144
773 // pixels when there are four teams...
774 // Nexuiz by default sets vid_conwidth to 800... makes
776 // so we need to shift it by 64 pixels to the right to fit
777 // BUT: then it overlaps with the image that gets drawn
778 // for viewsize 100! Therefore, just account for 3 teams,
779 // that is, 96 pixels mini scoreboard size, needing 16 pixels
784 if(gametype == GAME_KEYHUNT)
787 } else if(gametype == GAME_CTF)
795 void CSQC_ctf_hud(void)
797 // cvar("sbar_flagstatus_right") move the flag icons right
798 // cvar("sbar_flagstatus_pos") pixel position of the nexuiz flagstatus icons
799 float redflag, blueflag;
803 stat_items = getstati(STAT_ITEMS);
804 redflag = (stat_items/32768) & 3;
805 blueflag = (stat_items/131072) & 3;
807 pos_x = (cvar("sbar_flagstatus_right")) ? vid_conwidth - 10 - sbar_x - 64 : 10 - sbar_x;
810 if(sbar_hudselector == 1)
811 pos_y = (vid_conheight - sbar_y) - cvar("sbar_flagstatus_pos") - 64;
819 case 1: drawpic(pos, "gfx/sb_flag_red_taken", '0 0 0', '1 1 1', 1, DRAWFLAG_NORMAL); break;
820 case 2: drawpic(pos, "gfx/sb_flag_red_lost", '0 0 0', '1 1 1', 1, DRAWFLAG_NORMAL); break;
821 case 3: drawpic(pos, "gfx/sb_flag_red_carrying", '0 0 0', '1 1 1', 1, DRAWFLAG_NORMAL); break;
828 case 1: drawpic(pos, "gfx/sb_flag_blue_taken", '0 0 0', '1 1 1', 1, 0); break;
829 case 2: drawpic(pos, "gfx/sb_flag_blue_lost", '0 0 0', '1 1 1', 1, 0); break;
830 case 3: drawpic(pos, "gfx/sb_flag_blue_carrying", '0 0 0', '1 1 1', 1, 0); break;