DrawAmmoItem(pos, ammo_size, 2, true, FALSE); //show rockets
return;
}
- stat_items = getstati(STAT_ITEMS);
+ stat_items = getstati(STAT_ITEMS, 0, 24);
if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
infinite_ammo = TRUE;
for (i = 0; i < AMMO_COUNT; ++i) {
return; // nothing to display
}
- stat_items = getstati(STAT_ITEMS);
+ stat_items = getstati(STAT_ITEMS, 0, 24);
if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
infinite_ammo = TRUE;
for (i = 0; i < AMMO_COUNT; ++i) {
{
if(!autocvar_hud_panel_powerups) return;
if(spectatee_status == -1) return;
- if not(getstati(STAT_ITEMS) & (IT_STRENGTH | IT_INVINCIBLE)) return;
+ if not(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE)) return;
if (getstati(STAT_HEALTH) <= 0) return;
strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
alsoprint = (autocvar_hud_panel_notify_print || !panel_enabled); // print message to console if: notify panel disabled, or cvar to do so enabled
gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages);
- if ((msg == MSG_SUICIDE || msg == MSG_KILL || msg == MSG_KILL_ACTION) && gametype == GAME_CTS) // selfkill isn't interesting in CTS and only spams up the notify panel
+ if ((msg == MSG_SUICIDE || msg == MSG_KILL || msg == MSG_KILL_ACTION) && gametype == MAPINFO_TYPE_CTS) // selfkill isn't interesting in CTS and only spams up the notify panel
return;
if(msg == MSG_SUICIDE) {
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_score) return;
- if(spectatee_status == -1 && (gametype == GAME_RACE || gametype == GAME_CTS)) return;
+ if(spectatee_status == -1 && (gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
}
else
hud_configure_active_panel = HUD_PANEL_SCORE;
string sign;
vector distribution_color;
entity tm, pl, me;
+#ifdef COMPAT_XON050_ENGINE
me = (spectatee_status > 0) ? playerslots[spectatee_status - 1] : playerslots[player_localentnum - 1];
+#else
+ me = playerslots[player_localentnum - 1];
+#endif
if((scores_flags[ps_primary] & SFL_TIME) && !teamplay) { // race/cts record display on HUD
string timer, distrtimer;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_racetimer) return;
- if(!(gametype == GAME_RACE || gametype == GAME_CTS)) return;
+ if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
if(spectatee_status == -1) return;
}
else
void HUD_VoteWindow(void)
{
- if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE || (serverflags & SERVERFLAG_PLAYERSTATS)))
+ if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS)))
{
vote_active = 1;
if (autocvar__hud_configure)
float redflag_statuschange_elapsedtime, blueflag_statuschange_elapsedtime; // time since the status changed
float stat_items;
- stat_items = getstati(STAT_ITEMS);
+ stat_items = getstati(STAT_ITEMS, 0, 24);
redflag = (stat_items/IT_RED_FLAG_TAKEN) & 3;
blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3;
float BLINK_FREQ = 5;
float kaball_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
- float stat_items = getstati(STAT_ITEMS);
+ float stat_items = getstati(STAT_ITEMS, 0, 24);
float kaball = (stat_items/IT_KEY1) & 1;
if(kaball != kaball_prevstatus)
{
float stat_items, nb_pb_starttime, dt, p;
- stat_items = getstati(STAT_ITEMS);
+ stat_items = getstati(STAT_ITEMS, 0, 24);
nb_pb_starttime = getstatf(STAT_NB_METERSTART);
if (stat_items & IT_KEY1)
{
mod_active = 1; // race should never hide the mod icons panel
entity me;
- me = playerslots[player_localentnum - 1];
+ me = playerslots[player_localnum];
float t, score;
float f; // yet another function has this
score = me.(scores[ps_primary]);
// clientside personal record
string rr;
- if(gametype == GAME_CTS)
+ if(gametype == MAPINFO_TYPE_CTS)
rr = CTS_RECORD;
else
rr = RACE_RECORD;
drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
} else if(race_status == 2) {
- if(race_status_name == GetPlayerName(player_localentnum -1) || !race_myrank || race_myrank < rank)
+ if(race_status_name == GetPlayerName(player_localnum) || !race_myrank || race_myrank < rank)
drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankgreen", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
else
drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankyellow", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_modicons) return;
- if (gametype != GAME_CTF && gametype != GAME_KEYHUNT && gametype != GAME_NEXBALL && gametype != GAME_CTS && gametype != GAME_RACE && gametype != GAME_CA && gametype != GAME_FREEZETAG && gametype != GAME_KEEPAWAY && gametype != GAME_DOMINATION) return;
+ if (gametype != MAPINFO_TYPE_CTF && gametype != MAPINFO_TYPE_KEYHUNT && gametype != MAPINFO_TYPE_NEXBALL && gametype != MAPINFO_TYPE_CTS && gametype != MAPINFO_TYPE_RACE && gametype != MAPINFO_TYPE_CA && gametype != MAPINFO_TYPE_FREEZETAG && gametype != MAPINFO_TYPE_KEEPAWAY && gametype != MAPINFO_TYPE_DOMINATION) return;
}
else
hud_configure_active_panel = HUD_PANEL_MODICONS;
}
// these MUST be ran in order to update mod_active
- if(gametype == GAME_KEYHUNT)
+ if(gametype == MAPINFO_TYPE_KEYHUNT)
HUD_Mod_KH(pos, mySize);
- else if(gametype == GAME_CTF || autocvar__hud_configure)
+ else if(gametype == MAPINFO_TYPE_CTF || autocvar__hud_configure)
HUD_Mod_CTF(pos, mySize); // forcealpha only needed for ctf icons, as only they are shown in config mode
- else if(gametype == GAME_NEXBALL)
+ else if(gametype == MAPINFO_TYPE_NEXBALL)
HUD_Mod_NexBall(pos, mySize);
- else if(gametype == GAME_CTS || gametype == GAME_RACE)
+ else if(gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE)
HUD_Mod_Race(pos, mySize);
- else if(gametype == GAME_CA || gametype == GAME_FREEZETAG)
+ else if(gametype == MAPINFO_TYPE_CA || gametype == MAPINFO_TYPE_FREEZETAG)
HUD_Mod_CA(pos, mySize);
- else if(gametype == GAME_DOMINATION)
+ else if(gametype == MAPINFO_TYPE_DOMINATION)
HUD_Mod_Dom(pos, mySize);
- else if(gametype == GAME_KEEPAWAY)
+ else if(gametype == MAPINFO_TYPE_KEEPAWAY)
HUD_Mod_Keepaway(pos, mySize);
}
if(spectatee_status == -1)
s = _("^1Observing");
else
+#ifdef COMPAT_XON050_ENGINE
s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(spectatee_status - 1));
+#else
+ s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(player_localentnum - 1));
+#endif
drawInfoMessage(s)
if(spectatee_status == -1)
s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info"));
drawInfoMessage(s)
- if(gametype == GAME_ARENA)
+ if(gametype == MAPINFO_TYPE_ARENA)
s = _("^1Wait for your turn to join");
- else if(gametype == GAME_LMS)
+ else if(gametype == MAPINFO_TYPE_LMS)
{
entity sk;
- sk = playerslots[player_localentnum - 1];
+ sk = playerslots[player_localnum];
if(sk.(scores[ps_primary]) >= 666)
s = _("^1Match has already begun");
else if(sk.(scores[ps_primary]) > 0)
drawInfoMessage(s)
}
- if(teamplay && !intermission && !spectatee_status && gametype != GAME_CA && teamnagger)
+ if(teamplay && !intermission && !spectatee_status && gametype != MAPINFO_TYPE_CA && teamnagger)
{
float ts_min, ts_max;
tm = teams.sort_next;
{
if(!autocvar_hud_panel_physics) return;
if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return;
- if(autocvar_hud_panel_physics == 3 && !(gametype == GAME_RACE || gametype == GAME_CTS)) return;
+ if(autocvar_hud_panel_physics == 3 && !(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
}
else
hud_configure_active_panel = HUD_PANEL_PHYSICS;
}
}
+
+// ItemsTime (#17)
+//
+const float ITEMSTIME_MAXITEMS = 9;
+float ItemsTime_time[ITEMSTIME_MAXITEMS];
+string GetItemsTimePicture(float i)
+{
+ switch(i)
+ {
+ case 0: return "armor";
+ case 1: return "health";
+ case 2: return "strength";
+ case 3: return "shield";
+ case 4: return "health";
+ case 5: return "strength";
+ case 6: return "shield";
+ case 7: return "fuelregen";
+ case 8: return "jetpack";
+ default: return "";
+ }
+}
+
+void DrawItemsTimeItem(vector myPos, vector mySize, float ar, float itemcode)
+{
+ float t;
+ vector color;
+ float picalpha;
+ if(ItemsTime_time[itemcode] <= time)
+ {
+ float BLINK_FACTOR = 0.15;
+ float BLINK_BASE = 0.85;
+ float BLINK_FREQ = 5;
+ picalpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
+ }
+ else
+ {
+ picalpha = 1;
+ t = floor(ItemsTime_time[itemcode] - time + 0.999);
+ if(t < 5)
+ color = '0.7 0 0';
+ else if(t < 10)
+ color = '0.7 0.7 0';
+ else
+ color = '1 1 1';
+ }
+
+ vector picpos, numpos;
+ if(autocvar_hud_panel_itemstime_iconalign)
+ {
+ numpos = myPos;
+ picpos = myPos + eX * (ar - 1) * mySize_y;
+ }
+ else
+ {
+ numpos = myPos + eX * mySize_y;
+ picpos = myPos;
+ }
+
+ if(t > 0 && autocvar_hud_panel_itemstime_progressbar)
+ {
+ vector p_pos, p_size;
+ if(autocvar_hud_panel_itemstime_progressbar_reduced)
+ {
+ p_pos = numpos;
+ p_size = eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y;
+ }
+ else
+ {
+ p_pos = myPos;
+ p_size = mySize;
+ }
+ HUD_Panel_DrawProgressBar(p_pos, p_size, autocvar_hud_panel_itemstime_progressbar_name, t/autocvar_hud_panel_itemstime_progressbar_maxtime, 0, autocvar_hud_panel_itemstime_iconalign, color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
+
+ if(t > 0 && autocvar_hud_panel_itemstime_text)
+ drawstring_aspect(numpos, ftos(t), eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawpic_aspect_skin(picpos, GetItemsTimePicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
+}
+
+void HUD_ItemsTime(void)
+{
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_itemstime) return;
+ if(spectatee_status == 0) return;
+
+ ItemsTime_time[0] = getstatf(STAT_ARMOR_LARGE_TIME);
+ ItemsTime_time[1] = getstatf(STAT_HEALTH_MEGA_TIME);
+ ItemsTime_time[2] = getstatf(STAT_INVISIBLE_TIME);
+ ItemsTime_time[3] = getstatf(STAT_SPEED_TIME);
+ ItemsTime_time[4] = getstatf(STAT_EXTRALIFE_TIME);
+ ItemsTime_time[5] = getstatf(STAT_STRENGTH_TIME);
+ ItemsTime_time[6] = getstatf(STAT_SHIELD_TIME);
+ ItemsTime_time[7] = getstatf(STAT_FUELREGEN_TIME);
+ ItemsTime_time[8] = getstatf(STAT_JETPACK_TIME);
+ }
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_ITEMSTIME;
+
+ // do not show here mutators-dependent items
+ ItemsTime_time[0] = time + 25;
+ ItemsTime_time[1] = time + 8;
+ ItemsTime_time[2] = -1;
+ ItemsTime_time[3] = -1;
+ ItemsTime_time[4] = -1;
+ ItemsTime_time[5] = time + 0;
+ ItemsTime_time[6] = time + 4;
+ ItemsTime_time[7] = time + 19;
+ ItemsTime_time[8] = time + 46;
+ }
+
+ float i;
+ float count;
+ if (autocvar_hud_panel_itemstime_showspawned)
+ for (i = 0; i < ITEMSTIME_MAXITEMS; ++i)
+ count += (ItemsTime_time[i] > time || (ItemsTime_time[i] != -1 && ItemsTime_time[i] <= time));
+ else
+ for (i = 0; i < ITEMSTIME_MAXITEMS; ++i)
+ count += (ItemsTime_time[i] > time);
+ if (count == 0)
+ return;
+
+ HUD_Panel_UpdateCvars(itemstime);
+ HUD_Panel_ApplyFadeAlpha();
+ vector pos, mySize;
+ pos = panel_pos;
+ mySize = panel_size;
+
+ HUD_Panel_DrawBg(1);
+ if(panel_bg_padding)
+ {
+ pos += '1 1 0' * panel_bg_padding;
+ mySize -= '2 2 0' * panel_bg_padding;
+ }
+
+ float rows, columns, row, column;
+ float ar = max(2, autocvar_hud_panel_itemstime_ratio) + 1;
+ rows = mySize_y/mySize_x;
+ rows = bound(1, floor((sqrt(4 * ar * rows * count + rows * rows) + rows + 0.5) / 2), count);
+
+ columns = ceil(count/rows);
+
+ vector itemstime_size;
+ itemstime_size = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
+
+ local noref vector offset; // fteqcc sucks
+ float newSize;
+ if(itemstime_size_x/itemstime_size_y > ar)
+ {
+ newSize = ar * itemstime_size_y;
+ offset_x = itemstime_size_x - newSize;
+ pos_x += offset_x/2;
+ itemstime_size_x = newSize;
+ }
+ else
+ {
+ newSize = 1/ar * itemstime_size_x;
+ offset_y = itemstime_size_y - newSize;
+ pos_y += offset_y/2;
+ itemstime_size_y = newSize;
+ }
+
+ for (i = 0; i < ITEMSTIME_MAXITEMS; ++i) {
+ if (ItemsTime_time[i] == -1)
+ continue;
+ if (!autocvar_hud_panel_itemstime_showspawned)
+ if (ItemsTime_time[i] <= time)
+ continue;
+ DrawItemsTimeItem(pos + eX * column * (itemstime_size_x + offset_x) + eY * row * (itemstime_size_y + offset_y), itemstime_size, ar, i);
+ ++row;
+ if(row >= rows)
+ {
+ row = 0;
+ column = column + 1;
+ }
+ }
+}
+
/*
==================
Main HUD system
void HUD_Reset (void)
{
// reset gametype specific icons
- if(gametype == GAME_KEYHUNT)
+ if(gametype == MAPINFO_TYPE_KEYHUNT)
HUD_Mod_KH_Reset();
- else if(gametype == GAME_CTF)
+ else if(gametype == MAPINFO_TYPE_CTF)
HUD_Mod_CTF_Reset();
}
HUD_Physics(); break;\
case (HUD_PANEL_CENTERPRINT):\
HUD_CenterPrint(); break;\
+ case (HUD_PANEL_ITEMSTIME):\
+ HUD_ItemsTime(); break;\
} ENDS_WITH_CURLY_BRACE
void HUD_Main (void)
drawfill(eY * i * hud_configure_realGridSize_y, eY + eX * vid_conwidth, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
}
+#ifdef COMPAT_XON050_ENGINE
current_player = (spectatee_status > 0) ? spectatee_status : player_localentnum;
+#else
+ current_player = player_localentnum;
+#endif
// draw the dock
if(autocvar_hud_dock != "" && autocvar_hud_dock != "0")