From 1fc6a514101d999802ee2249fa4f60ef4acc4b0b Mon Sep 17 00:00:00 2001 From: terencehill Date: Thu, 28 May 2020 16:40:49 +0200 Subject: [PATCH] Strip BOLD_OPERATOR when a centerprint message gets added to the buffer rather than every frame. It fixes #2433 "Bold messages appearing twice" for real --- qcsrc/client/hud/panel/centerprint.qc | 33 +++++++++++++-------------- qcsrc/client/main.qh | 4 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/qcsrc/client/hud/panel/centerprint.qc b/qcsrc/client/hud/panel/centerprint.qc index 2f5aab5ed9..63e69caad8 100644 --- a/qcsrc/client/hud/panel/centerprint.qc +++ b/qcsrc/client/hud/panel/centerprint.qc @@ -26,9 +26,11 @@ void HUD_CenterPrint_Export(int fh) HUD_Write_Cvar("hud_panel_centerprint_fade_minfontsize"); } -// These are the functions that draw the text at the center of the screen (e.g. frag messages and server MOTDs). -// Usually local_notification_centerprint_generic() is called, which in turn calls centerprint_generic(), which -// uses some kind of macro magic to call HUD_CenterPrint, which draws them on screen using drawcolorcodedstring(). +// These are the functions that draw the text at the center of the screen (e.g. frag messages and server MOTD). +// centerprint_generic parses a message and puts it in the circular buffer centerprint_messages +// centerprint_generic is usually called by Local_Notification_centerprint_generic, which is called +// by Local_Notification. +// HUD_CenterPrint draws all the messages on screen const int CENTERPRINT_MAX_MSGS = 10; const int CENTERPRINT_MAX_ENTRIES = 50; @@ -36,6 +38,7 @@ const float CENTERPRINT_SPACING = 0.7; 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_expire_time[CENTERPRINT_MAX_MSGS]; int centerprint_countdown_num[CENTERPRINT_MAX_MSGS]; @@ -50,6 +53,11 @@ void centerprint_generic(int new_id, string strMessage, float duration, int coun 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) @@ -99,6 +107,7 @@ void centerprint_generic(int new_id, string strMessage, float duration, int coun j = cpm_index; } strcpy(centerprint_messages[j], strMessage); + centerprint_bold[j] = is_bold; centerprint_msgID[j] = new_id; if (duration < 0) { @@ -133,6 +142,7 @@ void reset_centerprint_messages() centerprint_expire_time[i] = 0; centerprint_time[i] = 1; centerprint_msgID[i] = 0; + centerprint_bold[i] = false; strfree(centerprint_messages[i]); } } @@ -215,8 +225,6 @@ void HUD_CenterPrint () panel_size -= '2 2 0' * panel_bg_padding; } - bool is_bold; - string centerprint_message = strzone(""); int entries; float height; vector fontsize; @@ -233,13 +241,7 @@ void HUD_CenterPrint () align = bound(0, autocvar_hud_panel_centerprint_align, 1); for (g=0, i=0, j=cpm_index; i panel_pos.y + panel_size.y - fontsize.y) // check if the next message can be shown { drawfontscale = hud_scale; - strfree(centerprint_message); return; } } } - strfree(centerprint_message); drawfontscale = hud_scale; if (all_messages_expired) diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index 87951ff894..4dcecb1099 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -96,8 +96,8 @@ float camera_roll; vector camera_direction; void centerprint_hud(string strMessage); -void centerprint_kill(float id); -void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num); +void centerprint_kill(int id); +void centerprint_generic(int new_id, string strMessage, float duration, int countdown_num); const float ALPHA_MIN_VISIBLE = 0.003; -- 2.39.2