diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index d6e8dcfc607..ac3de4c4b26 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -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 }, diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 52af61db88a..bc195bcf5f4 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -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")) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index e2490d1a2b6..c9ad46b1415 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -109,10 +109,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) @@ -264,13 +265,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, "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.") @@ -298,11 +292,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) diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 2199d6541d9..823de1b4173 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index b4e56f2bfb4..b847b7a73da 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -261,9 +261,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) @@ -273,8 +273,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)]" diff --git a/strings/names/operative_alias.txt b/strings/names/operative_alias.txt new file mode 100644 index 00000000000..582851fc07c --- /dev/null +++ b/strings/names/operative_alias.txt @@ -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 diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/operative_alias.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/operative_alias.tsx new file mode 100644 index 00000000000..a71f2c630f1 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/operative_alias.tsx @@ -0,0 +1,6 @@ +import { Feature, FeatureShortTextInput } from '../base'; + +export const operative_alias: Feature = { + name: 'Operative Alias', + component: FeatureShortTextInput, +};