Files
Bubberstation/code/datums/id_trim/outfits.dm
Rhials 2e7be24aad Honor-riffic: Adds toggleable honorific titles to certain job ID trims (#88309)
## About The Pull Request

This implements a new, minor, but flavorful system to IDs -- Honorifics.
Does going by your full name not suit you? Do you demand respect for the
position on Space Station 13 that you've earned and want to be addressed
by your title? Do you take yourself WAY too seriously? This is for you.

Toggled by ctrl-clicking your ID, honorifics append a title to your name
depending on your position. Certain titles (Captain, Officer, Doctor,
etc.) will only append to the start (replacing or including the
first/last name), while others (PhD., Esq.) can only be appended at the
end.


![image](https://github.com/user-attachments/assets/3ae22744-5f6e-4d12-9ea8-ecd60456b5a9)

Each job TRIM has a set honorific and positions it can be assigned to. A
doctor can be "Doctor Peterson" or "Doctor Peterson Bungle" or "Doctor
Bungle". A Lawyer can only choose to be "Peterson Bungle, Esq.".

This will only occur when the speaker's voice is the same identity as
the one written on the ID's registered name. This should not interfere
with Unknown voice obfuscation, stolen ID shenanigans, or anything
gameplay-oriented. Hopefully.

This feature is also mononym friendly!


![image](https://github.com/user-attachments/assets/21555023-5dd0-49e0-acd5-2dd0a06ae621)

This also makes `first_name()` and `last_name()` global procs, and adds
one to check if a passed string has spaces/dashes/whitespace/whatever.

All of this is compatible with ID name changes, but the voice name must
align with the card name to display the honorific. If you are "Peter
Stinkypants" with your honorific set to display "Doctor Stinkypants",
and your ID's registered name is changed to "Peter Stinker", you show up
as "Peter Stinkypants (as Peter Stinker)" with no honorific provided. If
you become "Peter Stinker" and have a "Peter Stinker" ID, you will show
up as "Doctor Stinker" once again.

That all make sense? Great.

<details>
<summary>So about the ID name stuff...</summary>
<br>
So, when you activate an honorific on your ID, it DOES change the actual
object's name. Not the registered name, but the ID's name will go from
"Peter Dawson's ID card" to "Captain Dawson's ID card" when an honorific
is applied. This, as far as I've tested, does not mess with anything
important, but I can totally see it doing so in a way that makes
ctrl-Fing through logs harder than it needs to be. This could probably
be changed without too much effort so if the issue does arise I can fix
it. If not I am totally fine with reverting this PR until I can make it
work (if I can at all).
<br>


Admittedly this doesn't have much testing with holopads/radios, but I'm
confident the message composure is handled well enough to only display
the right names under the right circumstances. If this fucks up logging
or naming in any way tell me ASAP because I have a sinking feeling it
will in a way more catastrophic than I could ever predict. This PR has
been tested thoroughly but I have my limits.
</details>
2025-01-20 20:18:49 +00:00

81 lines
2.2 KiB
Plaintext

/**
* This file contains all the trims associated with outfits.
*/
/// Trim for the assassin outfit.
/datum/id_trim/reaper_assassin
assignment = "Reaper"
trim_state = "trim_ert_deathcommando"
department_color = COLOR_DARK
subdepartment_color = COLOR_RED // I AM THE VIOLENCE
/datum/id_trim/highlander/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_ALL_STATION))
/// Trim for the mobster outfit.
/datum/id_trim/mobster
assignment = "Mobster"
trim_state = "trim_assistant"
/// Trim for VR outfits.
/datum/id_trim/vr
assignment = "VR Participant"
/datum/id_trim/vr/New()
. = ..()
access |= SSid_access.get_region_access_list(list(REGION_ALL_STATION))
/// Trim for VR outfits.
/datum/id_trim/vr/operative
assignment = "Syndicate VR Operative"
department_color = COLOR_RED
subdepartment_color = COLOR_RED
/datum/id_trim/vr/operative/New()
. = ..()
access |= list(ACCESS_SYNDICATE, ACCESS_MAINT_TUNNELS)
/// Trim for the Tunnel Clown! outfit. Has all access.
/datum/id_trim/tunnel_clown
assignment = "Tunnel Clown!"
trim_state = "trim_clown"
department_color = COLOR_MAGENTA
subdepartment_color = COLOR_MAGENTA
/datum/id_trim/tunnel_clown/New()
. = ..()
access |= SSid_access.get_region_access_list(list(REGION_ALL_STATION))
/// Trim for Bounty Hunters NOT hired by centcom. (?)
/datum/id_trim/bounty_hunter
assignment = "Bounty Hunter"
trim_state = "trim_deathcommando"
department_color = COLOR_PRISONER_ORANGE
subdepartment_color = COLOR_PRISONER_BLACK
access = list(ACCESS_HUNTER)
/// Trim for player controlled avatars in the Virtual Domain.
/datum/id_trim/bit_avatar
assignment = "Bit Avatar"
trim_state = "trim_bitavatar"
department_color = COLOR_BLACK
subdepartment_color = COLOR_GREEN
sechud_icon_state = SECHUD_BITAVATAR
/// Trim for cyber police in the Virtual Domain.
/datum/id_trim/cyber_police
assignment = ROLE_CYBER_POLICE
trim_state = "trim_deathcommando"
department_color = COLOR_BLACK
subdepartment_color = COLOR_GREEN
threat_modifier = -1 // Cops recognise cops
honorifics = list("CISO")
honorific_positions = HONORIFIC_POSITION_FIRST | HONORIFIC_POSITION_LAST | HONORIFIC_POSITION_NONE
/datum/id_trim/cyber_police/New()
. = ..()
access |= SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))