diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index 70eb0c03062..248264c8e75 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -129,6 +129,10 @@
/// Meaning that if the message is visual, and sourced from a blind mob, they will not see it.
/// This flag skips that behavior, and will always show the self message to the mob.
#define ALWAYS_SHOW_SELF_MESSAGE (1<<1)
+/// Applies emphasis formatting to the message.
+#define WITH_EMPHASIS_MESSAGE (1<<2)
+/// Blocks chat highlighting from being applied to the message sent to the self.
+#define BLOCK_SELF_HIGHLIGHT_MESSAGE (1<<3)
///Defines for priorities for the bubble_icon_override comp
#define BUBBLE_ICON_PRIORITY_ACCESSORY 2
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index a134a9f6752..bb1e149ffe6 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -258,7 +258,7 @@
else
log_talk(message, LOG_SAY, tag="imaginary friend", forced_by = forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE])
- var/quoted_message = say_quote(say_emphasis(message), spans, message_mods)
+ var/quoted_message = say_quote(apply_message_emphasis(message), spans, message_mods)
var/rendered = "[span_name("[name]")] [quoted_message]"
var/dead_rendered = "[span_name("[name] (Imaginary friend of [owner])")] [quoted_message]"
diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm
index 3af62b77ca6..d3426e7ed97 100644
--- a/code/datums/chatmessage.dm
+++ b/code/datums/chatmessage.dm
@@ -191,7 +191,7 @@
var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color
// Approximate text height
- var/complete_text = ""
+ var/complete_text = ""
var/mheight
WXH_TO_HEIGHT(owned_by.MeasureText(complete_text, null, CHAT_MESSAGE_WIDTH), mheight)
diff --git a/code/datums/components/sign_language.dm b/code/datums/components/sign_language.dm
index e1bf27e5a3a..994c93bd9a2 100644
--- a/code/datums/components/sign_language.dm
+++ b/code/datums/components/sign_language.dm
@@ -312,11 +312,11 @@
/datum/component/sign_language/proc/emote_tone(mob/living/carbon/carbon_parent, emote_tone)
switch(emote_tone)
if(TONE_INQUISITIVE)
- carbon_parent.visible_message(span_bold("quirks [carbon_parent.p_their()] brows quizzically."), visible_message_flags = EMOTE_MESSAGE)
+ carbon_parent.visible_message(span_bold("quirks [carbon_parent.p_their()] brows quizzically."), visible_message_flags = EMOTE_MESSAGE|BLOCK_SELF_HIGHLIGHT_MESSAGE)
if(TONE_EMPHATIC)
- carbon_parent.visible_message(span_bold("widens [carbon_parent.p_their()] eyes emphatically!"), visible_message_flags = EMOTE_MESSAGE)
+ carbon_parent.visible_message(span_bold("widens [carbon_parent.p_their()] eyes emphatically!"), visible_message_flags = EMOTE_MESSAGE|BLOCK_SELF_HIGHLIGHT_MESSAGE)
if(TONE_INQUISITIVE_EMPHATIC)
- carbon_parent.visible_message(span_bold("wears an intense, befuddled expression!"), visible_message_flags = EMOTE_MESSAGE)
+ carbon_parent.visible_message(span_bold("wears an intense, befuddled expression!"), visible_message_flags = EMOTE_MESSAGE|BLOCK_SELF_HIGHLIGHT_MESSAGE)
/// Removes the tonal indicator overlay completely
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index b5e07509d0e..80e10fc8259 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -118,6 +118,7 @@
var/is_important = emote_type & EMOTE_IMPORTANT
var/is_visual = emote_type & EMOTE_VISIBLE
var/is_audible = emote_type & EMOTE_AUDIBLE
+ var/additional_message_flags = get_message_flags(intentional)
var/space = should_have_space_before_emote(html_decode(msg)[1]) ? " " : "" // SKYRAT EDIT ADDITION
// Emote doesn't get printed to chat, runechat only
@@ -174,7 +175,7 @@
message = msg,
deaf_message = span_emote("You see how [user] [msg]"),
self_message = msg,
- audible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE,
+ audible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE|additional_message_flags,
separation = space, // SKYRAT EDIT ADDITION
pref_to_check = pref_to_check // SKYRAT EDIT ADDITION - Pref checked emotes
)
@@ -183,7 +184,7 @@
user.audible_message(
message = msg,
self_message = msg,
- audible_message_flags = EMOTE_MESSAGE,
+ audible_message_flags = EMOTE_MESSAGE|additional_message_flags,
separation = space, // SKYRAT EDIT ADDITION
pref_to_check = pref_to_check // SKYRAT EDIT ADDITION - Pref checked emotes
)
@@ -192,7 +193,7 @@
user.visible_message(
message = msg,
self_message = msg,
- visible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE,
+ visible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE|additional_message_flags,
separation = space, // SKYRAT EDIT ADDITION
pref_to_check = pref_to_check // SKYRAT EDIT ADDITION - Pref checked emotes
)
@@ -289,6 +290,18 @@
/datum/emote/proc/get_sound(mob/living/user)
return sound //by default just return this var.
+/**
+ * To get the flags visible/audible messages for ran by the emote.
+ *
+ * Arguments:
+ * * intentional - Bool that says whether the emote was forced (FALSE) or not (TRUE).
+ *
+ * Returns the additional message flags we should be using, if any.
+ */
+/datum/emote/proc/get_message_flags(intentional)
+ // If we did it, we most often already know what's in it, so we try to avoid highlight clutter.
+ return intentional ? BLOCK_SELF_HIGHLIGHT_MESSAGE : NONE
+
/**
* To replace pronouns in the inputed string with the user's proper pronouns.
*
diff --git a/code/game/say.dm b/code/game/say.dm
index 380ed4accca..7d6416e2573 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -244,20 +244,20 @@ GLOBAL_LIST_INIT(freqtospan, list(
/* all inputs should be fully figured out past this point */
- var/processed_input = say_emphasis(input) //This MUST be done first so that we don't get clipped by spans
+ var/processed_input = apply_message_emphasis(input) //This MUST be done first so that we don't get clipped by spans
processed_input = attach_spans(processed_input, spans)
- var/processed_say_mod = say_emphasis(say_mod)
+ var/processed_say_mod = apply_message_emphasis(say_mod)
return "[processed_say_mod], \"[processed_input]\""
-/// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags. Includes escaping.
+/// Transforms the message emphasis mods from [/atom/proc/apply_message_emphasis] into the appropriate HTML tags. Includes escaping.
#define ENCODE_HTML_EMPHASIS(input, char, html, varname) \
var/static/regex/##varname = regex("(?$1[html]>") //zero-width space to force maptext to respect closing tags.
-/// Scans the input sentence for speech emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks
-/atom/movable/proc/say_emphasis(input)
+/// Scans the input sentence for message emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks
+/atom/proc/apply_message_emphasis(input)
ENCODE_HTML_EMPHASIS(input, "\\|", "i", italics)
ENCODE_HTML_EMPHASIS(input, "\\+", "b", bold)
ENCODE_HTML_EMPHASIS(input, "\\_", "u", underline)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index d9df210f11e..bd6d250ee70 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -729,6 +729,10 @@
return TRUE
+/datum/emote/living/custom/get_message_flags(intentional)
+ . = ..()
+ return .|WITH_EMPHASIS_MESSAGE
+
/datum/emote/living/custom/proc/get_custom_emote_from_user()
return stripped_multiline_input(usr, "Choose an emote to display.", "Me" , null, MAX_MESSAGE_LEN) // SKYRAT EDIT CHANGE - ORIGINAL : return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 04ea7484503..07d9ec5b945 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -304,6 +304,8 @@
hearers -= src
var/raw_msg = message
+ if(visible_message_flags & WITH_EMPHASIS_MESSAGE)
+ message = apply_message_emphasis(message)
if(visible_message_flags & EMOTE_MESSAGE)
message = span_emote("[src][separation][message]") // SKYRAT EDIT - Better emotes
@@ -351,15 +353,17 @@
return
var/raw_self_message = self_message
var/self_runechat = FALSE
+ var/block_self_highlight = (visible_message_flags & BLOCK_SELF_HIGHLIGHT_MESSAGE)
+ if(visible_message_flags & WITH_EMPHASIS_MESSAGE)
+ self_message = apply_message_emphasis(self_message)
if(visible_message_flags & EMOTE_MESSAGE)
self_message = span_emote("[src] [self_message]") // May make more sense as "You do x"
if(visible_message_flags & ALWAYS_SHOW_SELF_MESSAGE)
- to_chat(src, self_message)
+ to_chat(src, self_message, avoid_highlighting = block_self_highlight)
self_runechat = TRUE
-
else
- self_runechat = show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
+ self_runechat = show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE, avoid_highlighting = block_self_highlight)
if(self_runechat && (visible_message_flags & EMOTE_MESSAGE) && runechat_prefs_check(src, visible_message_flags))
create_chat_message(src, raw_message = raw_self_message, runechat_flags = visible_message_flags)
@@ -393,6 +397,8 @@
if(self_message)
hearers -= src
var/raw_msg = message
+ if(audible_message_flags & WITH_EMPHASIS_MESSAGE)
+ message = apply_message_emphasis(message)
if(audible_message_flags & EMOTE_MESSAGE)
message = span_emote("[src][separation][message]") //SKYRAT EDIT CHANGE
for(var/mob/M in hearers)
@@ -421,13 +427,17 @@
return
var/raw_self_message = self_message
var/self_runechat = FALSE
+ var/block_self_highlight = (audible_message_flags & BLOCK_SELF_HIGHLIGHT_MESSAGE)
+ if(audible_message_flags & WITH_EMPHASIS_MESSAGE)
+ self_message = apply_message_emphasis(self_message)
if(audible_message_flags & EMOTE_MESSAGE)
self_message = span_emote("[src] [self_message]")
+
if(audible_message_flags & ALWAYS_SHOW_SELF_MESSAGE)
- to_chat(src, self_message)
+ to_chat(src, self_message, avoid_highlighting = block_self_highlight)
self_runechat = TRUE
else
- self_runechat = show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
+ self_runechat = show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL, avoid_highlighting = block_self_highlight)
if(self_runechat && (audible_message_flags & EMOTE_MESSAGE) && runechat_prefs_check(src, audible_message_flags))
create_chat_message(src, raw_message = raw_self_message, runechat_flags = audible_message_flags)
diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm
index a58d15801c0..a56757892c7 100644
--- a/code/modules/mob/mob_say.dm
+++ b/code/modules/mob/mob_say.dm
@@ -156,7 +156,7 @@
if(name != real_name)
alt_name = " (died as [real_name])"
- var/spanned = say_quote(say_emphasis(message))
+ var/spanned = say_quote(apply_message_emphasis(message))
var/source = "DEAD: [name][alt_name]"
var/rendered = " [emoji_parse(spanned)]"
log_talk(message, LOG_SAY, tag="DEAD")