diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index b1146614366..3e5777cde52 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -43,6 +43,9 @@
/// signals from globally accessible objects
+///from SSJob when DivideOccupations is called
+#define COMSIG_OCCUPATIONS_DIVIDED "occupations_divided"
+
///from SSsun when the sun changes position : (azimuth)
#define COMSIG_SUN_MOVED "sun_moved"
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index dfed7c9ad98..862f3c74c8b 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -25,6 +25,7 @@ GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.t
GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
+GLOBAL_LIST_INIT(martial_prefix, world.file2list("strings/names/martial_prefix.txt"))
GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt"))
GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt"))
GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt"))
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index d4c1ffeda26..c3c647aa192 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -281,12 +281,7 @@ SUBSYSTEM_DEF(job)
//Setup new player list and get the jobs list
JobDebug("Running DO")
- //Holder for Triumvirate is stored in the SSticker, this just processes it
- if(SSticker.triai)
- for(var/datum/job/ai/A in occupations)
- A.spawn_positions = 3
- for(var/obj/effect/landmark/start/ai/secondary/S in GLOB.start_landmarks_list)
- S.latejoin_active = TRUE
+ SEND_SIGNAL(src, COMSIG_OCCUPATIONS_DIVIDED)
//Get the players who are ready
for(var/i in GLOB.new_player_list)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 021fcab7d99..ccda4edc811 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -26,11 +26,6 @@ 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
- ///If set to an anonymous theme datum then people spawn with said themed anon name (see anonymousnames.dm)
- var/datum/anonymous_theme/anonymousnames
- ///Boolean to see if the game needs to set up a triumvirate ai (see tripAI.dm)
- var/triai = FALSE
-
var/tipped = FALSE //Did we broadcast the tip of the day yet?
var/selected_tip // What will be the tip of the day?
@@ -522,8 +517,6 @@ 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/verbs/ai_triumvirate.dm b/code/modules/admin/verbs/ai_triumvirate.dm
new file mode 100644
index 00000000000..5d310366a43
--- /dev/null
+++ b/code/modules/admin/verbs/ai_triumvirate.dm
@@ -0,0 +1,48 @@
+
+///global reference to the current theme, if there is one.
+GLOBAL_DATUM(triple_ai_controller, /datum/triple_ai_controller)
+
+/**
+ * The triple ai controller handles the admin triple AI mode, if enabled.
+ * It is first created when "Toggle AI Triumvirate" triggers it, and it can be referenced from GLOB.triple_ai_controller
+ * After it handles roundstart business, it cleans itself up.
+ */
+/datum/triple_ai_controller
+
+/datum/triple_ai_controller/New()
+ . = ..()
+ RegisterSignal(SSjob, COMSIG_OCCUPATIONS_DIVIDED, .proc/on_occupations_divided)
+
+/datum/triple_ai_controller/proc/on_occupations_divided(datum/source)
+ SIGNAL_HANDLER
+
+ for(var/datum/job/ai/ai_datum in SSjob.occupations)
+ ai_datum.spawn_positions = 3
+ for(var/obj/effect/landmark/start/ai/secondary/secondary_ai_spawn in GLOB.start_landmarks_list)
+ secondary_ai_spawn.latejoin_active = TRUE
+ qdel(src)
+
+/datum/triple_ai_controller/Destroy(force)
+ UnregisterSignal(SSjob, COMSIG_OCCUPATIONS_DIVIDED)
+ GLOB.triple_ai_controller = null
+ . = ..()
+
+/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
+
+ if(!GLOB.triple_ai_controller)
+ GLOB.triple_ai_controller = new()
+ else
+ QDEL_NULL(GLOB.triple_ai_controller)
+ to_chat(usr, "There will[GLOB.triple_ai_controller ? "" : "not"] be an AI Triumvirate at round start.")
+ message_admins("[key_name_admin(usr)] has toggled [GLOB.triple_ai_controller ? "on" : "off"] triple AIs at round start.")
diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm
index c46425e0a95..aae4d24d65c 100644
--- a/code/modules/admin/verbs/anonymousnames.dm
+++ b/code/modules/admin/verbs/anonymousnames.dm
@@ -1,4 +1,7 @@
+///global reference to the current theme, if there is one.
+GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme)
+
/*Anon names! A system to make all players have random names/aliases instead of their static, for admin events/fuckery!
contains both the anon names proc and the datums for each.
@@ -8,25 +11,12 @@
set category = "Admin.Events"
set name = "Setup Anonymous Names"
- if(SSticker.anonymousnames)
+ if(GLOB.current_anonymous_theme)
var/response = tgui_alert(usr, "Anon mode is currently enabled. Disable?", "cold feet", list("Disable Anon Names", "Keep it Enabled"))
if(response != "Disable Anon Names")
return
- QDEL_NULL(SSticker.anonymousnames)
message_admins("[key_name_admin(usr)] has disabled anonymous names.")
- if(SSticker.current_state < GAME_STATE_PREGAME)
- return
- priority_announce("Names and Identities have been restored.", "Identity Restoration", SSstation.announcer.get_rand_alert_sound())
- for(var/mob/living/player in GLOB.player_list)
- if(!player.mind || (!ishuman(player) && !issilicon(player)) || !SSjob.GetJob(player.mind.assigned_role))
- continue
- var/old_name = player.real_name //before restoration
- if(issilicon(player))
- var/is_AI = isAI(player)
- player.apply_pref_name("[is_AI ? "ai" : "cyborg"]", player.client)
- else
- player.client.prefs.copy_to(player, antagonist = (LAZYLEN(player.mind.antag_datums) > 0), is_latejoiner = FALSE)
- player.fully_replace_character_name(old_name, player.real_name) //this changes IDs and PDAs and whatnot
+ QDEL_NULL(GLOB.current_anonymous_theme)
return
var/list/input_list = list("Cancel")
for(var/_theme in typesof(/datum/anonymous_theme))
@@ -35,24 +25,68 @@
var/result = input(usr, "Choose an anonymous theme","going dark") as null|anything in input_list
if(!usr || !result || result == "Cancel")
return
- result = input_list[result]
+ var/datum/anonymous_theme/chosen_theme = input_list[result]
+ var/extras_enabled = "No"
var/alert_players = "No"
if(SSticker.current_state > GAME_STATE_PREGAME) //before anonnames is done, for asking a sleep
- alert_players = tgui_alert(usr, "Alert crew? These are IC Themed FROM centcom.", "2016 admins didn't miss roundstart", list("Yes", "No"))
- SSticker.anonymousnames = new result()
- if(alert_players == "Yes")
- priority_announce(SSticker.anonymousnames.announcement_alert, "Identity Loss", SSstation.announcer.get_rand_alert_sound())
+ if(initial(chosen_theme.extras_enabled))
+ extras_enabled = tgui_alert(usr, extras_enabled, "extras", list("Yes", "No"))
+ alert_players = tgui_alert(usr, "Alert crew? These are IC Themed FROM centcom.", "announcement", list("Yes", "No"))
+ //turns "Yes" and "No" into TRUE and FALSE
+ extras_enabled = extras_enabled == "Yes"
+ alert_players = alert_players == "Yes"
+ GLOB.current_anonymous_theme = new chosen_theme(extras_enabled, alert_players)
+ message_admins("[key_name_admin(usr)] has enabled anonymous names. THEME: [GLOB.current_anonymous_theme].")
+
+/* Datum singleton initialized by the client proc to hold the naming generation */
+/datum/anonymous_theme
+ ///name of the anonymous theme, seen by admins pressing buttons to enable this
+ var/name = "Randomized Names"
+ ///if admins get the option to enable extras, this is the prompt to enable it.
+ var/extras_prompt
+ ///extra non-name related fluff that is optional for admins to enable. One example is the wizard theme giving everyone random robes.
+ var/extras_enabled
+
+/datum/anonymous_theme/New(extras_enabled = FALSE, alert_players = TRUE)
+ . = ..()
+ src.extras_enabled = extras_enabled
+ if(extras_enabled)
+ theme_extras()
+ if(alert_players)
+ announce_to_all_players()
anonymous_all_players()
- message_admins("[key_name_admin(usr)] has enabled anonymous names. THEME: [SSticker.anonymousnames].")
+/datum/anonymous_theme/Destroy(force)
+ restore_all_players()
+ . = ..()
+
+/**
+ * theme_extras: optional effects enabled here from a proc that will trigger once on creation of anon mode.
+ */
+/datum/anonymous_theme/proc/theme_extras()
+ return
+
+/**
+ * player_extras: optional effects enabled here from a proc that will trigger for every player renamed.
+ */
+/datum/anonymous_theme/proc/player_extras(mob/living/player)
+ return
+
+/**
+ * announce_to_all_players: sends an annonuncement.
+ *
+ * it's in a proc so it can be a non-constant expression.
+ */
+/datum/anonymous_theme/proc/announce_to_all_players()
+ priority_announce("A recent bureaucratic error in the Organic Resources Department has resulted in a necessary full recall of all identities and names until further notice.", "Identity Loss", SSstation.announcer.get_rand_alert_sound())
/**
* anonymous_all_players: sets all crewmembers on station anonymous.
*
- * why is this a proc instead of just part of above? events use this as well.
+ * called when the anonymous theme is created regardless of extra theming
*/
-/proc/anonymous_all_players()
- var/datum/anonymous_theme/theme = SSticker.anonymousnames
+/datum/anonymous_theme/proc/anonymous_all_players()
+ var/datum/anonymous_theme/theme = GLOB.current_anonymous_theme
for(var/mob/living/player in GLOB.player_list)
if(!player.mind || (!ishuman(player) && !issilicon(player)) || !SSjob.GetJob(player.mind.assigned_role))
continue
@@ -62,11 +96,25 @@
var/original_name = player.real_name //id will not be changed if you do not do this
randomize_human(player) //do this first so the special name can be given
player.fully_replace_character_name(original_name, theme.anonymous_name(player))
+ if(extras_enabled)
+ player_extras(player)
-/* Datum singleton initialized by the client proc to hold the naming generation */
-/datum/anonymous_theme
- var/name = "Randomized Names"
- var/announcement_alert = "A recent bureaucratic error in the Organic Resources Department has resulted in a necessary full recall of all identities and names until further notice."
+/**
+ * restore_all_players: sets all crewmembers on station back to their preference name.
+ *
+ * called when the anonymous theme is removed regardless of extra theming
+ */
+/datum/anonymous_theme/proc/restore_all_players()
+ priority_announce("Names and Identities have been restored.", "Identity Restoration", SSstation.announcer.get_rand_alert_sound())
+ for(var/mob/living/player in GLOB.player_list)
+ if(!player.mind || (!ishuman(player) && !issilicon(player)) || !SSjob.GetJob(player.mind.assigned_role))
+ continue
+ var/old_name = player.real_name //before restoration
+ if(issilicon(player))
+ player.apply_pref_name("[isAI(player) ? "ai" : "cyborg"]", player.client)
+ else
+ player.client.prefs.copy_to(player, antagonist = (LAZYLEN(player.mind.antag_datums) > 0), is_latejoiner = FALSE)
+ player.fully_replace_character_name(old_name, player.real_name) //this changes IDs and PDAs and whatnot
/**
* anonymous_name: generates a random name, based off of whatever the round's anonymousnames is set to.
@@ -74,11 +122,13 @@
* examples:
* Employee = "Employee Q5460Z"
* Wizards = "Gulstaff of Void"
+ * Spider Clan = "Initiate Hazuki"
+ * Stations? = "Refactor Port One"
* Arguments:
- * * M - mob for preferences and gender
+ * * target - mob for preferences and gender
*/
-/datum/anonymous_theme/proc/anonymous_name(mob/M)
- return M.client.prefs.pref_species.random_name(M.gender,1)
+/datum/anonymous_theme/proc/anonymous_name(mob/target)
+ return target.client.prefs.pref_species.random_name(target.gender,1)
/**
* anonymous_ai_name: generates a random name, based off of whatever the round's anonymousnames is set to (but for sillycones).
@@ -86,6 +136,8 @@
* examples:
* Employee = "Employee Assistant Assuming Delta"
* Wizards = "Crystallized Knowledge Nexus +23"
+ * Spider Clan = "'Leaping Viper' MSO"
+ * Stations? = "System Port 10"
* Arguments:
* * is_ai - boolean to decide whether the name has "Core" (AI) or "Assistant" (Cyborg)
*/
@@ -94,10 +146,12 @@
/datum/anonymous_theme/employees
name = "Employees"
- announcement_alert = "As punishment for this station's poor productivity when compared to neighbor stations, names and identities will be restricted until further notice."
-/datum/anonymous_theme/employees/anonymous_name(mob/M)
- var/is_head_of_staff = (M.mind.assigned_role in GLOB.command_positions)
+/datum/anonymous_theme/employees/announce_to_all_players()
+ priority_announce("As punishment for this station's poor productivity when compared to neighbor stations, names and identities will be restricted until further notice.", "Finance Report", SSstation.announcer.get_rand_alert_sound())
+
+/datum/anonymous_theme/employees/anonymous_name(mob/target)
+ var/is_head_of_staff = (target.mind.assigned_role in GLOB.command_positions)
var/name = "[is_head_of_staff ? "Manager" : "Employee"] "
for(var/i in 1 to 6)
if(prob(30) || i == 1)
@@ -113,12 +167,108 @@
/datum/anonymous_theme/wizards
name = "Wizard Academy"
- announcement_alert = "Your station has been caught by a Wizard Federation Memetic Hazard. You are not y0urself, and yo% a2E 34!NOT4--- Welcome to the Academy, apprentices!"
+ extras_prompt = "Give everyone random robes too?"
-/datum/anonymous_theme/wizards/anonymous_name(mob/M)
+/datum/anonymous_theme/wizards/player_extras(mob/living/player)
+ var/random_path = pick(
+ /obj/item/storage/box/wizard_kit,
+ /obj/item/storage/box/wizard_kit/red,
+ /obj/item/storage/box/wizard_kit/yellow,
+ /obj/item/storage/box/wizard_kit/magusred,
+ /obj/item/storage/box/wizard_kit/magusblue,
+ /obj/item/storage/box/wizard_kit/black\
+ )
+ player.put_in_hands(new random_path())
+
+/datum/anonymous_theme/wizards/announce_to_all_players()
+ priority_announce("Your station has been caught by a Wizard Federation Memetic Hazard. You are not y0urself, and yo% a2E 34!NOT4--- Welcome to the Academy, apprentices!", "Memetic Hazard", SSstation.announcer.get_rand_alert_sound())
+
+/datum/anonymous_theme/wizards/anonymous_name(mob/target)
var/wizard_name_first = pick(GLOB.wizard_first)
var/wizard_name_second = pick(GLOB.wizard_second)
return "[wizard_name_first] [wizard_name_second]"
/datum/anonymous_theme/wizards/anonymous_ai_name(is_ai = FALSE)
return "Crystallized Knowledge [is_ai ? "Nexus" : "Sliver"] +[rand(1,99)]" //Could two people roll the same number? Yeah, probably. Do I CARE? Nawww
+
+/obj/item/storage/box/wizard_kit
+ name = "Generic Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/PopulateContents()
+ new /obj/item/clothing/head/wizard(src)
+ new /obj/item/clothing/suit/wizrobe(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/wizard_kit/red
+ name = "Evocation Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/red/PopulateContents()
+ new /obj/item/clothing/head/wizard/red(src)
+ new /obj/item/clothing/suit/wizrobe/red(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/wizard_kit/yellow
+ name = "Translocation Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/yellow/PopulateContents()
+ new /obj/item/clothing/head/wizard/yellow(src)
+ new /obj/item/clothing/suit/wizrobe/yellow(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/wizard_kit/magusred
+ name = "Conjuration Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/yellow/PopulateContents()
+ new /obj/item/clothing/head/wizard/magus(src)
+ new /obj/item/clothing/suit/wizrobe/magusred(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/wizard_kit/magusblue
+ name = "Transmutation Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/yellow/PopulateContents()
+ new /obj/item/clothing/head/wizard/magus(src)
+ new /obj/item/clothing/suit/wizrobe/magusblue(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/obj/item/storage/box/wizard_kit/black
+ name = "Necromancy Wizard Cosplay Kit"
+
+/obj/item/storage/box/wizard_kit/black/PopulateContents()
+ new /obj/item/clothing/head/wizard/black(src)
+ new /obj/item/clothing/suit/wizrobe/black(src)
+ new /obj/item/clothing/shoes/sandal(src)
+
+/datum/anonymous_theme/spider_clan
+ name = "Spider Clan"
+
+/datum/anonymous_theme/spider_clan/anonymous_name(mob/target)
+ return "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]"
+
+/datum/anonymous_theme/spider_clan/announce_to_all_players()
+ priority_announce("Your station has been sold out to the Spider Clan. Your new designations will be applied now.", "New Management", SSstation.announcer.get_rand_alert_sound())
+
+/datum/anonymous_theme/spider_clan/anonymous_ai_name(is_ai = FALSE)
+ var/posibrain_name = pick(GLOB.posibrain_names)
+ if(is_ai)
+ return "Shaolin Templemaster [posibrain_name]"
+ else
+ var/martial_prefix = capitalize(pick(GLOB.martial_prefix))
+ var/martial_style = pick("Monkey", "Tiger", "Viper", "Mantis", "Crane", "Panda", "Bat", "Bear", "Centipede", "Frog")
+ return "\"[martial_prefix] [martial_style]\" [posibrain_name]"
+
+/datum/anonymous_theme/station
+ name = "Stations?"
+ extras_prompt = "Also flip station name?"
+
+/datum/anonymous_theme/station/theme_extras()
+ set_station_name("[pick(GLOB.first_names)] [pick(GLOB.last_names)]")
+
+/datum/anonymous_theme/station/announce_to_all_players()
+ priority_announce("Confirmed level 9 reality error event near [station_name()]. All personnel must try their best to carry on, as to not trigger more reality events by accident.", "Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg')
+
+/datum/anonymous_theme/station/anonymous_name(mob/target)
+ return new_station_name()
+
+/datum/anonymous_theme/station/anonymous_ai_name(is_ai = FALSE)
+ return new_station_name()
diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm
deleted file mode 100644
index 58990187eeb..00000000000
--- a/code/modules/admin/verbs/tripAI.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/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/events/wizard/identity_spoof.dm b/code/modules/events/wizard/identity_spoof.dm
index e7fcc1bf0ee..3032834b63a 100644
--- a/code/modules/events/wizard/identity_spoof.dm
+++ b/code/modules/events/wizard/identity_spoof.dm
@@ -8,11 +8,10 @@
. = ..()
if(.)
return FALSE
- if(SSticker.anonymousnames) //already anonymous, ABORT ABORT
+ if(GLOB.current_anonymous_theme) //already anonymous, ABORT ABORT
return FALSE
/datum/round_event/wizard/identity_spoof/start()
- if(SSticker.anonymousnames)
- QDEL_NULL(SSticker.anonymousnames)
- SSticker.anonymousnames = new /datum/anonymous_theme/wizards()
- anonymous_all_players()
+ if(GLOB.current_anonymous_theme)
+ QDEL_NULL(GLOB.current_anonymous_theme)
+ GLOB.current_anonymous_theme = new /datum/anonymous_theme/wizards(extras_enabled = TRUE, alert_players = TRUE)
diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm
index ad1c21d434d..8a48a9b6a6e 100644
--- a/code/modules/jobs/job_types/ai.dm
+++ b/code/modules/jobs/job_types/ai.dm
@@ -36,8 +36,8 @@
H.forceMove(lateJoinCore.loc)
qdel(lateJoinCore)
var/mob/living/silicon/ai/AI = H
- if(SSticker.anonymousnames)
- AI.fully_replace_character_name(AI.real_name, SSticker.anonymousnames.anonymous_ai_name(TRUE))
+ if(GLOB.current_anonymous_theme)
+ AI.fully_replace_character_name(AI.real_name, GLOB.current_anonymous_theme.anonymous_ai_name(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)
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 8b711ef3172..13011647bf7 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -439,7 +439,6 @@
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))
@@ -454,9 +453,9 @@
client.prefs.copy_to(H, antagonist = is_antag, is_latejoiner = transfer_after)
- if(admin_anon_names)//overrides random name because it achieves the same effect and is an admin enabled event tool
+ if(GLOB.current_anonymous_theme)//overrides random name because it achieves the same effect and is an admin enabled event tool
randomize_human(H)
- H.fully_replace_character_name(null, SSticker.anonymousnames.anonymous_name(H))
+ H.fully_replace_character_name(null, GLOB.current_anonymous_theme.anonymous_name(H))
H.dna.update_dna_identity()
if(mind)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 6417458c34e..703f9f44cb1 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -170,8 +170,8 @@
var/changed_name = ""
if(custom_name)
changed_name = custom_name
- if(SSticker.anonymousnames) //only robotic renames will allow for anything other than the anonymous one
- changed_name = SSticker.anonymousnames.anonymous_ai_name(FALSE)
+ if(GLOB.current_anonymous_theme) //only robotic renames will allow for anything other than the anonymous one
+ changed_name = GLOB.current_anonymous_theme.anonymous_ai_name(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
diff --git a/strings/names/martial_prefix.txt b/strings/names/martial_prefix.txt
new file mode 100644
index 00000000000..1c8a084b11d
--- /dev/null
+++ b/strings/names/martial_prefix.txt
@@ -0,0 +1,22 @@
+leaping
+raging
+burning
+silent
+mentored
+drunken
+spotted
+resting
+swimming
+battered
+unbroken
+troubled
+sneaking
+charming
+flying
+soaring
+angry
+scared
+worried
+emperor
+curious
+blood-spattered
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index 4f3caa24db9..16c5e6722ef 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1563,6 +1563,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\ai_triumvirate.dm"
#include "code\modules\admin\verbs\anonymousnames.dm"
#include "code\modules\admin\verbs\atmosdebug.dm"
#include "code\modules\admin\verbs\beakerpanel.dm"
@@ -1596,7 +1597,6 @@
#include "code\modules\admin\verbs\selectequipment.dm"
#include "code\modules\admin\verbs\shuttlepanel.dm"
#include "code\modules\admin\verbs\spawnobjasmob.dm"
-#include "code\modules\admin\verbs\tripAI.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm"