#include "announcer.qh"
+#include <client/draw.qh>
#include <client/hud/panel/centerprint.qh>
#include <client/mutators/_mod.qh>
#include <common/notifications/all.qh>
#include <common/stats.qh>
#include <common/mapinfo.qh>
-
#include <common/ent_cs.qh>
-#include <common/gamemodes/gamemode/duel/duel.qh>
bool announcer_1min;
bool announcer_5min;
return;
}
- if(starttime <= time && roundstarttime != starttime) // game start time has passed
- announcer_5min = announcer_1min = false; // reset maptime announcers now as well
-
bool inround = (roundstarttime && time >= starttime);
float countdown = (inround ? roundstarttime - time : starttime - time);
float countdown_rounded = floor(0.5 + countdown);
{
if(inround)
{
- Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, countdown_rounded);
+ Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, STAT(ROUNDS_PLAYED) + 1, countdown_rounded);
Notification annce_num = Announcer_PickNumber(CNT_ROUNDSTART, countdown_rounded);
if(annce_num != NULL)
Local_Notification(MSG_ANNCE, annce_num);
* timelimit, fraglimit and game_starttime! Requires engine changes (remove STAT_TIMELIMIT
* and STAT_FRAGLIMIT to be auto-sent)
*/
- float previous_game_starttime;
+float previous_game_starttime;
void Announcer_Gamestart()
{
float startTime = STAT(GAMESTARTTIME);
setthink(announcer_countdown, Announcer_Countdown);
}
- // z411 set title
- if(time < STAT(GAMESTARTTIME) && !warmup_stage) {
- if(gametype == MAPINFO_TYPE_DUEL) {
+ if(!warmup_stage && time < STAT(GAMESTARTTIME))
+ {
+ if (gametype.m_1v1)
+ {
entity pl1 = players.sort_next;
entity pl2 = pl1.sort_next;
-
- centerprint_SetTitle(strcat(entcs_GetName(pl1.sv_entnum), " vs ", entcs_GetName(pl2.sv_entnum)));
- } else {
- centerprint_SetTitle(MapInfo_Type_ToText(gametype));
+ string pl1_name = (pl1 && pl1.team != NUM_SPECTATOR ? entcs_GetName(pl1.sv_entnum) : "???");
+ string pl2_name = (pl2 && pl2.team != NUM_SPECTATOR ? entcs_GetName(pl2.sv_entnum) : "???");
+
+ float offset = stringwidth(pl2_name, true, hud_fontsize) - stringwidth(pl1_name, true, hud_fontsize) - 1;
+ centerprint_SetTitle(sprintf("^BG%s^BG%s%s", pl1_name, _(" vs "), pl2_name), offset / 2); // Show duelers in 1v1 game mode
}
- }
-
- if(time + 5.0 < startTime) // if connecting to server while restart was active don't always play prepareforbattle
- if(time > announcer_countdown.nextthink && !warmup_stage && time < STAT(GAMESTARTTIME)) { // don't play it again if countdown was already going
- if(teamplay)
- Local_Notification(MSG_ANNCE, ANNCE_PREPARE_TEAM);
else
- Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
+ centerprint_SetTitle(strcat("^BG", MapInfo_Type_ToText(gametype)), 0); // Show game type as title
+
+ if(time + 5.0 < startTime) // if connecting to server while restart was active don't always play prepareforbattle
+ if(teamplay)
+ Local_Notification(MSG_ANNCE, ANNCE_PREPARE_TEAM);
+ else
+ Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
}
-
+
announcer_countdown.nextthink = startTime - floor(startTime - time + 0.5); //synchronize nextthink to startTime
}
}
void Announcer_Time()
{
+ static bool warmup_stage_prev;
+
if(intermission)
return;
+ if (warmup_stage != warmup_stage_prev)
+ {
+ announcer_5min = announcer_1min = false;
+ warmup_stage_prev = warmup_stage;
+ return;
+ }
+
+ float starttime = STAT(GAMESTARTTIME);
+ if(time < starttime)
+ {
+ announcer_5min = announcer_1min = false;
+ return;
+ }
+
float timeleft;
if(warmup_stage)
{
timeleft = 0;
}
else
- timeleft = max(0, STAT(TIMELIMIT) * 60 + STAT(GAMESTARTTIME) - time);
+ timeleft = max(0, STAT(TIMELIMIT) * 60 + starttime - time);
if(autocvar_cl_announcer_maptime >= 2)
ANNOUNCER_CHECKMINUTE(5);