Nukie Aliases and Some Hairspray (#79653)

## About The Pull Request

Nuclear operatives now receive an alias for their first name, instead of
a default human name. This alias is randomly selected, or can be set in
your name preferences.


![image](https://github.com/tgstation/tgstation/assets/28870487/2584b625-4668-4738-a662-8205476fac2f)

This does not affect Operative Leaders selecting the team's last name.
This means that **operative names are now "[Alias chosen by player]
[Team name chosen by leader]".**

There is a list of default aliases, in case no alias has been selected.
I randomly came up with a bunch of stuff from the top of my head and put
it in a text file. If you think of something better, choose it yourself!

**OH, ALSO:**

There's some hair dye in the Firebase dorms now. Useful if you want to
further differentiate between your Operative/Crew characters, or just
look pretty.
## Why It's Good For The Game

No longer shall nukies be "your character but with a different name".
Now you can give yourself a bit more identity instead of just a random
name.

More customization options means more opportunities for people doing
interesting stuff, and to branch away from the beaten path of boring
meta strats.
## Changelog
🆑 Rhials
add: Nuclear Operatives, in an attempt to appeal to the more "tacticool"
members of their cause, have begun using callsigns to designate
themselves. Check your preferences to set your Operative Alias!
qol: At the request of the more vain members of the cause, hair dye has
been added to the Operative Firebase dorms.
/🆑
This commit is contained in:
Rhials
2023-11-19 00:53:52 +00:00
committed by GitHub
parent 23997e5e31
commit 33b82e8bef
7 changed files with 177 additions and 19 deletions
@@ -320,6 +320,10 @@
"dI" = (
/obj/structure/dresser,
/obj/structure/noticeboard/directional/south,
/obj/item/dyespray{
pixel_x = -3;
pixel_y = 13
},
/turf/open/floor/iron/smooth_half{
dir = 1
},
@@ -852,6 +856,10 @@
"jq" = (
/obj/structure/dresser,
/obj/structure/noticeboard/directional/north,
/obj/item/dyespray{
pixel_x = -2;
pixel_y = 15
},
/turf/open/floor/iron/smooth_half{
dir = 1
},
+1
View File
@@ -28,6 +28,7 @@ GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicat
GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt"))
GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt"))
GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt"))
GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt"))
GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
+10 -15
View File
@@ -104,10 +104,11 @@
/datum/antagonist/nukeop/proc/give_alias()
if(nuke_team?.syndicate_name)
var/mob/living/carbon/human/H = owner.current
if(istype(H)) // Reinforcements get a real name
var/chosen_name = H.dna.species.random_name(H.gender,0,nuke_team.syndicate_name)
H.fully_replace_character_name(H.real_name,chosen_name)
var/mob/living/carbon/human/human_to_rename = owner.current
if(istype(human_to_rename)) // Reinforcements get a real name
var/first_name = owner.current.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases)
var/chosen_name = "[first_name] [nuke_team.syndicate_name]"
human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name)
else
var/number = 1
number = nuke_team.members.Find(owner)
@@ -259,13 +260,6 @@
H.put_in_hands(nuke_code_paper, TRUE)
H.update_icons()
/datum/antagonist/nukeop/leader/give_alias()
title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
if(nuke_team?.syndicate_name)
owner.current.real_name = "[nuke_team.syndicate_name] [title]"
else
owner.current.real_name = "Syndicate [title]"
/datum/antagonist/nukeop/leader/greet()
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE)
to_chat(owner, "<span class='warningplain'><B>You are the Syndicate [title] for this mission. You are responsible for guiding the team and your ID is the only one who can open the launch bay doors.</B></span>")
@@ -293,11 +287,12 @@
name = "[syndicate_name] Team"
for(var/I in members)
var/datum/mind/synd_mind = I
var/mob/living/carbon/human/H = synd_mind.current
if(!istype(H))
var/mob/living/carbon/human/human_to_rename = synd_mind.current
if(!istype(human_to_rename))
continue
var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name)
H.fully_replace_character_name(H.real_name,chosen_name)
var/first_name = human_to_rename.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases)
var/chosen_name = "[first_name] [syndicate_name]"
human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name)
/datum/antagonist/nukeop/leader/proc/ask_name()
var/randomname = pick(GLOB.last_names)
+22
View File
@@ -155,3 +155,25 @@
/datum/preference/name/bible/create_default_value()
return DEFAULT_BIBLE
/// The first name given to nuclear operative antagonists. The last name will be chosen by the team leader.
/datum/preference/name/operative_alias
savefile_key = "operative_alias"
allow_numbers = TRUE //You can get a little wacky with your alias nobody will judge you
explanation = "Operative Alias"
group = "antagonists"
/datum/preference/name/operative_alias/create_default_value()
return pick(GLOB.operative_aliases)
/datum/preference/name/operative_alias/is_accessible(datum/preferences/preferences)
. = ..()
if(!.)
return FALSE
// If one of the roles is ticked in the antag prefs menu, this option will show.
var/static/list/ops_roles = list(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE, ROLE_OPERATIVE_MIDROUND, ROLE_CLOWN_OPERATIVE)
if(length(ops_roles & preferences.be_special))
return TRUE
return FALSE
@@ -256,9 +256,9 @@ GLOBAL_LIST_EMPTY(features_by_species)
* Arguments:
* * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names.
* * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station.
* * lastname - Does this species' naming system adhere to the last name system? Set to false if it doesn't.
* * last_name - Do we use a given last name or pick a random new one?
*/
/datum/species/proc/random_name(gender,unique,lastname)
/datum/species/proc/random_name(gender, unique, last_name)
if(unique)
return random_unique_name(gender)
@@ -268,8 +268,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
else
randname = pick(GLOB.first_names_female)
if(lastname)
randname += " [lastname]"
if(last_name)
randname += " [last_name]"
else
randname += " [pick(GLOB.last_names)]"
+126
View File
@@ -0,0 +1,126 @@
Agent
Agony
Alias
Alpha
Argo
Barker
Batter
Beef
Beetle
Bomber
Bonsai
Boss
Boston
Bovine
Bravo
Caboose
Callsign
Carmack
Carolina
Carp
Chains
Charlie
Church
Collar
Comedian
Crash
Creeper
Cretin
Criminal
Cyborg
Dallas
Delta
Doc
Donk
Drowning
Dude
Dwarf
Echo
Emo
Eva
Finger
Fish
Fitzgerald
Flash
Flyboy
Foxtrot
Freak
Freeman
Fugitive
Gaffer
Giant
Goalie
Golf
Gorbino
Green
Grime
Guy
Hologram
Hotel
Houston
Indica
Ion
Jacket
Jeremy
Jones
Kars
Legion
Librarian
Lightbringer
Lighter
Lightning
Looper
Lover
Marksman
Maurauder
Misty
Musketeer
Mycus
Neutron
Nightmare
Peacekeeper
Peddler
Point
Pooh
Private
Psycho
Pyro
Red
Revenant
Rocker
Ronin
Sack
Samson
Sarge
Scorch
Scout
Scream
Scum
Serenity
Shade
Shadow
Shark
Shocker
Shooter
Shrieker
Shrike
Silas
Silence
Simmons
Slider
Smoke
Snake
Stalker
Superfly
Suspect
Swiper
Tank
Telecrystal
Tex
Thirteen
Twister
Unusual
Vixen
White
Wilson
Winters
@@ -0,0 +1,6 @@
import { Feature, FeatureShortTextInput } from '../base';
export const operative_alias: Feature<string> = {
name: 'Operative Alias',
component: FeatureShortTextInput,
};