diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm
index 376f87ed5e..c326ffbc88 100644
--- a/code/datums/chat_message.dm
+++ b/code/datums/chat_message.dm
@@ -123,6 +123,13 @@ var/list/runechat_image_cache = list()
target.chat_color_darkened = colorize_string(target.name, 0.85, 0.85)
target.chat_color_name = target.name
+ // Always force it back to a pref if they have one
+ if(ismob(target))
+ var/mob/M = target
+ if(M?.client?.prefs?.runechat_color != COLOR_BLACK)
+ target.chat_color = M.client.prefs.runechat_color
+ target.chat_color_darkened = M.client.prefs.runechat_color
+
// Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag
var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g")
text = replacetext(text, url_scheme, "")
diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm
index eee2513420..939c7975f0 100644
--- a/code/modules/client/preference_setup/general/02_language.dm
+++ b/code/modules/client/preference_setup/general/02_language.dm
@@ -1,6 +1,7 @@
/datum/preferences
var/extra_languages = 0
var/preferred_language = "common" // VOREStation Edit: Allow selecting a preferred language
+ var/runechat_color = COLOR_BLACK
/datum/category_item/player_setup_item/general/language
name = "Language"
@@ -14,6 +15,7 @@
pref.species = save_data["species"]
pref.preferred_language = save_data["preflang"]
pref.language_custom_keys = check_list_copy(save_data["language_custom_keys"])
+ pref.runechat_color = save_data["runechat_color"]
/datum/category_item/player_setup_item/general/language/save_character(list/save_data)
save_data["language"] = check_list_copy(pref.alternate_languages)
@@ -21,6 +23,7 @@
save_data["language_prefixes"] = pref.language_prefixes
save_data["language_custom_keys"] = pref.language_custom_keys
save_data["preflang"] = check_list_copy(pref.preferred_language)
+ save_data["runechat_color"] = pref.runechat_color
/datum/category_item/player_setup_item/general/language/sanitize_character()
if(!islist(pref.alternate_languages))
@@ -62,6 +65,8 @@
if(!((pref.language_custom_keys[key] == S.language) || (pref.language_custom_keys[key] == S.default_language && S.default_language != S.language) || (pref.language_custom_keys[key] in pref.alternate_languages)))
pref.language_custom_keys.Remove(key)
+ pref.runechat_color = sanitize_hexcolor(pref.runechat_color, COLOR_BLACK)
+
/datum/category_item/player_setup_item/general/language/content()
. += "Languages
"
var/datum/species/S = GLOB.all_species[pref.species]
@@ -86,6 +91,7 @@
. += "Language Keys
"
. += " [jointext(pref.language_prefixes, " ")] Change Reset
"
. += "Preferred Language [pref.preferred_language]
" // VOREStation Add
+ . += "Runechat Color Change Runechat Color [color_square(hex = pref.runechat_color)]"
/datum/category_item/player_setup_item/general/language/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["remove_language"])
@@ -190,5 +196,17 @@
return TOPIC_REFRESH
// VOREStation Add End
+ else if(href_list["pref_runechat_color"])
+ var/new_runechat_color = input(user, "Choose your character's runechat colour (#000000 for random):", "Character Preference", pref.runechat_color) as color|null
+ if(new_runechat_color && CanUseTopic(user))
+ pref.runechat_color = new_runechat_color
+ // whenever we change this, we update our mob
+ var/mob/pref_mob = preference_mob()
+ if(pref_mob)
+ pref_mob.chat_color = new_runechat_color
+ pref_mob.chat_color_darkened = new_runechat_color
+ pref_mob.chat_color_name = pref_mob.name
+ return TOPIC_REFRESH
+
return ..()