]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'z411/new_centerprint' into 'master'
authorbones_was_here <bones_was_here@xa.org.au>
Mon, 28 Mar 2022 21:27:19 +0000 (21:27 +0000)
committerbones_was_here <bones_was_here@xa.org.au>
Mon, 28 Mar 2022 21:27:19 +0000 (21:27 +0000)
Centerprint overhaul

See merge request xonotic/xonotic-data.pk3dir!984

14 files changed:
_hud_common.cfg
_hud_descriptions.cfg
hud_luma.cfg
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_minimal_xhair.cfg
hud_luminos_old.cfg
hud_nexuiz.cfg
qcsrc/client/announcer.qc
qcsrc/client/hud/panel/centerprint.qc
qcsrc/client/hud/panel/centerprint.qh
qcsrc/common/notifications/all.inc
qcsrc/common/stats.qh
qcsrc/server/round_handler.qc

index 83eb2490dc132bd8fc19d8f5650f1ceb816e0865..5fdba67215a5ebebce6c9bb2c89e8d92bbd9de9d 100644 (file)
@@ -119,16 +119,14 @@ seta hud_panel_infomessages_group_time 6 "number of seconds a message of a group
 seta hud_panel_infomessages_group_fadetime 0.4 "group message fade in/out time"
 
 seta hud_panel_centerprint_time 3 "message duration (NOTE: certain messages have a fixed duration)"
-seta hud_panel_centerprint_fade_in 0.15 "how long a message takes to fade in"
-seta hud_panel_centerprint_fade_in_short 0 " "how long a message that lasts 2 or less seconds takes to fade in"
+seta hud_panel_centerprint_fade_in 0 "how long a message takes to fade in"
 seta hud_panel_centerprint_fade_out 0.15 "how long a message takes to fade out (this time is included in the message duration and can't be > 5)"
 seta hud_panel_centerprint_fade_subsequent 1 "enable extra fading effects for each additional message, so that the more messages you have the more they become faded out"
 seta hud_panel_centerprint_fade_subsequent_passone 3 "division factor for the first pass for alpha fading, with 2 all messages after the first have half alpha"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha 0.5 "minimum factor that the first pass can fade to"
 seta hud_panel_centerprint_fade_subsequent_passtwo 10 "division factor for the second pass for alpha fading, it applies another fade on top of the first pass to make it more transitioned"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha 0.5 "minimum factor that the second pass can fade to"
-seta hud_panel_centerprint_fade_subsequent_minfontsize 0.75 "minimum factor for the font size from the subsequent fading effects"
-seta hud_panel_centerprint_fade_minfontsize 0 "minimum factor for the font size from the fading in/out effects"
+seta hud_panel_centerprint_fade_minfontsize 1 "minimum factor for the font size from the fading in/out effects"
 
 seta hud_panel_scoreboard_namesize 15 "size limit of player names and relative column (multiplied by fontsize)"
 seta hud_panel_scoreboard_maxheight 0.6 "max height of the scoreboard; a few players that wouldn't fit into the scoreboard are listed in the last row"
index 185eb5c21e2004f0a70107551d0862651d7b29e5..545e0b92b51209e986926dcec132e4fdfe345f6d 100644 (file)
@@ -274,6 +274,7 @@ seta hud_panel_centerprint_align "" "text alignment: 0 left, 0.5 center, 1 right
 seta hud_panel_centerprint_flip "" "invert messages order"
 seta hud_panel_centerprint_fontscale "" "scale the text font by this amount"
 seta hud_panel_centerprint_fontscale_bold "" "scale the bold text font by this amount"
+seta hud_panel_centerprint_fontscale_title "" "scale the title text font by this amount"
 
 seta hud_panel_minigameboard_pos "" "position of this panel"
 seta hud_panel_minigameboard_size "" "size of this panel"
index 36f91775c092ef461df9fbcb36065181b28a76a6..68cc7625a76a0e3ec47f37b03e56b4099043729e 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index 4b862b37a8d01889a1eaa0c47a1459d6fec69a38..b0e0e409cdb389fdf159b928a800e0b8a48b9eb5 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index 1da5ad1ee67ca567a3ad621d33d15c739b9c2a33..1f2280bc8bd7079bcc9a707ed3d472f4565360a5 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index 056160bee54df7bb97cba2711622a7b150681744..76377a22de7e9468c5879120e51db744f9414280 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index b71d44cea9606e9f96acd7aa6647d7c85558b73f..121f196ddc5bccfd990972d9ccea28c754bd39fa 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index 78b69a72fb4fd3bd6d7a7766ea906d73cffee9bc..919ba39a2d8571eef6db3747e11fb91add0f941b 100644 (file)
@@ -275,6 +275,7 @@ seta hud_panel_centerprint_align "0.5"
 seta hud_panel_centerprint_flip "0"
 seta hud_panel_centerprint_fontscale "1"
 seta hud_panel_centerprint_fontscale_bold "1.4"
+seta hud_panel_centerprint_fontscale_title "1.8"
 
 seta hud_panel_minigameboard_pos "0.22 0.15"
 seta hud_panel_minigameboard_size "0.50 0.60"
index 1bbf900375e025f66f059202f7eae6c5b826b50d..6a211246f3047bba3b7c49e5f394cebe571f706e 100644 (file)
@@ -1,9 +1,12 @@
 #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>
 
 bool announcer_1min;
 bool announcer_5min;
@@ -26,6 +29,7 @@ void Announcer_Countdown(entity this)
                Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTOP);
                delete(this);
                announcer_countdown = NULL;
+               centerprint_ClearTitle();
                return;
        }
 
@@ -39,13 +43,14 @@ void Announcer_Countdown(entity this)
                Local_Notification(MSG_MULTI, MULTI_COUNTDOWN_BEGIN);
                delete(this);
                announcer_countdown = NULL;
+               centerprint_ClearTitle();
                return;
        }
        else // countdown is still going
        {
                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);
@@ -69,7 +74,7 @@ void Announcer_Countdown(entity this)
  * 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);
@@ -100,9 +105,24 @@ void Announcer_Gamestart()
                                setthink(announcer_countdown, Announcer_Countdown);
                        }
 
-                       if(time + 5.0 < startTime) // if connecting to server while restart was active don't always play prepareforbattle
-                       if(time > announcer_countdown.nextthink) // don't play it again if countdown was already going
-                               Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
+                       if(!warmup_stage && time < STAT(GAMESTARTTIME))
+                       {
+                               if (gametype.m_1v1)
+                               {
+                                       entity pl1 = players.sort_next;
+                                       entity pl2 = pl1.sort_next;
+                                       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
+                               }
+                               else
+                                       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
+                                       Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
+                       }
 
                        announcer_countdown.nextthink = startTime - floor(startTime - time + 0.5); //synchronize nextthink to startTime
                }
index 07a752a8eb66a78f15df1e7cfefde307ac6c6202..5a18bf388a4422cc60439a6c1642330b3849ca31 100644 (file)
@@ -33,16 +33,21 @@ void HUD_CenterPrint_Export(int fh)
 
 const int CENTERPRINT_MAX_MSGS = 10;
 const int CENTERPRINT_MAX_ENTRIES = 50;
-const float CENTERPRINT_SPACING = 0.7;
+const float CENTERPRINT_BASE_SIZE = 1.4;
+const float CENTERPRINT_SPACING = 0.5;
+const float CENTERPRINT_TITLE_SPACING = 0.35;
 int cpm_index;
 string centerprint_messages[CENTERPRINT_MAX_MSGS];
 int centerprint_msgID[CENTERPRINT_MAX_MSGS];
-bool centerprint_bold[CENTERPRINT_MAX_MSGS];
 float centerprint_time[CENTERPRINT_MAX_MSGS];
+float centerprint_start_time[CENTERPRINT_MAX_MSGS];
 float centerprint_expire_time[CENTERPRINT_MAX_MSGS];
 int centerprint_countdown_num[CENTERPRINT_MAX_MSGS];
 bool centerprint_showing;
 
+string centerprint_title;
+float centerprint_title_offset;
+
 void centerprint_Add(int new_id, string strMessage, float duration, int countdown_num)
 {
        TC(int, new_id); TC(int, countdown_num);
@@ -52,11 +57,6 @@ void centerprint_Add(int new_id, string strMessage, float duration, int countdow
        if(strMessage == "" && new_id == 0)
                return;
 
-       // strip BOLD_OPERATOR
-       bool is_bold = (substring(strMessage, 0, 5) == BOLD_OPERATOR);
-       if (is_bold)
-               strMessage = substring(strMessage, 5, -1);
-
        // strip trailing newlines
        j = strlen(strMessage) - 1;
        while(substring(strMessage, j, 1) == "\n" && j >= 0)
@@ -97,6 +97,9 @@ void centerprint_Add(int new_id, string strMessage, float duration, int countdow
                }
        }
 
+       if (strMessage == "")
+               return;
+
        if (i == CENTERPRINT_MAX_MSGS)
        {
                // a msg with the same id was not found, add the msg at the next position
@@ -106,7 +109,7 @@ void centerprint_Add(int new_id, string strMessage, float duration, int countdow
                j = cpm_index;
        }
        strcpy(centerprint_messages[j], strMessage);
-       centerprint_bold[j] = is_bold;
+       centerprint_start_time[j] = time;
        centerprint_msgID[j] = new_id;
        if (duration < 0)
        {
@@ -138,14 +141,31 @@ void centerprint_KillAll()
 {
        for (int i=0; i<CENTERPRINT_MAX_MSGS; ++i)
        {
+               centerprint_start_time[i] = 0;
                centerprint_expire_time[i] = 0;
                centerprint_time[i] = 1;
                centerprint_msgID[i] = 0;
-               centerprint_bold[i] = false;
                strfree(centerprint_messages[i]);
        }
 }
 
+void centerprint_ClearTitle()
+{
+       strfree(centerprint_title);
+       centerprint_title_offset = 0;
+}
+
+void centerprint_SetTitle(string title, float offset)
+{
+       if(title != centerprint_title) {
+               if(centerprint_title)
+                       strfree(centerprint_title);
+
+               centerprint_title = strzone(CCR(title));
+               centerprint_title_offset = offset;
+       }
+}
+
 float hud_configure_cp_generation_time;
 void HUD_CenterPrint()
 {
@@ -153,8 +173,10 @@ void HUD_CenterPrint()
        {
                if(!autocvar_hud_panel_centerprint) return;
 
-               if(hud_configure_prev)
+               if(hud_configure_prev) {
+                       centerprint_ClearTitle();
                        centerprint_KillAll();
+               }
        }
        else
        {
@@ -167,12 +189,14 @@ void HUD_CenterPrint()
                {
                        if(highlightedPanel == HUD_PANEL(CENTERPRINT))
                        {
+                               centerprint_SetTitle(sprintf(_("Title at %s"), seconds_tostring(hud_configure_cp_generation_time)), 0);
+
                                float r;
                                r = random();
                                if (r > 0.8)
                                        centerprint_Add(floor(r*1000), sprintf(_("^3Countdown message at time %s, seconds left: ^COUNT"), seconds_tostring(time)), 1, 10);
                                else if (r > 0.55)
-                                       centerprint_Add(0, sprintf(_("^1Multiline message at time %s that\n^1lasts longer than normal"), seconds_tostring(time)), 20, 0);
+                                       centerprint_Add(0, sprintf(_("^1Multiline message at time %s that\n^BOLDlasts longer than normal"), seconds_tostring(time)), 20, 0);
                                else
                                        centerprint_AddStandard(sprintf(_("Message at time %s"), seconds_tostring(time)));
                                hud_configure_cp_generation_time = time + 1 + random()*4;
@@ -225,31 +249,49 @@ void HUD_CenterPrint()
                panel_size -= '2 2 0' * panel_bg_padding;
        }
 
-       int entries;
-       float height;
-       vector fontsize;
-
        int i, j, k, n, g;
-       float a, sz, align, current_msg_posY = 0, msg_size;
+       float a = 1, sz, align, current_msg_posY = 0, msg_size;
        vector pos;
-       string ts;
+       vector cp_fontsize = hud_fontsize * CENTERPRINT_BASE_SIZE;
+       string ts = "";
        bool all_messages_expired = true;
 
        pos = panel_pos;
        if (autocvar_hud_panel_centerprint_flip)
                pos.y += panel_size.y;
        align = bound(0, autocvar_hud_panel_centerprint_align, 1);
-       for (g=0, i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
-       {
-               bool is_bold = centerprint_bold[j];
 
-               // entries = bound(1, floor(CENTERPRINT_MAX_ENTRIES * 4 * panel_size_y/panel_size_x), CENTERPRINT_MAX_ENTRIES);
-               // height = panel_size_y/entries;
-               // fontsize = '1 1 0' * height;
-               height = (is_bold) ? vid_conheight/50 * autocvar_hud_panel_centerprint_fontscale_bold : vid_conheight/50 * autocvar_hud_panel_centerprint_fontscale;
-               fontsize = '1 1 0' * height;
-               entries = bound(1, floor(panel_size.y/height), CENTERPRINT_MAX_ENTRIES);
+       // Show title if available
+       if(centerprint_title) {
+               vector fontsize = cp_fontsize * autocvar_hud_panel_centerprint_fontscale_title;
+               float width = stringwidth(centerprint_title, true, fontsize);
+
+               pos.x = panel_pos.x + (panel_size.x - width) * align;
 
+               if (autocvar_hud_panel_centerprint_flip)
+                       pos.y -= fontsize.y;
+               if (centerprint_title_offset && align == 0.5)
+                       pos.x += centerprint_title_offset * CENTERPRINT_BASE_SIZE * autocvar_hud_panel_centerprint_fontscale_title;
+
+               drawcolorcodedstring(pos, centerprint_title, fontsize, 1, DRAWFLAG_NORMAL);
+
+               if (autocvar_hud_panel_centerprint_flip)
+                       pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING;
+               else
+                       pos.y += fontsize.y + (hud_fontsize.y * CENTERPRINT_TITLE_SPACING);
+
+               drawfill(pos, vec2(width, 1), '1 1 1', 1, DRAWFLAG_NORMAL);
+
+               if (autocvar_hud_panel_centerprint_flip)
+                       pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING;
+               else
+                       pos.y += cp_fontsize.y * CENTERPRINT_TITLE_SPACING;
+
+               all_messages_expired = false;
+       }
+
+       for (g=0, i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
+       {
                if (j == CENTERPRINT_MAX_MSGS)
                        j = 0;
                if (centerprint_expire_time[j] == -1)
@@ -274,17 +316,23 @@ void HUD_CenterPrint()
 
                all_messages_expired = false;
 
+               if (time < centerprint_start_time[j]) continue;
+
                float fade_in_time = autocvar_hud_panel_centerprint_fade_in;
-               if (centerprint_time[j] <= 2)
-                       fade_in_time = autocvar_hud_panel_centerprint_fade_in_short;
+               float fade_out_time = autocvar_hud_panel_centerprint_fade_out;
+
+               if (centerprint_countdown_num[j]) {
+                       fade_in_time = 0;
+                       fade_out_time = 0;
+               }
 
                // fade
-               if(centerprint_time[j] < 0)  // Expired but forced. Expire time is the fade-in time.
-                       a = (time - centerprint_expire_time[j]) / max(0.0001, fade_in_time);
-               else if(centerprint_expire_time[j] - autocvar_hud_panel_centerprint_fade_out > time)  // Regularily printed. Not fading out yet.
-                       a = (time - (centerprint_expire_time[j] - centerprint_time[j])) / max(0.0001, fade_in_time);
-               else // Expiring soon, so fade it out.
-                       a = (centerprint_expire_time[j] - time) / max(0.0001, autocvar_hud_panel_centerprint_fade_out);
+               if(fade_in_time && centerprint_start_time[j] && time < centerprint_start_time[j] + fade_in_time) // Fade in
+                       a = (time - centerprint_start_time[j]) / fade_in_time;
+               else if(time < centerprint_expire_time[j] - fade_out_time || centerprint_time[j] < 0) // Regularily printed or forced
+                       a = 1;
+               else if(fade_out_time) // Expiring soon, so fade it out.
+                       a = (centerprint_expire_time[j] - time) / fade_out_time;
 
                if(centerprint_msgID[j] == ORDINAL(CPID_TIMEIN))
                        a = 1;
@@ -292,11 +340,6 @@ void HUD_CenterPrint()
                // while counting down show it anyway in order to hold the current message position
                if (a <= 0.5/255.0 && centerprint_countdown_num[j] == 0)  // Guaranteed invisible - don't show.
                        continue;
-               if (a > 1)
-                       a = 1;
-
-               // set the size from fading in/out before subsequent fading
-               sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize);
 
                // also fade it based on positioning
                if(autocvar_hud_panel_centerprint_fade_subsequent)
@@ -308,12 +351,12 @@ void HUD_CenterPrint()
                }
                a *= panel_fg_alpha;
 
-               // finally set the size based on the new alpha from subsequent fading
-               sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize));
+               // finally set the size based on the alpha
+               sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize);
                drawfontscale = hud_scale * sz;
 
                if (centerprint_countdown_num[j])
-                       n = tokenizebyseparator(strreplace("^COUNT", count_seconds(centerprint_countdown_num[j]), centerprint_messages[j]), "\n");
+                       n = tokenizebyseparator(strreplace("^COUNT", ftos(centerprint_countdown_num[j]), centerprint_messages[j]), "\n");
                else
                        n = tokenizebyseparator(centerprint_messages[j], "\n");
 
@@ -325,6 +368,9 @@ void HUD_CenterPrint()
                                getWrappedLine_remaining = argv(k);
                                while(getWrappedLine_remaining)
                                {
+                                       bool is_bold = (substring(getWrappedLine_remaining, 0, 5) == BOLD_OPERATOR);
+                                       vector fontsize = cp_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale);
+
                                        ts = getWrappedLine(panel_size.x * hud_scale.x * sz, fontsize, stringwidth_colors);
                                        if (ts != "")
                                                pos.y -= fontsize.y;
@@ -339,6 +385,12 @@ void HUD_CenterPrint()
                for(k = 0; k < n; ++k)
                {
                        getWrappedLine_remaining = argv(k);
+
+                       bool is_bold = (substring(getWrappedLine_remaining, 0, 5) == BOLD_OPERATOR);
+                       vector fontsize = cp_fontsize * (is_bold ? autocvar_hud_panel_centerprint_fontscale_bold : autocvar_hud_panel_centerprint_fontscale);
+                       if (is_bold)
+                               getWrappedLine_remaining = substring(getWrappedLine_remaining, 5, -1);
+
                        while(getWrappedLine_remaining)
                        {
                                ts = getWrappedLine(panel_size.x * hud_scale.x * sz, fontsize, stringwidth_colors);
@@ -360,11 +412,12 @@ void HUD_CenterPrint()
                ++g; // move next position number up
 
                msg_size = pos.y - msg_size;
+
                if (autocvar_hud_panel_centerprint_flip)
                {
-                       pos.y = current_msg_posY - CENTERPRINT_SPACING * fontsize.y;
+                       pos.y -= msg_size + CENTERPRINT_SPACING * cp_fontsize.y;
                        if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
-                               pos.y += (msg_size + CENTERPRINT_SPACING * fontsize.y) * (1 - sqrt(sz));
+                               pos.y += (1 - sqrt(a));
 
                        if (pos.y < panel_pos.y) // check if the next message can be shown
                        {
@@ -374,11 +427,11 @@ void HUD_CenterPrint()
                }
                else
                {
-                       pos.y += CENTERPRINT_SPACING * fontsize.y;
+                       pos.y += CENTERPRINT_SPACING * cp_fontsize.y;
                        if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
-                               pos.y -= (msg_size + CENTERPRINT_SPACING * fontsize.y) * (1 - sqrt(sz));
+                               pos.y -= (1 - sqrt(a));
 
-                       if(pos.y > panel_pos.y + panel_size.y - fontsize.y) // check if the next message can be shown
+                       if(pos.y > panel_pos.y + panel_size.y - cp_fontsize.y) // check if the next message can be shown
                        {
                                drawfontscale = hud_scale;
                                return;
index a3646f4d17e64ac19fd5d4a105fb329095f2ee4b..b1d52cf0adc06d4e14be1e837ac4f1ecd7dd7a41 100644 (file)
@@ -4,22 +4,24 @@
 bool autocvar_hud_panel_centerprint;
 float autocvar_hud_panel_centerprint_align;
 float autocvar_hud_panel_centerprint_fade_in = 0.15;
-float autocvar_hud_panel_centerprint_fade_in_short = 0;
 float autocvar_hud_panel_centerprint_fade_out = 0.15;
 float autocvar_hud_panel_centerprint_fade_subsequent = 1;
 float autocvar_hud_panel_centerprint_fade_subsequent_passone = 3;
 float autocvar_hud_panel_centerprint_fade_subsequent_passone_minalpha = 0.5;
 float autocvar_hud_panel_centerprint_fade_subsequent_passtwo = 10;
 float autocvar_hud_panel_centerprint_fade_subsequent_passtwo_minalpha = 0.5;
-float autocvar_hud_panel_centerprint_fade_subsequent_minfontsize = 0.75;
-float autocvar_hud_panel_centerprint_fade_minfontsize = 0;
+float autocvar_hud_panel_centerprint_fade_minfontsize = 1;
 bool autocvar_hud_panel_centerprint_flip;
-float autocvar_hud_panel_centerprint_fontscale;
+float autocvar_hud_panel_centerprint_fontscale = 1;
 float autocvar_hud_panel_centerprint_fontscale_bold = 1.4;
-bool autocvar_hud_panel_centerprint_dynamichud  = true;
+float autocvar_hud_panel_centerprint_fontscale_title = 1.8;
+bool autocvar_hud_panel_centerprint_dynamichud = true;
 float autocvar_hud_panel_centerprint_time;
 
 void centerprint_Add(int new_id, string strMessage, float duration, int countdown_num);
 void centerprint_AddStandard(string strMessage);
 void centerprint_Kill(int id);
 void centerprint_KillAll();
+
+void centerprint_ClearTitle();
+void centerprint_SetTitle(string title, float offset);
index 31d9bb1d1eef32365b0dce07f500d092c848aba1..d34e929cb1f1cdcd1ffd18093057a5505eaa27d7 100644 (file)
@@ -526,9 +526,9 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input !=
     MSG_CENTER_NOTIF(ASSAULT_DEFENDING,                 N_ENABLE,    0, 0, "",               CPID_ASSAULT_ROLE,      "0 0",  _("^BGYou are defending!"), "")
     MSG_CENTER_NOTIF(ASSAULT_OBJ_DESTROYED,             N_ENABLE,    0, 1, "f1time",         CPID_ASSAULT_ROLE,      "0 0",  _("^BGObjective destroyed in ^F4%s^BG!"), "")
 
-    MSG_CENTER_NOTIF(COUNTDOWN_BEGIN,                   N_ENABLE,    0, 0, "",               CPID_ROUND,             "2 0",  _("^F4Begin!"), "")
-    MSG_CENTER_NOTIF(COUNTDOWN_GAMESTART,               N_ENABLE,    0, 1, "",               CPID_ROUND,             "1 f1", _("^F4Game starts in ^COUNT"), "")
-    MSG_CENTER_NOTIF(COUNTDOWN_ROUNDSTART,              N_ENABLE,    0, 1, "",               CPID_ROUND,             "1 f1", _("^F4Round starts in ^COUNT"), "")
+    MSG_CENTER_NOTIF(COUNTDOWN_BEGIN,                   N_ENABLE,    0, 0, "",               CPID_ROUND,             "2 0",  BOLD(_("^BGBegin!")), "")
+    MSG_CENTER_NOTIF(COUNTDOWN_GAMESTART,               N_ENABLE,    0, 1, "",               CPID_ROUND,             "1 f1", strcat(_("^BGGame starts in"), "\n", BOLD("^COUNT")), "")
+    MSG_CENTER_NOTIF(COUNTDOWN_ROUNDSTART,              N_ENABLE,    0, 2, "f1",             CPID_ROUND,             "1 f2", strcat(_("^BGRound %s starts in"), "\n", BOLD("^COUNT")), "")
     MSG_CENTER_NOTIF(COUNTDOWN_ROUNDSTOP,               N_ENABLE,    0, 0, "",               CPID_ROUND,             "2 0",  _("^F4Round cannot start"), "")
 
     MSG_CENTER_NOTIF(ROUND_TIED,                        N_ENABLE,    0, 0, "",               CPID_ROUND,             "0 0",  _("^BGRound tied"), "")
index abadaa47deefb24f227e0f5350d1673dfa8ff02b..128f090c4fd9ec94ff1269b3336bda705be60c8e 100644 (file)
@@ -366,6 +366,7 @@ REGISTER_STAT(Q3COMPAT, int, q3compat)
 #include "physics/movetypes/movetypes.qh"
 float warmup_limit;
 float round_limit;
+int rounds_played;
 #endif
 
 #ifdef SVQC
@@ -405,6 +406,7 @@ REGISTER_STAT(MOVEVARS_AIRCONTROL, float)
 REGISTER_STAT(FRAGLIMIT, float, autocvar_fraglimit)
 REGISTER_STAT(TIMELIMIT, float, autocvar_timelimit)
 REGISTER_STAT(WARMUP_TIMELIMIT, float, warmup_limit)
+REGISTER_STAT(ROUNDS_PLAYED, int, rounds_played)
 REGISTER_STAT(ROUND_TIMELIMIT, float, round_limit)
 #ifdef SVQC
 float autocvar_sv_wallfriction;
index b63883dcc828e4b932a984d6bd8d959455610100..6c9342b80e30bcb64ec2759cc4a67c245d3bc95f 100644 (file)
@@ -42,6 +42,7 @@ void round_handler_Think(entity this)
                                this.cnt = 0;
                                this.round_endtime = (this.round_timelimit) ? time + this.round_timelimit : 0;
                                this.nextthink = time;
+                               rounds_played++;
                                if (this.roundStart) this.roundStart();
                                return;
                        }
@@ -114,7 +115,10 @@ void round_handler_Reset(float next_think)
                if (this.cnt < this.count + 1) this.cnt = this.count + 1;
        this.nextthink = next_think;
        if (next_think)
+       {
+               if (next_think <= game_starttime) rounds_played = 0;
                round_starttime = next_think + this.count;
+       }
 }
 
 void round_handler_Remove()