diff --git a/_maps/Prefab/Departments.dmm b/_maps/Prefab/Departments.dmm
index bf4f39c690325..a407814bb9f91 100644
--- a/_maps/Prefab/Departments.dmm
+++ b/_maps/Prefab/Departments.dmm
@@ -360,20 +360,6 @@
"ic" = (
/turf/open/floor/wood,
/area/security/detectives_office)
-"ir" = (
-/obj/effect/turf_decal/tile/purple/fourcorners/contrasted,
-/obj/item/reagent_containers/cup/bucket{
- pixel_x = 11;
- pixel_y = -5
- },
-/obj/item/mop{
- pixel_x = -6;
- pixel_y = 3
- },
-/obj/item/key/janitor,
-/obj/vehicle/ridden/janicart,
-/turf/open/floor/iron,
-/area/janitor)
"iw" = (
/obj/effect/turf_decal/tile/dark_red/fourcorners/contrasted{
alpha = 180;
@@ -1695,6 +1681,20 @@
/obj/machinery/deepfryer,
/turf/open/floor/iron/freezer,
/area/crew_quarters/kitchen)
+"Rt" = (
+/obj/effect/turf_decal/tile/purple/fourcorners/contrasted,
+/obj/item/reagent_containers/cup/bucket{
+ pixel_x = 11;
+ pixel_y = -5
+ },
+/obj/item/mop{
+ pixel_x = -6;
+ pixel_y = 3
+ },
+/obj/item/key/janitor,
+/obj/vehicle/ridden/janicart,
+/turf/open/floor/iron,
+/area/janitor)
"RA" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
/turf/open/floor/iron/freezer,
@@ -2651,7 +2651,7 @@ Zj
Bo
"}
(29,1,1) = {"
-ir
+Rt
SY
PP
ZU
diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm
index ec8b4afb4c495..30b300768d265 100644
--- a/_maps/shuttles/hunter/hunter_bounty.dmm
+++ b/_maps/shuttles/hunter/hunter_bounty.dmm
@@ -19,23 +19,6 @@
},
/turf/open/floor/iron/tech/grid,
/area/shuttle/hunter)
-"aw" = (
-/obj/effect/turf_decal/edges/techfloor/corners{
- dir = 8
- },
-/obj/structure/reagent_dispensers/watertank,
-/obj/structure/railing{
- dir = 1
- },
-/obj/effect/turf_decal/delivery,
-/obj/item/mop,
-/obj/item/reagent_containers/cup/bucket,
-/obj/machinery/airalarm/directional/east{
- req_access = null;
- req_access_txt = "181"
- },
-/turf/open/floor/iron/tech,
-/area/shuttle/hunter)
"az" = (
/obj/structure/lattice/catwalk/over,
/obj/structure/cable/yellow{
@@ -624,6 +607,23 @@
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/iron/ridged/steel,
/area/shuttle/hunter)
+"CZ" = (
+/obj/effect/turf_decal/edges/techfloor/corners{
+ dir = 8
+ },
+/obj/structure/reagent_dispensers/watertank,
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/delivery,
+/obj/item/mop,
+/obj/item/reagent_containers/cup/bucket,
+/obj/machinery/airalarm/directional/east{
+ req_access = null;
+ req_access_txt = "181"
+ },
+/turf/open/floor/iron/tech,
+/area/shuttle/hunter)
"De" = (
/obj/structure/lattice/catwalk/over,
/obj/effect/turf_decal/stripes/line{
@@ -1217,7 +1217,7 @@ nn
(9,1,1) = {"
Lo
nn
-aw
+CZ
sS
nn
jl
diff --git a/beestation.dme b/beestation.dme
index 2e6b25ac1173c..1be98654454c6 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -2129,7 +2129,6 @@
#include "code\modules\antagonists\obsessed\objectives\protect.dm"
#include "code\modules\antagonists\obsessed\objectives\spend_time.dm"
#include "code\modules\antagonists\obsessed\objectives\steal_heirloom.dm"
-#include "code\modules\antagonists\official\official.dm"
#include "code\modules\antagonists\pirate\pirate.dm"
#include "code\modules\antagonists\prisoner\prisoner.dm"
#include "code\modules\antagonists\revenant\revenant.dm"
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 221994f501551..0603a497c1046 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -391,7 +391,7 @@
if ("color")
settings["mainsettings"][setting]["value"] = input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]", settings["mainsettings"][setting]["value"]) as color
if ("boolean")
- settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("Yes","No")
+ settings["mainsettings"][setting]["value"] = (settings["mainsettings"][setting]["value"] == "Yes") ? "No" : "Yes"
if ("ckey")
settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("none") + GLOB.directory
if (settings["mainsettings"][setting]["callback"])
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index 929f9b754ac2c..adac6d4d1a5db 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -10,6 +10,12 @@
var/mission = "Assist the station."
var/teamsize = 5
var/polldesc
+ /// If TRUE, gives the team members "[role] [random last name]" style names
+ var/random_names = TRUE
+ /// If TRUE, the admin who created the response team will be spawned in the briefing room in their preferred briefing outfit (assuming they're a ghost)
+ var/spawn_admin = FALSE
+ /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot
+ var/leader_experience = TRUE
/datum/ert/New()
if (!polldesc)
@@ -39,10 +45,12 @@
code = "Green"
teamsize = 1
opendoors = FALSE
- leader_role = /datum/antagonist/official
- roles = list(/datum/antagonist/official)
+ leader_role = /datum/antagonist/ert/official
+ roles = list(/datum/antagonist/ert/official)
rename_team = "CentCom Officials"
polldesc = "a CentCom Official"
+ random_names = FALSE
+ leader_experience = FALSE
/datum/ert/centcom_official/New()
mission = "Conduct a routine performance review of [station_name()] and its Captain."
@@ -80,6 +88,12 @@
rename_team = "Horde of Interns"
mission = "Assist in conflict resolution."
polldesc = "an unpaid internship opportunity with Nanotrasen"
+ random_names = FALSE
+
+/datum/ert/intern/unarmed
+ roles = list(/datum/antagonist/ert/intern/unarmed)
+ leader_role = /datum/antagonist/ert/intern/leader/unarmed
+ rename_team = "Unarmed Horde of Interns"
/datum/ert/lawyer
roles = list(/datum/antagonist/ert/lawyer)
@@ -127,3 +141,13 @@
mission = "Eliminate the kudzu with extreme prejudice"
polldesc = "an elite gardening team"
code = "Vine Green"
+
+/datum/ert/bounty_hunters
+ roles = list(/datum/antagonist/ert/bounty_armor, /datum/antagonist/ert/bounty_hook, /datum/antagonist/ert/bounty_synth)
+ leader_role = /datum/antagonist/ert/bounty_armor
+ teamsize = 3
+ opendoors = FALSE
+ rename_team = "Bounty Hunters"
+ mission = "Assist the station in catching perps, dead or alive."
+ polldesc = "a Centcom-hired bounty hunting gang"
+ random_names = FALSE
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 85e3d42c0d997..417f8846f0796 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -769,6 +769,16 @@ update_label("John Doe", "Clowny")
assignment = "CentCom Attorney"
icon_state = "centcom"
+/// Trim for Bounty Hunters hired by centcom.
+/obj/item/card/id/silver/bounty/ert
+ registered_name = "Bounty Hunter"
+ assignment = "Bounty Hunter"
+ icon_state = "ert"
+
+/obj/item/card/id/silver/bounty/ert/Initialize(mapload)
+ . = ..()
+ access = list(ACCESS_CENT_GENERAL)
+
/obj/item/card/id/ert/lawyer/Initialize(mapload)
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_COURT, ACCESS_BRIG, ACCESS_FORENSICS_LOCKERS)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 99c15742591fe..ac936aa73f97c 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -1,3 +1,6 @@
+/// If we spawn an ERT with the "choose experienced leader" option, select the leader from the top X playtimes
+#define ERT_EXPERIENCED_LEADER_CHOOSE_TOP 3
+
/client/proc/one_click_antag()
set name = "Create Antagonist"
set desc = "Auto-create an antagonist of your choice"
@@ -255,6 +258,9 @@
.["mainsettings"]["mission"]["value"] = newtemplate.mission
.["mainsettings"]["polldesc"]["value"] = newtemplate.polldesc
.["mainsettings"]["open_armory"]["value"] = newtemplate.opendoors ? "Yes" : "No"
+ .["mainsettings"]["leader_experience"]["value"] = newtemplate.leader_experience ? "Yes" : "No"
+ .["mainsettings"]["random_names"]["value"] = newtemplate.random_names ? "Yes" : "No"
+ .["mainsettings"]["spawn_admin"]["value"] = newtemplate.spawn_admin ? "Yes" : "No"
/datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag)
@@ -263,8 +269,6 @@
if (ispath(antag, /datum/antagonist/ert))
var/datum/antagonist/ert/ert = antag
mannequin.equipOutfit(initial(ert.outfit), TRUE)
- else if (ispath(antag, /datum/antagonist/official))
- mannequin.equipOutfit(/datum/outfit/centcom_official, TRUE)
/datum/admins/proc/makeERTPreviewIcon(list/settings)
// Set up the dummy for its photoshoot
@@ -322,6 +326,9 @@
"polldesc" = list("desc" = "Ghost poll description", "type" = "string", "value" = ertemplate.polldesc),
"enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(CONFIG_GET(flag/enforce_human_authority) ? "Yes" : "No")]"),
"open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"),
+ "leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"),
+ "random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"),
+ "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]")
)
)
@@ -343,77 +350,109 @@
ertemplate.teamsize = prefs["teamsize"]["value"]
ertemplate.mission = prefs["mission"]["value"]
ertemplate.polldesc = prefs["polldesc"]["value"]
- ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" ? TRUE : FALSE
- ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ? TRUE : FALSE
+ ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 5 are effectively toggles
+ ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes"
+ ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes"
+ ertemplate.random_names = prefs["random_names"]["value"] == "Yes"
+ ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes"
+
+ var/list/spawnpoints = GLOB.emergencyresponseteamspawn
+ var/index = 0
+
+ if(ertemplate.spawn_admin)
+ if(isobserver(usr))
+ var/mob/living/carbon/human/admin_officer = new (spawnpoints[1])
+ var/chosen_outfit = usr.client?.prefs?.read_preference(/datum/preference/choiced/brief_outfit)
+ usr.client.prefs.safe_transfer_prefs_to(admin_officer, is_antag = TRUE)
+ admin_officer.equipOutfit(chosen_outfit)
+ admin_officer.key = usr.key
+ else
+ to_chat(usr, "Could not spawn you in as briefing officer as you are not a ghost!")
var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc] ?", ROLE_ERT, req_hours = 50)
var/teamSpawned = FALSE
- if(candidates.len > 0)
- //Pick the (un)lucky players
- var/numagents = min(ertemplate.teamsize,candidates.len)
-
- //Create team
- var/datum/team/ert/ert_team = new ertemplate.team
- if(ertemplate.rename_team)
- ert_team.name = ertemplate.rename_team
-
- //Asign team objective
- var/datum/objective/missionobj = new
- missionobj.team = ert_team
- missionobj.explanation_text = ertemplate.mission
- missionobj.completed = TRUE
- ert_team.objectives += missionobj
- ert_team.mission = missionobj
-
- var/list/spawnpoints = GLOB.emergencyresponseteamspawn
- while(numagents && candidates.len)
- if (numagents > spawnpoints.len)
- numagents--
- continue // This guy's unlucky, not enough spawn points, we skip him.
- var/spawnloc = spawnpoints[numagents]
- var/mob/dead/observer/chosen_candidate = pick(candidates)
- candidates -= chosen_candidate
- if(!chosen_candidate.key)
- continue
+ if(candidates.len == 0)
+ return FALSE
- //Spawn the body
- var/mob/living/carbon/human/ERTOperative = new ertemplate.mobtype(spawnloc)
- chosen_candidate.client.prefs.safe_transfer_prefs_to(ERTOperative, is_antag = TRUE)
- ERTOperative.key = chosen_candidate.key
- log_objective(ERTOperative, missionobj.explanation_text)
-
- if(ertemplate.enforce_human || !(ERTOperative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes
- ERTOperative.set_species(/datum/species/human)
-
- //Give antag datum
- var/datum/antagonist/ert/ert_antag
-
- if(numagents == 1)
- ert_antag = new ertemplate.leader_role
- else
- ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)]
- ert_antag = new ert_antag
-
- ERTOperative.mind.add_antag_datum(ert_antag,ert_team)
- ERTOperative.mind.assigned_role = ert_antag.name
-
- //Logging and cleanup
- log_game("[key_name(ERTOperative)] has been selected as an [ert_antag.name]")
- numagents--
- teamSpawned++
-
- if (teamSpawned)
- message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]")
-
- //Open the Armory doors
- if(ertemplate.opendoors)
- for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
- door.open()
- CHECK_TICK
- return TRUE
+ //Pick the (un)lucky players
+ var/numagents = min(ertemplate.teamsize,candidates.len)
+
+ //Create team
+ var/datum/team/ert/ert_team = new ertemplate.team ()
+ if(ertemplate.rename_team)
+ ert_team.name = ertemplate.rename_team
+
+ //Assign team objective
+ var/datum/objective/missionobj = new ()
+ missionobj.team = ert_team
+ missionobj.explanation_text = ertemplate.mission
+ missionobj.completed = TRUE
+ ert_team.objectives += missionobj
+ ert_team.mission = missionobj
+
+ var/mob/dead/observer/earmarked_leader
+ var/leader_spawned = FALSE // just in case the earmarked leader disconnects or becomes unavailable, we can try giving leader to the last guy to get chosen
+
+ if(ertemplate.leader_experience)
+ var/list/candidate_living_exps = list()
+ for(var/i in candidates)
+ var/mob/dead/observer/potential_leader = i
+ candidate_living_exps[potential_leader] = potential_leader.client?.get_exp_living(TRUE)
+
+ candidate_living_exps = sort_list(candidate_living_exps, cmp=/proc/cmp_numeric_dsc)
+ if(candidate_living_exps.len > ERT_EXPERIENCED_LEADER_CHOOSE_TOP)
+ candidate_living_exps = candidate_living_exps.Cut(ERT_EXPERIENCED_LEADER_CHOOSE_TOP+1) // pick from the top ERT_EXPERIENCED_LEADER_CHOOSE_TOP contenders in playtime
+ earmarked_leader = pick(candidate_living_exps)
else
- return FALSE
+ earmarked_leader = pick(candidates)
+
+ while(numagents && candidates.len)
+ var/spawnloc = spawnpoints[index+1]
+ //loop through spawnpoints one at a time
+ index = (index + 1) % spawnpoints.len
+ var/mob/dead/observer/chosen_candidate = earmarked_leader || pick(candidates) // this way we make sure that our leader gets chosen
+ candidates -= chosen_candidate
+ if(!chosen_candidate?.key)
+ continue
+
+ //Spawn the body
+ var/mob/living/carbon/human/ert_operative = new ertemplate.mobtype(spawnloc)
+ chosen_candidate.client.prefs.safe_transfer_prefs_to(ert_operative, is_antag = TRUE)
+ ert_operative.key = chosen_candidate.key
+
+ if(ertemplate.enforce_human || !(ert_operative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes
+ ert_operative.set_species(/datum/species/human)
+
+ //Give antag datum
+ var/datum/antagonist/ert/ert_antag
+
+ if((chosen_candidate == earmarked_leader) || (numagents == 1 && !leader_spawned))
+ ert_antag = new ertemplate.leader_role ()
+ earmarked_leader = null
+ leader_spawned = TRUE
+ else
+ ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)]
+ ert_antag = new ert_antag ()
+ ert_antag.random_names = ertemplate.random_names
+
+ ert_operative.mind.add_antag_datum(ert_antag,ert_team)
+ ert_operative.mind.assigned_role = ert_antag.name
+
+ //Logging and cleanup
+ log_game("[key_name(ert_operative)] has been selected as an [ert_antag.name]")
+ numagents--
+ teamSpawned++
+
+ if (teamSpawned)
+ message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]")
+
+ //Open the Armory doors
+ if(ertemplate.opendoors)
+ for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
+ door.open()
+ CHECK_TICK
+ return TRUE
return
@@ -425,3 +464,5 @@
/datum/admins/proc/makeRevenant()
new /datum/round_event/ghost_role/revenant(TRUE, TRUE)
return 1
+
+#undef ERT_EXPERIENCED_LEADER_CHOOSE_TOP
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index 4312278babd66..d9e8f23b62be3 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -12,7 +12,7 @@
name = "Emergency Response Officer"
var/datum/team/ert/ert_team
var/leader = FALSE
- var/datum/outfit/outfit = /datum/outfit/ert/security
+ var/datum/outfit/outfit = /datum/outfit/centcom/ert/security
var/datum/outfit/plasmaman_outfit = /datum/outfit/plasmaman/ert
var/role = JOB_NAME_SECURITYOFFICER
var/list/name_source
@@ -55,47 +55,77 @@
/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override)
REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
+/datum/antagonist/ert/official
+ name = JOB_CENTCOM_OFFICIAL
+ show_name_in_check_antagonists = TRUE
+ show_in_antagpanel = FALSE
+ can_elimination_hijack = ELIMINATION_PREVENT
+ var/datum/objective/mission
+ show_to_ghosts = TRUE
+ banning_key = ROLE_ERT
+ random_names = FALSE
+ outfit = /datum/outfit/centcom/centcom_official
+
+/datum/antagonist/ert/official/greet()
+ to_chat(owner, "You are a CentCom Official.")
+ if (ert_team)
+ to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]")
+ else
+ to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]")
+
+/datum/antagonist/ert/official/forge_objectives()
+ if (ert_team)
+ return ..()
+ if(mission)
+ return
+ var/datum/objective/missionobj = new ()
+ missionobj.owner = owner
+ missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain."
+ missionobj.completed = TRUE
+ mission = missionobj
+ objectives |= mission
+
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
/datum/antagonist/ert/security/red
- outfit = /datum/outfit/ert/security/alert
+ outfit = /datum/outfit/centcom/ert/security/alert
/datum/antagonist/ert/engineer
role = "Engineer"
- outfit = /datum/outfit/ert/engineer
+ outfit = /datum/outfit/centcom/ert/engineer
/datum/antagonist/ert/engineer/red
- outfit = /datum/outfit/ert/engineer/alert
+ outfit = /datum/outfit/centcom/ert/engineer/alert
/datum/antagonist/ert/medic
role = JOB_CENTCOM_MEDICAL_DOCTOR
- outfit = /datum/outfit/ert/medic
+ outfit = /datum/outfit/centcom/ert/medic
/datum/antagonist/ert/medic/red
- outfit = /datum/outfit/ert/medic/alert
+ outfit = /datum/outfit/centcom/ert/medic/alert
/datum/antagonist/ert/commander
role = "Commander"
- outfit = /datum/outfit/ert/commander
+ outfit = /datum/outfit/centcom/ert/commander
/datum/antagonist/ert/commander/red
- outfit = /datum/outfit/ert/commander/alert
+ outfit = /datum/outfit/centcom/ert/commander/alert
/datum/antagonist/ert/deathsquad
name = "Deathsquad Trooper"
- outfit = /datum/outfit/death_commando
+ outfit = /datum/outfit/centcom/death_commando
role = "Trooper"
plasmaman_outfit = /datum/outfit/plasmaman/death_commando
/datum/antagonist/ert/medic/inquisitor
- outfit = /datum/outfit/ert/medic/inquisitor
+ outfit = /datum/outfit/centcom/ert/medic/inquisitor
/datum/antagonist/ert/medic/inquisitor/on_gain()
. = ..()
owner.holy_role = HOLY_ROLE_PRIEST
/datum/antagonist/ert/security/inquisitor
- outfit = /datum/outfit/ert/security/inquisitor
+ outfit = /datum/outfit/centcom/ert/security/inquisitor
/datum/antagonist/ert/security/inquisitor/on_gain()
. = ..()
@@ -103,17 +133,17 @@
/datum/antagonist/ert/chaplain
role = JOB_NAME_CHAPLAIN
- outfit = /datum/outfit/ert/chaplain
+ outfit = /datum/outfit/centcom/ert/chaplain
/datum/antagonist/ert/chaplain/inquisitor
- outfit = /datum/outfit/ert/chaplain/inquisitor
+ outfit = /datum/outfit/centcom/ert/chaplain/inquisitor
/datum/antagonist/ert/chaplain/on_gain()
. = ..()
owner.holy_role = HOLY_ROLE_PRIEST
/datum/antagonist/ert/commander/inquisitor
- outfit = /datum/outfit/ert/commander/inquisitor
+ outfit = /datum/outfit/centcom/ert/commander/inquisitor
/datum/antagonist/ert/commander/inquisitor/on_gain()
. = ..()
@@ -121,54 +151,61 @@
/datum/antagonist/ert/janitor
role = JOB_NAME_JANITOR
- outfit = /datum/outfit/ert/janitor
+ outfit = /datum/outfit/centcom/ert/janitor
/datum/antagonist/ert/janitor/heavy
role = "Heavy Duty Janitor"
- outfit = /datum/outfit/ert/janitor/heavy
+ outfit = /datum/outfit/centcom/ert/janitor/heavy
/datum/antagonist/ert/kudzu
role = "Weed Whacker"
- outfit = /datum/outfit/ert/kudzu
+ outfit = /datum/outfit/centcom/ert/kudzu
/datum/antagonist/ert/deathsquad/leader
name = "Deathsquad Officer"
- outfit = /datum/outfit/death_commando/officer
+ outfit = /datum/outfit/centcom/death_commando/officer
role = "Officer"
/datum/antagonist/ert/intern
name = "CentCom Intern"
- outfit = /datum/outfit/centcom_intern
+ outfit = /datum/outfit/centcom/centcom_intern
random_names = FALSE
role = "Intern"
plasmaman_outfit = /datum/outfit/plasmaman/intern
/datum/antagonist/ert/intern/leader
name = "CentCom Head Intern"
- outfit = /datum/outfit/centcom_intern/leader
+ outfit = /datum/outfit/centcom/centcom_intern/leader
+ random_names = FALSE
role = "Head Intern"
+/datum/antagonist/ert/intern/unarmed
+ outfit = /datum/outfit/centcom/centcom_intern/unarmed
+
+/datum/antagonist/ert/intern/leader/unarmed
+ outfit = /datum/outfit/centcom/centcom_intern/leader/unarmed
+
/datum/antagonist/ert/lawyer
name = "CentCom Attorney"
- outfit = /datum/outfit/centcom_attorney
+ outfit = /datum/outfit/centcom/centcom_attorney
role = "Attorney"
plasmaman_outfit = /datum/outfit/plasmaman/centcom_attorney
/datum/antagonist/ert/doomguy
name = "The Juggernaut"
- outfit = /datum/outfit/death_commando/doomguy
+ outfit = /datum/outfit/centcom/death_commando/doomguy
random_names = FALSE
role = "The Juggernaut"
/datum/antagonist/ert/clown
name = "Comedy Response Officer"
- outfit = /datum/outfit/centcom_clown
+ outfit = /datum/outfit/centcom/centcom_clown
role = "Prankster"
plasmaman_outfit = /datum/outfit/plasmaman/honk
/datum/antagonist/ert/clown/honk
name = "HONK Squad Trooper"
- outfit = /datum/outfit/centcom_clown/honk_squad
+ outfit = /datum/outfit/centcom/centcom_clown/honk_squad
role = "HONKER"
plasmaman_outfit = /datum/outfit/plasmaman/honk_squad
@@ -176,6 +213,18 @@
if(istype(new_team))
ert_team = new_team
+/datum/antagonist/ert/bounty_armor
+ role = "Armored Bounty Hunter"
+ outfit = /datum/outfit/bounty/armor/ert
+
+/datum/antagonist/ert/bounty_hook
+ role = "Hookgun Bounty Hunter"
+ outfit = /datum/outfit/bounty/hook/ert
+
+/datum/antagonist/ert/bounty_synth
+ role = "Synthetic Bounty Hunter"
+ outfit = /datum/outfit/bounty/synth/ert
+
/datum/antagonist/ert/proc/forge_objectives()
if(ert_team)
objectives |= ert_team.objectives
diff --git a/code/modules/antagonists/fugitive/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunter_outfits.dm
index 8de6a41edf768..3b6e786fb7fc9 100644
--- a/code/modules/antagonists/fugitive/hunter_outfits.dm
+++ b/code/modules/antagonists/fugitive/hunter_outfits.dm
@@ -64,7 +64,6 @@
if(visualsOnly)
return
var/obj/item/card/id/W = H.wear_id
- W.assignment = "Bounty Hunter"
W.registered_name = H.real_name
W.update_label()
@@ -146,3 +145,25 @@
gloves = /obj/item/clothing/gloves/combat
else if(prob(30))
gloves = /obj/item/clothing/gloves/fingerless
+
+
+//ids and ert code
+
+/obj/item/card/id/advanced/bountyhunter
+ assignment = "Bounty Hunter"
+ //icon_state = "card_flames" //oh SHIT
+ //trim = /datum/id_trim/bounty_hunter
+
+/datum/outfit/bounty/armor/ert
+ id = /obj/item/card/id/silver/bounty/ert
+
+/datum/outfit/bounty/hook/ert
+ id = /obj/item/card/id/silver/bounty/ert
+
+/datum/outfit/bounty/synth/ert
+ id = /obj/item/card/id/silver/bounty/ert
+
+/*
+/obj/item/card/id/advanced/bountyhunter/ert
+ trim = /datum/id_trim/centcom/bounty_hunter
+*/
diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm
deleted file mode 100644
index d9da780f26415..0000000000000
--- a/code/modules/antagonists/official/official.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/datum/antagonist/official
- name = JOB_CENTCOM_OFFICIAL
- show_name_in_check_antagonists = TRUE
- show_in_antagpanel = FALSE
- can_elimination_hijack = ELIMINATION_PREVENT
- var/datum/objective/mission
- var/datum/team/ert/ert_team
- show_to_ghosts = TRUE
- banning_key = ROLE_ERT
-
-/datum/antagonist/official/greet()
- to_chat(owner, "You are a CentCom Official.")
- if (ert_team)
- to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]")
- else
- to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]")
-
-/datum/antagonist/official/proc/equip_official()
- var/mob/living/carbon/human/H = owner.current
- if(!istype(H))
- return
- if(isplasmaman(H))
- H.equipOutfit(/datum/outfit/plasmaman/official)
- H.open_internals(H.get_item_for_held_index(2))
- H.equipOutfit(/datum/outfit/centcom_official)
- if(CONFIG_GET(flag/enforce_human_authority))
- H.set_species(/datum/species/human)
-
-/datum/antagonist/official/create_team(datum/team/new_team)
- if(istype(new_team))
- ert_team = new_team
-
-/datum/antagonist/official/proc/forge_objectives()
- if (ert_team)
- objectives |= ert_team.objectives
- else if (!mission)
- var/datum/objective/missionobj = new
- missionobj.owner = owner
- missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain."
- missionobj.completed = 1
- mission = missionobj
- objectives |= mission
-
-
-/datum/antagonist/official/on_gain()
- forge_objectives()
- . = ..()
- equip_official()
diff --git a/code/modules/client/preferences/entries/player/admin.dm b/code/modules/client/preferences/entries/player/admin.dm
index 9037723a2282e..2bb8b76c034fe 100644
--- a/code/modules/client/preferences/entries/player/admin.dm
+++ b/code/modules/client/preferences/entries/player/admin.dm
@@ -12,6 +12,34 @@
return is_admin(preferences.parent) && CONFIG_GET(flag/allow_admin_asaycolor)
+/// What outfit to equip when spawning as a briefing officer for an ERT
+/datum/preference/choiced/brief_outfit
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ db_key = "brief_outfit"
+ preference_type = PREFERENCE_PLAYER
+
+/datum/preference/choiced/brief_outfit/deserialize(input, datum/preferences/preferences)
+ var/path = text2path(input)
+ if (!ispath(path, /datum/outfit))
+ return create_default_value()
+
+ return path
+
+/datum/preference/choiced/brief_outfit/serialize(input)
+ return "[input]"
+
+/datum/preference/choiced/brief_outfit/create_default_value()
+ return /datum/outfit/centcom/commander
+
+/datum/preference/choiced/brief_outfit/init_possible_values()
+ return subtypesof(/datum/outfit)
+
+/datum/preference/choiced/brief_outfit/is_accessible(datum/preferences/preferences, ignore_page = FALSE)
+ if (!..(preferences))
+ return FALSE
+
+ return is_admin(preferences.parent)
+
/datum/preference/toggle/announce_login
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
db_key = "announce_login"
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index fb5d7c45375ae..057b15b91e30a 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -1,7 +1,13 @@
/datum/outfit/centcom
name = "CentCom Base"
-/datum/outfit/ert
+/datum/outfit/centcom/post_equip(mob/living/carbon/human/centcom_member, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+ var/obj/item/implant/mindshield/mindshield = new /obj/item/implant/mindshield(centcom_member)//hmm lets have centcom officials become revs
+ mindshield.implant(centcom_member, null, silent = TRUE)
+
+/datum/outfit/centcom/ert
name = "ERT Common"
uniform = /obj/item/clothing/under/rank/centcom/official
@@ -10,13 +16,10 @@
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/radio/headset/headset_cent/alt
-/datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
- var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)
- L.implant(H, null, 1)
-
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
@@ -27,7 +30,7 @@
W.update_label()
..()
-/datum/outfit/ert/commander
+/datum/outfit/centcom/ert/commander
name = "ERT Commander"
id = /obj/item/card/id/ert
@@ -42,7 +45,7 @@
l_pocket = /obj/item/switchblade
r_pocket = /obj/item/door_remote/omni
-/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -51,7 +54,7 @@
R.keyslot = new /obj/item/encryptionkey/heads/captain
R.recalculateChannels()
-/datum/outfit/ert/commander/alert
+/datum/outfit/centcom/ert/commander/alert
name = "ERT Commander - High Alert"
glasses = /obj/item/clothing/glasses/thermal/eyepatch
@@ -61,7 +64,7 @@
/obj/item/gun/energy/pulse/pistol/loyalpin=1)
l_pocket = /obj/item/melee/transforming/energy/sword/saber
-/datum/outfit/ert/security
+/datum/outfit/centcom/ert/security
name = "ERT Security"
id = /obj/item/card/id/ert/Security
@@ -74,7 +77,7 @@
/obj/item/storage/box/handcuffs=1,
/obj/item/melee/baton/loaded=1)
-/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -84,7 +87,7 @@
R.keyslot = new /obj/item/encryptionkey/heads/hos
R.recalculateChannels()
-/datum/outfit/ert/security/alert
+/datum/outfit/centcom/ert/security/alert
name = "ERT Security - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
@@ -94,7 +97,7 @@
/obj/item/gun/energy/pulse/carbine/loyalpin=1)
-/datum/outfit/ert/medic
+/datum/outfit/centcom/ert/medic
name = "ERT Medic"
id = /obj/item/card/id/ert/Medical
@@ -108,7 +111,7 @@
/obj/item/reagent_containers/hypospray/combat=1,
/obj/item/melee/baton/loaded=1)
-/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -118,7 +121,7 @@
R.keyslot = new /obj/item/encryptionkey/heads/cmo
R.recalculateChannels()
-/datum/outfit/ert/medic/alert
+/datum/outfit/centcom/ert/medic/alert
name = "ERT Medic - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
@@ -128,7 +131,7 @@
/obj/item/gun/energy/pulse/pistol/loyalpin=1,
/obj/item/reagent_containers/hypospray/combat/nanites=1)
-/datum/outfit/ert/engineer
+/datum/outfit/centcom/ert/engineer
name = "ERT Engineer"
id = /obj/item/card/id/ert/Engineer
@@ -144,7 +147,7 @@
/obj/item/construction/rcd/loaded=1,
/obj/item/bluespace_anchor=1)
-/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -154,7 +157,7 @@
R.keyslot = new /obj/item/encryptionkey/heads/ce
R.recalculateChannels()
-/datum/outfit/ert/engineer/alert
+/datum/outfit/centcom/ert/engineer/alert
name = "ERT Engineer - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
@@ -165,7 +168,7 @@
/obj/item/bluespace_anchor=1)
-/datum/outfit/centcom_official
+/datum/outfit/centcom/centcom_official
name = JOB_CENTCOM_OFFICIAL
uniform = /obj/item/clothing/under/rank/centcom/official
@@ -182,7 +185,7 @@
id = /obj/item/card/id/centcom
backpack_contents = list(/obj/item/stamp/centcom=1)
-/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -199,7 +202,7 @@
W.registered_name = H.real_name
W.update_label()
-/datum/outfit/ert/commander/inquisitor
+/datum/outfit/centcom/ert/commander/inquisitor
name = "Inquisition Commander"
l_hand = /obj/item/nullrod/scythe/talking/chainsword
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal
@@ -207,7 +210,7 @@
/obj/item/aiModule/core/full/ert=1,
/obj/item/door_remote/omni=1)
-/datum/outfit/ert/security/inquisitor
+/datum/outfit/centcom/ert/security/inquisitor
name = "Inquisition Security"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
@@ -218,7 +221,7 @@
/obj/item/melee/baton/loaded=1,
/obj/item/construction/rcd/loaded=1)
-/datum/outfit/ert/medic/inquisitor
+/datum/outfit/centcom/ert/medic/inquisitor
name = "Inquisition Medic"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
@@ -230,7 +233,7 @@
/obj/item/reagent_containers/hypospray/combat/heresypurge=1,
/obj/item/gun/medbeam=1)
-/datum/outfit/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -240,7 +243,7 @@
R.keyslot = new /obj/item/encryptionkey/heads/hop
R.recalculateChannels()
-/datum/outfit/ert/chaplain
+/datum/outfit/centcom/ert/chaplain
name = "ERT Chaplain"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit
@@ -252,7 +255,7 @@
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,
/obj/item/nullrod=1)
-/datum/outfit/ert/chaplain/inquisitor
+/datum/outfit/centcom/ert/chaplain/inquisitor
name = "Inquisition Chaplain"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
@@ -263,7 +266,7 @@
/obj/item/grenade/chem_grenade/holy=1,
/obj/item/nullrod=1)
-/datum/outfit/ert/janitor
+/datum/outfit/centcom/ert/janitor
name = "ERT Janitor"
id = /obj/item/card/id/ert/Janitor
@@ -282,7 +285,7 @@
/obj/item/grenade/clusterbuster/cleaner=1,
)
-/datum/outfit/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -292,12 +295,12 @@
R.keyslot = new /obj/item/encryptionkey/headset_service
R.recalculateChannels()
-/datum/outfit/ert/janitor/heavy
+/datum/outfit/centcom/ert/janitor/heavy
name = "ERT Janitor - Heavy Duty"
l_hand = /obj/item/reagent_containers/spray/chemsprayer/janitor
-/datum/outfit/ert/kudzu
+/datum/outfit/centcom/ert/kudzu
name = "ERT Weed Whacker"
id = /obj/item/card/id/ert/kudzu
@@ -314,7 +317,7 @@
/obj/item/choice_beacon/pet/goat,
/obj/item/grenade/clusterbuster/antiweed=2)
-/datum/outfit/ert/kudzu/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/kudzu/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
@@ -324,7 +327,7 @@
R.keyslot = new /obj/item/encryptionkey/headset_service
R.recalculateChannels()
-/datum/outfit/centcom_attorney
+/datum/outfit/centcom/centcom_attorney
name = "CentCom Attorney"
uniform = /obj/item/clothing/under/rank/centcom/intern
@@ -340,7 +343,7 @@
id = /obj/item/card/id/ert/lawyer
backpack_contents = list(/obj/item/storage/box/survival = 1)
-/datum/outfit/centcom_intern
+/datum/outfit/centcom/centcom_intern
name = "CentCom Intern"
uniform = /obj/item/clothing/under/rank/centcom/intern
@@ -356,7 +359,7 @@
id = /obj/item/card/id/centcom
backpack_contents = list(/obj/item/storage/box/survival = 1)
-/datum/outfit/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -368,7 +371,14 @@
W.registered_name = H.real_name
W.update_label()
-/datum/outfit/centcom_intern/leader
+/datum/outfit/centcom/centcom_intern/unarmed
+ name = "CentCom Intern (Unarmed)"
+ belt = null
+ l_hand = null
+ l_pocket = null
+ r_pocket = null
+
+/datum/outfit/centcom/centcom_intern/leader
name = "CentCom Head Intern"
belt = /obj/item/melee/baton/loaded
uniform = /obj/item/clothing/under/rank/centcom/officer_skirt
@@ -377,7 +387,13 @@
l_hand = /obj/item/megaphone
head = /obj/item/clothing/head/hats/intern
-/datum/outfit/centcom_clown
+/datum/outfit/centcom/centcom_intern/leader/unarmed // i'll be nice and let the leader keep their baton and vest
+ name = "CentCom Head Intern (Unarmed)"
+ suit_store = null
+ l_pocket = null
+ r_pocket = null
+
+/datum/outfit/centcom/centcom_clown
name = "Code Banana ERT"
id = /obj/item/card/id/centcom
belt = /obj/item/modular_computer/tablet/pda/clown
@@ -398,13 +414,10 @@
implants = list(/obj/item/implant/sad_trombone)
-/datum/outfit/centcom_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/centcom_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
- var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)
- L.implant(H, null, 1)
-
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
@@ -417,7 +430,7 @@
W.update_label(W.registered_name, W.assignment)
H.dna.add_mutation(CLOWNMUT)
-/datum/outfit/centcom_clown/honk_squad
+/datum/outfit/centcom/centcom_clown/honk_squad
name = "HONK Squad Trooper"
back = /obj/item/storage/backpack/holding/clown
shoes = /obj/item/clothing/shoes/clown_shoes/taeclowndo
@@ -435,7 +448,7 @@
/obj/item/reagent_containers/spray/chemsprayer/janitor/clown = 1,
)
-/datum/outfit/death_commando
+/datum/outfit/centcom/death_commando
name = JOB_ERT_DEATHSQUAD
uniform = /obj/item/clothing/under/rank/centcom/commander
@@ -460,7 +473,7 @@
/obj/item/flashlight=1,\
/obj/item/grenade/plastic/x4=1)
-/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -468,10 +481,6 @@
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
- var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//Here you go Deuryn
- L.implant(H, null, 1)
-
-
var/obj/item/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = list() //wipe access first
@@ -481,7 +490,7 @@
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
-/datum/outfit/death_commando/officer
+/datum/outfit/centcom/death_commando/officer
name = "Death Commando Officer"
head = /obj/item/clothing/head/helmet/space/beret
backpack_contents = list(/obj/item/aiModule/core/full/deathsquad=1,\
@@ -492,7 +501,7 @@
/obj/item/grenade/plastic/x4=1,
/obj/item/door_remote/omni=1)
-/datum/outfit/death_commando/doomguy
+/datum/outfit/centcom/death_commando/doomguy
name = "The Juggernaut"
suit = /obj/item/clothing/suit/space/hardsuit/shielded/doomguy
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx
index 67211ce275200..c75b51b4c1be0 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx
@@ -1,4 +1,4 @@
-import { FeatureColorInput, Feature, FeatureToggle, CheckboxInput } from '../base';
+import { CheckboxInput, FeatureColorInput, Feature, FeatureDropdownInput, FeatureToggle } from '../base';
export const asaycolor: Feature = {
name: 'Admin chat color',
@@ -8,6 +8,13 @@ export const asaycolor: Feature = {
component: FeatureColorInput,
};
+export const brief_outfit: Feature = {
+ name: 'Brief outfit',
+ category: 'ADMIN',
+ description: 'The outfit to gain when spawning as the briefing officer.',
+ component: FeatureDropdownInput,
+};
+
export const announce_login: FeatureToggle = {
name: 'Announce Login',
category: 'ADMIN',