Skip to content

OOC pronouns on hover #7036

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jul 3, 2025
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions code/__DEFINES/chat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,5 @@
#define RUNECHAT_BOLD(str) "+[str]+"
/// Helper which creates a chat message which may have a tooltip in some contexts, but not others.
#define conditional_tooltip(normal_text, tooltip_text, condition) ((condition) ? (span_tooltip(tooltip_text, normal_text)) : (normal_text))
/// No italics
#define conditional_tooltip_alt(normal_text, tooltip_text, condition) ((condition) ? (span_tooltip_alt(tooltip_text, normal_text)) : (normal_text))
2 changes: 2 additions & 0 deletions code/__DEFINES/span.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,5 +137,7 @@
// Spans that use embedded tgui components:
// Sorted alphabetically
#define span_tooltip(tip, main_text) ("<span data-component=\"Tooltip\" data-content=\"" + tip + "\" class=\"tooltip\">" + main_text + "</span>")
// No italics
#define span_tooltip_alt(tip, main_text) ("<span data-component=\"Tooltip\" data-content=\"" + tip + "\" class=\"tooltip_alt\">" + main_text + "</span>")

#define span_doyourjobidiot(str) ("<span class='doyourjobidiot'>" + str + "</span>")
73 changes: 73 additions & 0 deletions code/modules/client/preferences/ooc.dm
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
#define MAX_PRONOUNS 4
// This list is non-exhaustive
GLOBAL_LIST_INIT(pronouns_valid, list(
"he", "him", "his",
"she","her","hers",
"hyr", "hyrs",
"they", "them", "their","theirs",
"it", "its",
"xey", "xe", "xem", "xyr", "xyrs",
"ze", "zir", "zirs",
"ey", "em", "eir", "eirs",
"fae", "faer", "faers",
"ve", "ver", "vis", "vers",
"ne", "nem", "nir", "nirs"
))

// at least one is required
GLOBAL_LIST_INIT(pronouns_required, list(
"he", "her", "she", "they", "them", "it", "fae", "its"
))

/// The color admins will speak in for OOC.
/datum/preference/color/ooc_color
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
Expand All @@ -12,3 +33,55 @@
return FALSE

return is_admin(preferences.parent) || preferences.unlock_content

/datum/preference/text/ooc_pronouns
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
savefile_key = "oocpronouns"
savefile_identifier = PREFERENCE_PLAYER

/datum/preference/text/ooc_pronouns/create_default_value()
return ""

/datum/preference/text/ooc_pronouns/is_valid(value)
value = lowertext(value)

if (!value || trim(value) == "")
return TRUE

// staff/donators/mentors can choose whatever pronouns they want given, you know, we trust them to use them like a normal person
if (is_admin(usr) || usr.client.is_mentor() || usr.persistent_client.patreon.is_donator())

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (graveyard) / Run Tests (graveyard; 516)

Graveyard: /datum/unit_test/preferences_implement_everything

[05:10:18] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (icebox) / Run Tests (icebox; 516)

Ice Box Station: /datum/unit_test/preferences_implement_everything

[05:10:39] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (multiz_debug) / Run Tests (multiz_debug; 516)

MultiZ Debug: /datum/unit_test/preferences_implement_everything

[05:10:42] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Alternate Tests / run (516, 1648, runtimestation) / Run Tests (516.1648; runtimestation; 516)

Runtime Station: /datum/unit_test/preferences_implement_everything

[05:10:54] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (runtimestation) / Run Tests (runtimestation; 516)

Runtime Station: /datum/unit_test/preferences_implement_everything

[05:11:08] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (kilostation) / Run Tests (kilostation; 516)

Kilo Station: /datum/unit_test/preferences_implement_everything

[05:10:56] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (leadpoisoningstation) / Run Tests (leadpoisoningstation; 516)

Lead Poisoning Station: /datum/unit_test/preferences_implement_everything

[05:11:12] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (pubbystation) / Run Tests (pubbystation; 516)

Pubby Station: /datum/unit_test/preferences_implement_everything

[05:11:04] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (deltastation) / Run Tests (deltastation; 516)

Delta Station: /datum/unit_test/preferences_implement_everything

[05:11:11] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (heliostation) / Run Tests (heliostation; 516)

Heliostation: /datum/unit_test/preferences_implement_everything

[05:11:07] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (metastation) / Run Tests (metastation; 516)

MetaStation: /datum/unit_test/preferences_implement_everything

[05:11:13] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (boxstation) / Run Tests (boxstation; 516)

Box Station: /datum/unit_test/preferences_implement_everything

[05:11:12] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (theseus) / Run Tests (theseus; 516)

Theseus: /datum/unit_test/preferences_implement_everything

[05:11:11] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (voidraptor) / Run Tests (voidraptor; 516)

Void Raptor: /datum/unit_test/preferences_implement_everything

[05:11:21] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (tramstation) / Run Tests (tramstation; 516)

Tramstation: /datum/unit_test/preferences_implement_everything

[05:11:25] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()

Check failure on line 52 in code/modules/client/preferences/ooc.dm

View workflow job for this annotation

GitHub Actions / Integration Tests / run (blueshift) / Run Tests (blueshift; 516)

Blueshift: /datum/unit_test/preferences_implement_everything

[05:11:48] Runtime in code/modules/client/preferences/ooc.dm,52: Cannot read null.client proc name: is valid (/datum/preference/text/ooc_pronouns/is_valid) src: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns) call stack: /datum/preference/text/ooc_pro... (/datum/preference/text/ooc_pronouns): is valid("string") /datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything): Run() RunUnitTest(/datum/unit_test/preferences_i... (/datum/unit_test/preferences_implement_everything), /list (/list)) RunUnitTests() /datum/callback (/datum/callback): InvokeAsync()
to_chat(usr, span_notice("Gentle reminder that since you are staff, you can set this field however you like. But please use it in good faith."))
return TRUE

var/pronouns = splittext(value, "/")
if (length(pronouns) > MAX_PRONOUNS)
to_chat(usr, span_warning("You can only set up to [MAX_PRONOUNS] different pronouns."))
return FALSE


for (var/pronoun in pronouns)
// pronouns can end in "self" or "selfs" so allow those
// if has "self" or "selfs" at the end, remove it
if (endswith(pronoun, "selfs"))
pronoun = copytext(pronoun, 1, length(pronoun) - 5)
else if (endswith(pronoun, "self"))
pronoun = copytext(pronoun, 1, length(pronoun) - 4)
pronoun = trim(pronoun)

if (!(pronoun in GLOB.pronouns_valid))
to_chat(usr, span_warning("Invalid pronoun: [pronoun]. Valid pronouns are: [GLOB.pronouns_valid.Join(", ")]"))
return FALSE

if (length(pronouns) != length(unique_list(pronouns)))
to_chat(usr, span_warning("You cannot use the same pronoun multiple times."))
return FALSE

for (var/pronoun in GLOB.pronouns_required)
if (pronoun in pronouns)
return TRUE

to_chat(usr, span_warning("You must include at least one of the following pronouns: [GLOB.pronouns_required.Join(", ")]"))
// Someone may yell at me i dont know
return FALSE

#undef MAX_PRONOUNS
20 changes: 14 additions & 6 deletions code/modules/client/verbs/ooc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")

SSdemo.write_chat_global(GLOB.OOC_COLOR ? span_oocplain("<font color='[GLOB.OOC_COLOR]'><b>[span_prefix("OOC:")] <EM>[keyname]:</EM> <span class='message linkify'>[msg]</span></b></font>") : span_ooc(span_prefix("OOC:</span> <EM>[keyname]:</EM> <span class='message linkify'>[msg]")))

// pronouns
var/pronouns = prefs.read_preference(/datum/preference/text/ooc_pronouns)

//The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url
for(var/client/receiver as anything in GLOB.clients)
if(!receiver.prefs) // Client being created or deleted. Despite all, this can be null.
Expand All @@ -102,22 +105,27 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
var/avoid_highlight = receiver == src
if(holder)
if(!holder.fakekey || receiver.holder)
var/keyfield_pre = "[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]"
var/keyfield = conditional_tooltip_alt(keyfield_pre, pronouns, length(pronouns))
if(check_rights_for(src, R_ADMIN))
var/ooc_color = prefs.read_preference(/datum/preference/color/ooc_color)
to_chat(receiver, span_adminooc("[CONFIG_GET(flag/allow_admin_ooccolor) && ooc_color ? "<font color=[ooc_color]>" :"" ][span_prefix("OOC:")] <EM>[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:</EM> <span class='message linkify'>[msg]</span>"), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_adminooc("[CONFIG_GET(flag/allow_admin_ooccolor) && ooc_color ? "<font color=[ooc_color]>" :"" ][span_prefix("OOC:")] <EM>[keyfield]:</EM> <span class='message linkify'>[msg]</span>"), avoid_highlighting = avoid_highlight)
else
to_chat(receiver, span_adminobserverooc(span_prefix("OOC:</span> <EM>[keyname][holder.fakekey ? "/([holder.fakekey])" : ""]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_adminobserverooc(span_prefix("OOC:</span> <EM>[keyfield]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)
else
var/keyfield_pre = holder.fakekey ? holder.fakekey : key
var/keyfield = conditional_tooltip_alt(keyfield_pre, pronouns, length(pronouns))
if(GLOB.OOC_COLOR)
to_chat(receiver, span_oocplain("<font color='[GLOB.OOC_COLOR]'><b>[span_prefix("OOC:")] <EM>[holder.fakekey ? holder.fakekey : key]:</EM> <span class='message linkify'>[msg]</span></b></font>"), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_oocplain("<font color='[GLOB.OOC_COLOR]'><b>[span_prefix("OOC:")] <EM>[keyfield]:</EM> <span class='message linkify'>[msg]</span></b></font>"), avoid_highlighting = avoid_highlight)
else
to_chat(receiver, span_ooc(span_prefix("OOC:</span> <EM>[holder.fakekey ? holder.fakekey : key]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_ooc(span_prefix("OOC:</span> <EM>[keyfield]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)

else if(!(key in receiver.prefs.ignoring))
var/keyfield = conditional_tooltip_alt(keyname, pronouns, length(pronouns))
if(GLOB.OOC_COLOR)
to_chat(receiver, span_oocplain("<font color='[GLOB.OOC_COLOR]'><b>[span_prefix("OOC:")] <EM>[keyname]:</EM> <span class='message linkify'>[msg]</span></b></font>"), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_oocplain("<font color='[GLOB.OOC_COLOR]'><b>[span_prefix("OOC:")] <EM>[keyfield]:</EM> <span class='message linkify'>[msg]</span></b></font>"), avoid_highlighting = avoid_highlight)
else
to_chat(receiver, span_ooc(span_prefix("OOC:</span> <EM>[keyname]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)
to_chat(receiver, span_ooc(span_prefix("OOC:</span> <EM>[keyfield]:</EM> <span class='message linkify'>[msg]")), avoid_highlighting = avoid_highlight)

/proc/toggle_ooc(toggle = null)
if(toggle != null) //if we're specifically en/disabling ooc
Expand Down
4 changes: 4 additions & 0 deletions tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,10 @@ em {
border-bottom: 1px dashed;
}

.tooltip_alt {
border-bottom: 1px dashed;
}

.fieldset_legend {
position: relative;
max-width: 95%;
Expand Down
4 changes: 4 additions & 0 deletions tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
Original file line number Diff line number Diff line change
Expand Up @@ -992,6 +992,10 @@ h2.alert {
border-bottom: 1px dashed;
}

.tooltip_alt {
border-bottom: 1px dashed;
}

.fieldset_legend {
background: #ffffff; // Chat background color

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
import { FeatureColorInput, Feature } from '../base';
import { FeatureColorInput, Feature, FeatureShortTextInput } from '../base';

export const ooccolor: Feature<string> = {
name: 'OOC color',
category: 'CHAT',
description: 'The color of your OOC messages.',
component: FeatureColorInput,
};

export const oocpronouns: Feature<string> = {
name: 'OOC pronouns',
category: 'CHAT',
description:
'Pronouns to show in OOC when someone hovers over your username, Separated by forward slashes. Most common pronouns and neopronouns are accepted with a max of 4 (Staff are exempt from limits but please act in good faith). Example: "she/it/fae"',
component: FeatureShortTextInput,
};
Loading