diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 2b1252eb504..ebc0e0b028e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -489,3 +489,9 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) // The alpha we give to stuff under tiles, if they want it #define ALPHA_UNDERTILE 128 + +// Anonymous names defines (used in the secrets panel) + +#define ANON_DISABLED "" //so it's falsey +#define ANON_RANDOMNAMES "Random Default" +#define ANON_EMPLOYEENAMES "Employees" diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0eb7648be14..753ca500975 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -27,7 +27,11 @@ SUBSYSTEM_DEF(ticker) var/admin_delay_notice = "" //a message to display to anyone who tries to restart the world after a delay var/ready_for_reboot = FALSE //all roundend preparation done with, all that's left is reboot - var/triai = 0 //Global holder for Triumvirate + ///If not set to ANON_DISABLED then people spawn with a themed anon name (see anonymousnames.dm) + var/anonymousnames = ANON_DISABLED + ///Boolean to see if the game needs to set up a triumvirate ai (see tripAI.dm) + var/triai = FALSE + var/tipped = 0 //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? @@ -472,6 +476,7 @@ SUBSYSTEM_DEF(ticker) delay_end = SSticker.delay_end + anonymousnames = SSticker.anonymousnames triai = SSticker.triai tipped = SSticker.tipped selected_tip = SSticker.selected_tip diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index bac573b6e08..3a51fa91ad8 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -51,6 +51,7 @@ Make all areas powered
Make all areas unpowered
Power all SMES
+ Anonymous Names (needs to be used in the lobby)
Triple AI mode (needs to be used in the lobby)
Everyone is the traitor
Summon Guns
@@ -304,6 +305,12 @@ var/mob/living/carbon/human/H = i H.set_species(newtype) + if("anon_name") + if(!check_rights(R_FUN)) + return + usr.client.anon_names() + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Anonymous Names")) + if("tripleAI") if(!check_rights(R_FUN)) return diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm new file mode 100644 index 00000000000..9b36e887f01 --- /dev/null +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -0,0 +1,65 @@ +/client/proc/anon_names() + set category = "Admin - Events" + set name = "Setup Anonymous Names" + + + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "This option is currently only usable during pregame.") + return + + if(SSticker.anonymousnames) + SSticker.anonymousnames = ANON_DISABLED + to_chat(usr, "Disabled anonymous names.") + message_admins("[key_name_admin(usr)] has disabled anonymous names.") + return + var/list/names = list("Cancel", ANON_RANDOMNAMES, ANON_EMPLOYEENAMES) + var/result = input(usr, "Choose an anonymous theme","going dark") as null|anything in names + if(!usr || !result || result == "Cancel") + return + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "You took too long! The game has started.") + return + + SSticker.anonymousnames = result + to_chat(usr, "Enabled anonymous names. THEME: [SSticker.anonymousnames].") + message_admins("[key_name_admin(usr)] has enabled anonymous names. THEME: [SSticker.anonymousnames].") + +/** + * anonymous_name: generates a corporate random name. used in admin event tool anonymous names + * + * first letter is always a letter + * Example name = "Employee Q5460Z" + * Arguments: + * * M - mob for preferences and gender + */ +/proc/anonymous_name(mob/M) + switch(SSticker.anonymousnames) + if(ANON_RANDOMNAMES) + return M.client.prefs.pref_species.random_name(M.gender,1) + if(ANON_EMPLOYEENAMES) + var/name = "Employee " + + for(var/i in 1 to 6) + if(prob(30) || i == 1) + name += ascii2text(rand(65, 90)) //A - Z + else + name += ascii2text(rand(48, 57)) //0 - 9 + return name + +/** + * anonymous_ai_name: generates a corporate random name (but for sillycones). used in admin event tool anonymous names + * + * first letter is always a letter + * Example name = "Employee Assistant Assuming Delta" + * Arguments: + * * is_ai - boolean to decide whether the name has "Core" (AI) or "Assistant" (Cyborg) + */ +/proc/anonymous_ai_name(is_ai = FALSE) + switch(SSticker.anonymousnames) + if(ANON_RANDOMNAMES) + return pick(GLOB.ai_names) + if(ANON_EMPLOYEENAMES) + var/verbs = capitalize(pick(GLOB.ing_verbs)) + var/phonetic = pick(GLOB.phonetic_alphabet) + + return "Employee [is_ai ? "Core" : "Assistant"] [verbs] [phonetic]" diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index c74bc7b13d1..5efa306e317 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -1,20 +1,15 @@ -/client/proc/triple_ai() - set category = "Admin - Events" - set name = "Create AI Triumvirate" - - if(SSticker.current_state > GAME_STATE_PREGAME) - to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) - return - - var/datum/job/job = SSjob.GetJob("AI") - if(!job) - to_chat(usr, "Unable to locate the AI job", confidential = TRUE) - return - if(SSticker.triai) - SSticker.triai = 0 - to_chat(usr, "Only one AI will be spawned at round start.", confidential = TRUE) - message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.") - else - SSticker.triai = 1 - to_chat(usr, "There will be an AI Triumvirate at round start.", confidential = TRUE) - message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.") +/client/proc/triple_ai() + set category = "Admin - Events" + set name = "Toggle AI Triumvirate" + + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) + return + + var/datum/job/job = SSjob.GetJob("AI") + if(!job) + to_chat(usr, "Unable to locate the AI job", confidential = TRUE) + return + SSticker.triai = !SSticker.triai + to_chat(usr, "There will [SSticker.triai ? "" : "not"] be an AI Triumvirate at round start.") + message_admins("[key_name_admin(usr)] has toggled [SSticker.triai ? "on" : "off"] triple AIs at round start.") diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 0eca408139e..ccd18dd72a6 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -35,7 +35,10 @@ H.forceMove(lateJoinCore.loc) qdel(lateJoinCore) var/mob/living/silicon/ai/AI = H - AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. + if(SSticker.anonymousnames) + AI.fully_replace_character_name(AI.real_name, anonymous_ai_name(is_ai = TRUE)) + else + AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. //what is this no energy attitude man AI.set_core_display_icon(null, M.client) //we may have been created after our borg diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 1d4886e6609..ad3ebb912fb 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -476,6 +476,7 @@ var/mob/living/carbon/human/H = new(loc) var/frn = CONFIG_GET(flag/force_random_names) + var/admin_anon_names = SSticker.anonymousnames if(!frn) frn = is_banned_from(ckey, "Appearance") if(QDELETED(src)) @@ -484,6 +485,10 @@ client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) + if(admin_anon_names)//overrides random name because it achieves the same effect and is an admin enabled event tool + client.prefs.random_character() + client.prefs.real_name = anonymous_name(src) + var/is_antag if(mind in GLOB.pre_setup_antags) is_antag = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 675c2953644..706c3c891e1 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -229,9 +229,11 @@ var/changed_name = "" if(custom_name) changed_name = custom_name - if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) - if(apply_pref_name("cyborg", C)) - return //built in camera handled in proc + if(SSticker.anonymousnames) //only robotic renames will allow for anything other than the anonymous one + changed_name = anonymous_ai_name(is_ai = FALSE) + if(!changed_name && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) + apply_pref_name("cyborg", C) + return //built in camera handled in proc if(!changed_name) changed_name = get_standard_name() diff --git a/tgstation.dme b/tgstation.dme index fe374a6f6f9..646e0adef1c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1288,6 +1288,7 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" +#include "code\modules\admin\verbs\anonymousnames.dm" #include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\beakerpanel.dm" #include "code\modules\admin\verbs\bluespacearty.dm"