[MIRROR] Minor ERT refactor, introduces a few ERT admin options (#3339)

* Minor ERT refactor, introduces a few ERT admin options (#56345)

* Minor ERT refactor, introduces a few ERT admin options

* Proper Modularisation Protocol

* Update preferences.dm

Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
This commit is contained in:
SkyratBot
2021-02-13 11:12:01 +00:00
committed by GitHub
co-authored by Ryll Ryll Gandalf2k15
parent 7522def83c
commit 39121c53ce
12 changed files with 209 additions and 551 deletions
+1 -1
View File
@@ -390,7 +390,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"])
+16 -2
View File
@@ -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."
@@ -71,6 +79,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/erp
roles = list(/datum/antagonist/ert/security/party, /datum/antagonist/ert/clown/party, /datum/antagonist/ert/engineer/party, /datum/antagonist/ert/janitor/party)
+110 -68
View File
@@ -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"
@@ -252,6 +255,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)
@@ -260,8 +266,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/centcom_official, TRUE)
/datum/admins/proc/makeERTPreviewIcon(list/settings)
// Set up the dummy for its photoshoot
@@ -319,6 +323,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")]")
)
)
@@ -340,77 +347,110 @@
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/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad", null)
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?.brief_outfit
usr.client.prefs.copy_to(admin_officer)
admin_officer.equipOutfit(chosen_outfit)
admin_officer.key = usr.key
else
to_chat(usr, "<span class='warning'>Could not spawn you in as briefing officer as you are not a ghost!</spawn>")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad")
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
var/index = 0
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 = pick(candidates)
candidates -= chosen_candidate
if(!chosen_candidate.key)
continue
//Spawn the body
var/mob/living/carbon/human/ERTOperative = new ertemplate.mobtype(spawnloc)
chosen_candidate.client.prefs.copy_to(ERTOperative)
ERTOperative.key = chosen_candidate.key
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
else
if(candidates.len == 0)
return FALSE
//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 = sortList(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
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.copy_to(ert_operative)
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
//Abductors
@@ -421,3 +461,5 @@
/datum/admins/proc/makeRevenant()
new /datum/round_event/ghost_role/revenant(TRUE, TRUE)
return 1
#undef ERT_EXPERIENCED_LEADER_CHOOSE_TOP
+34
View File
@@ -38,6 +38,33 @@
/datum/antagonist/ert/proc/update_name()
owner.current.fully_replace_character_name(owner.current.real_name,"[role] [pick(name_source)]")
/datum/antagonist/ert/official
name = "CentCom Official"
show_name_in_check_antagonists = TRUE
var/datum/objective/mission
role = "Inspector"
random_names = FALSE
outfit = /datum/outfit/centcom/centcom_official
/datum/antagonist/ert/official/greet()
to_chat(owner, "<B><font size=3 color=red>You are a CentCom Official.</font></B>")
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
@@ -128,8 +155,15 @@
/datum/antagonist/ert/intern/leader
name = "CentCom Head Intern"
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/clown
role = "Clown"
outfit = /datum/outfit/centcom/ert/clown
@@ -1,45 +0,0 @@
/datum/antagonist/official
name = "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
/datum/antagonist/official/greet()
to_chat(owner, "<B><font size=3 color=red>You are a CentCom Official.</font></B>")
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
H.equipOutfit(/datum/outfit/centcom/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()
+13
View File
@@ -18,6 +18,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
var/ooccolor = "#c43b23"
var/asaycolor = "#ff4500" //This won't change the color for current admins, only incoming ones.
/// If we spawn an ERT as an admin and choose to spawn as the briefing officer, we'll be given this outfit
var/brief_outfit = /datum/outfit/centcom/commander
var/enable_tips = TRUE
var/tip_delay = 500 //tip delay in milliseconds
@@ -735,6 +737,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>Hide Radio Messages:</b> <a href = '?_src_=prefs;preference=toggle_radio_chatter'>[(chat_toggles & CHAT_RADIO)?"Shown":"Hidden"]</a><br>"
dat += "<b>Hide Prayers:</b> <a href = '?_src_=prefs;preference=toggle_prayers'>[(chat_toggles & CHAT_PRAYER)?"Shown":"Hidden"]</a><br>"
dat += "<b>Ignore Being Summoned as Cult Ghost:</b> <a href = '?_src_=prefs;preference=toggle_ignore_cult_ghost'>[(toggles & ADMIN_IGNORE_CULT_GHOST)?"Don't Allow Being Summoned":"Allow Being Summoned"]</a><br>"
dat += "<b>Briefing Officer Outfit:</b> <a href = '?_src_=prefs;preference=briefoutfit;task=input'>[brief_outfit]</a><br>"
if(CONFIG_GET(flag/allow_admin_asaycolor))
dat += "<br>"
dat += "<b>ASAY Color:</b> <span style='border: 1px solid #161616; background-color: [asaycolor ? asaycolor : "#FF4500"];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=asaycolor;task=input'>Change</a><br>"
@@ -1515,6 +1518,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_asaycolor)
asaycolor = sanitize_ooccolor(new_asaycolor)
if("briefoutfit")
var/list/valid_paths = list()
for(var/datum/outfit/iter_outfit in subtypesof(/datum/outfit))
if(initial(iter_outfit.can_be_admin_equipped))
valid_paths[initial(iter_outfit.name)] = path
var/new_outfit = input(user, "Choose your briefing officer outfit:", "Game Preference") as null|anything in valid_paths
new_outfit = valid_paths[new_outfit]
if(new_outfit)
brief_outfit = new_outfit
if("bag")
var/new_backpack = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backpacklist
if(new_backpack)
@@ -161,6 +161,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//general preferences
READ_FILE(S["asaycolor"], asaycolor)
READ_FILE(S["brief_outfit"], brief_outfit)
READ_FILE(S["ooccolor"], ooccolor)
READ_FILE(S["lastchangelog"], lastchangelog)
READ_FILE(S["UI_style"], UI_style)
@@ -251,6 +252,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION)
menuoptions = SANITIZE_LIST(menuoptions)
be_special = SANITIZE_LIST(be_special)
brief_outfit = sanitize_inlist(brief_outfit, subtypesof(/datum/outfit), null)
pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style))
pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color))
key_bindings = sanitize_keybindings(key_bindings)
@@ -287,6 +289,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//general preferences
WRITE_FILE(S["asaycolor"], asaycolor)
WRITE_FILE(S["brief_outfit"], brief_outfit)
WRITE_FILE(S["ooccolor"], ooccolor)
WRITE_FILE(S["lastchangelog"], lastchangelog)
WRITE_FILE(S["UI_style"], UI_style)
+13 -4
View File
@@ -1,5 +1,3 @@
/* //SKYRAT EDIT: Made modular. in ert_skyrat.dm
/datum/outfit/centcom/ert
name = "ERT Common"
@@ -348,6 +346,13 @@
W.registered_name = H.real_name
W.update_label()
/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
@@ -356,6 +361,12 @@
l_hand = /obj/item/megaphone
head = /obj/item/clothing/head/intern
/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/ert/janitor/party
name = "ERP Cleaning Service"
@@ -429,5 +440,3 @@
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/fireworks=3,\
/obj/item/food/cake/birthday=1)
*/ //SKYRAT EDIT END
-429
View File
@@ -1,429 +0,0 @@
/datum/outfit/centcom/ert
name = "ERT Common"
mask = /obj/item/clothing/mask/gas/sechailer
uniform = /obj/item/clothing/under/rank/centcom/officer
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/radio/headset/headset_cent/alt
/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.set_frequency(FREQ_CENTCOM)
R.freqlock = TRUE
var/obj/item/card/id/W = H.wear_id
if(W)
W.registered_name = H.real_name
W.update_label()
..()
/datum/outfit/centcom/ert/commander
name = "ERT Commander"
id = /obj/item/card/id/ert
suit = /obj/item/clothing/suit/space/hardsuit/ert
suit_store = /obj/item/gun/energy/e_gun
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
back = /obj/item/storage/backpack/ert
belt = /obj/item/storage/belt/security/full
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1)
l_pocket = /obj/item/switchblade
/datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/captain
R.recalculateChannels()
/datum/outfit/centcom/ert/commander/alert
name = "ERT Commander - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
glasses = /obj/item/clothing/glasses/thermal/eyepatch
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/gun/energy/pulse/pistol/loyalpin=1)
l_pocket = /obj/item/melee/transforming/energy/sword/saber
/datum/outfit/centcom/ert/security
name = "ERT Security"
id = /obj/item/card/id/ert/security
suit = /obj/item/clothing/suit/space/hardsuit/ert/sec
suit_store = /obj/item/gun/energy/e_gun/stun
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
back = /obj/item/storage/backpack/ert/security
belt = /obj/item/storage/belt/security/full
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/handcuffs=1,\
/obj/item/melee/baton/loaded=1)
/datum/outfit/centcom/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/hos
R.recalculateChannels()
/datum/outfit/centcom/ert/security/alert
name = "ERT Security - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
belt = /obj/item/gun/energy/pulse/carbine/loyalpin
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/handcuffs=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/storage/belt/security/full=1)
/datum/outfit/centcom/ert/medic
name = "ERT Medic"
id = /obj/item/card/id/ert/medical
suit = /obj/item/clothing/suit/space/hardsuit/ert/med
suit_store = /obj/item/gun/energy/e_gun
glasses = /obj/item/clothing/glasses/hud/health
back = /obj/item/storage/backpack/ert/medical
belt = /obj/item/storage/belt/medical
l_hand = /obj/item/storage/firstaid/regular
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/reagent_containers/hypospray/combat=1,\
/obj/item/gun/medbeam=1)
/datum/outfit/centcom/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/cmo
R.recalculateChannels()
/datum/outfit/centcom/ert/medic/alert
name = "ERT Medic - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/gun/energy/pulse/pistol/loyalpin=1,\
/obj/item/reagent_containers/hypospray/combat/nanites=1,\
/obj/item/gun/medbeam=1)
/datum/outfit/centcom/ert/engineer
name = "ERT Engineer"
id = /obj/item/card/id/ert/engineer
suit = /obj/item/clothing/suit/space/hardsuit/ert/engi
suit_store = /obj/item/gun/energy/e_gun
glasses = /obj/item/clothing/glasses/meson/engine
back = /obj/item/storage/backpack/ert/engineer
belt = /obj/item/storage/belt/utility/full/powertools
l_pocket = /obj/item/rcd_ammo/large
l_hand = /obj/item/storage/firstaid/regular
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/construction/rcd/loaded/upgraded=1,\
/obj/item/pipe_dispenser=1)
/datum/outfit/centcom/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/ce
R.recalculateChannels()
/datum/outfit/centcom/ert/engineer/alert
name = "ERT Engineer - High Alert"
mask = /obj/item/clothing/mask/gas/sechailer/swat
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/gun/energy/pulse/pistol/loyalpin=1,\
/obj/item/construction/rcd/combat=1,\
/obj/item/pipe_dispenser=1)
/datum/outfit/centcom/centcom_official
name = "CentCom Official"
uniform = /obj/item/clothing/under/rank/centcom/officer
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/sunglasses
belt = /obj/item/gun/energy/e_gun
l_pocket = /obj/item/pen
back = /obj/item/storage/backpack/satchel
r_pocket = /obj/item/pda/heads
l_hand = /obj/item/clipboard
id = /obj/item/card/id/centcom
backpack_contents = list(/obj/item/stamp/centcom=1)
/datum/outfit/centcom/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/pda/heads/pda = H.r_store
pda.owner = H.real_name
pda.ownjob = "CentCom Official"
pda.update_label()
var/obj/item/card/id/W = H.wear_id
W.access = get_centcom_access("CentCom Official")
W.access += ACCESS_WEAPONS
W.assignment = "CentCom Official"
W.registered_name = H.real_name
W.update_label()
..()
/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
backpack_contents = list(/obj/item/storage/box/survival/engineer=1)
/datum/outfit/centcom/ert/security/inquisitor
name = "Inquisition Security"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
suit_store = /obj/item/gun/energy/e_gun/stun
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,
/obj/item/storage/box/handcuffs=1,
/obj/item/melee/baton/loaded=1,
/obj/item/construction/rcd/loaded=1)
/datum/outfit/centcom/ert/medic/inquisitor
name = "Inquisition Medic"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,
/obj/item/melee/baton/loaded=1,
/obj/item/reagent_containers/hypospray/combat=1,
/obj/item/reagent_containers/hypospray/combat/heresypurge=1,
/obj/item/gun/medbeam=1)
/datum/outfit/centcom/ert/chaplain
name = "ERT Chaplain"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit
suit_store = /obj/item/gun/energy/e_gun
id = /obj/item/card/id/ert/chaplain
glasses = /obj/item/clothing/glasses/hud/health
back = /obj/item/storage/backpack/cultpack
belt = /obj/item/storage/belt/soulstone
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,
/obj/item/nullrod=1,
)
/datum/outfit/centcom/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/heads/hop
R.recalculateChannels()
/datum/outfit/centcom/ert/chaplain/inquisitor
name = "Inquisition Chaplain"
belt = /obj/item/storage/belt/soulstone/full/chappy
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,
/obj/item/grenade/chem_grenade/holy=1,
/obj/item/nullrod=1
)
/datum/outfit/centcom/ert/janitor
name = "ERT Janitor"
id = /obj/item/card/id/ert/janitor
suit = /obj/item/clothing/suit/space/hardsuit/ert/jani
glasses = /obj/item/clothing/glasses/night
back = /obj/item/storage/backpack/ert/janitor
belt = /obj/item/storage/belt/janitor/full
r_pocket = /obj/item/grenade/chem_grenade/cleaner
l_pocket = /obj/item/grenade/chem_grenade/cleaner
l_hand = /obj/item/storage/bag/trash/bluespace
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/lights/mixed=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/mop/advanced=1,\
/obj/item/reagent_containers/glass/bucket=1,\
/obj/item/grenade/clusterbuster/cleaner=1)
/datum/outfit/centcom/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/headset_service
R.recalculateChannels()
/datum/outfit/centcom/ert/janitor/heavy
name = "ERT Janitor - Heavy Duty"
mask = /obj/item/clothing/mask/gas/sechailer/swat
l_hand = /obj/item/reagent_containers/spray/chemsprayer/janitor
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/lights/mixed=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/grenade/clusterbuster/cleaner=3)
/datum/outfit/centcom/ert/clown
name = "ERT Clown"
suit = /obj/item/clothing/suit/space/hardsuit/ert/clown
mask = /obj/item/clothing/mask/gas/clown_hat
id = /obj/item/card/id/ert/clown
glasses = /obj/item/clothing/glasses/godeye
back = /obj/item/storage/backpack/ert/clown
belt = /obj/item/storage/belt/champion
shoes = /obj/item/clothing/shoes/clown_shoes/combat
r_pocket = /obj/item/bikehorn/golden
l_pocket = /obj/item/food/grown/banana
backpack_contents = list(/obj/item/storage/box/hug/survival=1,\
/obj/item/melee/transforming/energy/sword/bananium=1,\
/obj/item/shield/energy/bananium=1,\
/obj/item/gun/ballistic/revolver/reverse=1)
/datum/outfit/centcom/ert/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
var/obj/item/radio/R = H.ears
R.keyslot = new /obj/item/encryptionkey/headset_service
R.recalculateChannels()
ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT)
H.dna.add_mutation(CLOWNMUT)
for(var/datum/mutation/human/clumsy/M in H.dna.mutations)
M.mutadone_proof = TRUE
/datum/outfit/centcom/centcom_intern
name = "CentCom Intern"
uniform = /obj/item/clothing/under/rank/centcom/intern
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/sunglasses
belt = /obj/item/melee/classic_baton
l_hand = /obj/item/gun/ballistic/rifle/boltaction/brand_new
back = /obj/item/storage/backpack/satchel
l_pocket = /obj/item/ammo_box/a762
r_pocket = /obj/item/ammo_box/a762
id = /obj/item/card/id/centcom
backpack_contents = list(/obj/item/storage/box/survival = 1)
/datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/card/id/W = H.wear_id
W.access = get_centcom_access(name)
W.access += ACCESS_WEAPONS
W.assignment = name
W.registered_name = H.real_name
W.update_label()
/datum/outfit/centcom/centcom_intern/leader
name = "CentCom Head Intern"
belt = /obj/item/melee/baton/loaded
suit = /obj/item/clothing/suit/armor/vest
suit_store = /obj/item/gun/ballistic/rifle/boltaction/brand_new
l_hand = /obj/item/megaphone
head = /obj/item/clothing/head/intern
/datum/outfit/centcom/ert/janitor/party
name = "ERP Cleaning Service"
uniform = /obj/item/clothing/under/misc/overalls
mask = /obj/item/clothing/mask/bandana/blue
suit = /obj/item/clothing/suit/apron
suit_store = null
glasses = /obj/item/clothing/glasses/meson
belt = /obj/item/storage/belt/janitor/full
r_pocket = /obj/item/grenade/chem_grenade/cleaner
l_pocket = /obj/item/grenade/chem_grenade/cleaner
l_hand = /obj/item/storage/bag/trash
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/lights/mixed=1,\
/obj/item/mop/advanced=1,\
/obj/item/reagent_containers/glass/bucket=1)
/datum/outfit/centcom/ert/security/party
name = "ERP Bouncer"
uniform = /obj/item/clothing/under/misc/bouncer
suit = /obj/item/clothing/suit/armor/vest
suit_store = null
belt = /obj/item/melee/classic_baton/telescopic
l_pocket = /obj/item/assembly/flash
r_pocket = /obj/item/storage/wallet
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/clothing/head/helmet/police=1,\
/obj/item/storage/box/handcuffs=1)
/datum/outfit/centcom/ert/engineer/party
name = "ERP Constructor"
uniform = /obj/item/clothing/under/rank/engineering/engineer/hazard
mask = /obj/item/clothing/mask/gas/atmos
head = /obj/item/clothing/head/hardhat/weldhat
suit = /obj/item/clothing/suit/hazardvest
suit_store = null
l_hand = /obj/item/areaeditor/blueprints
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/stack/sheet/iron/fifty=1,\
/obj/item/stack/sheet/glass/fifty=1,\
/obj/item/stack/sheet/plasteel/twenty=1,\
/obj/item/etherealballdeployer=1,\
/obj/item/stack/light_w=30,\
/obj/item/construction/rcd/loaded=1)
/datum/outfit/centcom/ert/clown/party
name = "ERP Comedian"
uniform = /obj/item/clothing/under/rank/civilian/clown
head = /obj/item/clothing/head/chameleon
suit = /obj/item/clothing/suit/chameleon
suit_store = null
glasses = /obj/item/clothing/glasses/chameleon
backpack_contents = list(/obj/item/storage/box/hug/survival=1,\
/obj/item/shield/energy/bananium=1,\
/obj/item/instrument/piano_synth=1)
/datum/outfit/centcom/ert/commander/party
name = "ERP Coordinator"
uniform = /obj/item/clothing/under/misc/coordinator
head = /obj/item/clothing/head/coordinator
suit = /obj/item/clothing/suit/coordinator
suit_store = null
belt = /obj/item/storage/belt/sabre
l_hand = /obj/item/toy/balloon
l_pocket = /obj/item/kitchen/knife
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/box/fireworks=3,\
/obj/item/food/cake/birthday=1)
@@ -0,0 +1,5 @@
//////////////////////////////
//SKYRAT MODULAR OUTFITS FILE
//PUT ANY NEW ERT OUTFITS HERE
//////////////////////////////
@@ -33,6 +33,8 @@ GLOBAL_LIST_INIT(food, list(
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
var/ooccolor = "#c43b23"
var/asaycolor = "#ff4500" //This won't change the color for current admins, only incoming ones.
/// If we spawn an ERT as an admin and choose to spawn as the briefing officer, we'll be given this outfit
var/brief_outfit = /datum/outfit/centcom/commander
var/enable_tips = TRUE
var/tip_delay = 500 //tip delay in milliseconds
@@ -1104,6 +1106,7 @@ GLOBAL_LIST_INIT(food, list(
dat += "<b>Hide Radio Messages:</b> <a href = '?_src_=prefs;preference=toggle_radio_chatter'>[(chat_toggles & CHAT_RADIO)?"Shown":"Hidden"]</a><br>"
dat += "<b>Hide Prayers:</b> <a href = '?_src_=prefs;preference=toggle_prayers'>[(chat_toggles & CHAT_PRAYER)?"Shown":"Hidden"]</a><br>"
dat += "<b>Ignore Being Summoned as Cult Ghost:</b> <a href = '?_src_=prefs;preference=toggle_ignore_cult_ghost'>[(toggles & ADMIN_IGNORE_CULT_GHOST)?"Don't Allow Being Summoned":"Allow Being Summoned"]</a><br>"
dat += "<b>Briefing Officer Outfit:</b> <a href = '?_src_=prefs;preference=briefoutfit;task=input'>[brief_outfit]</a><br>"
if(CONFIG_GET(flag/allow_admin_asaycolor))
dat += "<br>"
dat += "<b>ASAY Color:</b> <span style='border: 1px solid #161616; background-color: [asaycolor ? asaycolor : "#FF4500"];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=asaycolor;task=input'>Change</a><br>"
@@ -2332,6 +2335,16 @@ GLOBAL_LIST_INIT(food, list(
if(new_asaycolor)
asaycolor = new_asaycolor
if("briefoutfit")
var/list/valid_paths = list()
for(var/datum/outfit/iter_outfit in subtypesof(/datum/outfit))
if(initial(iter_outfit.can_be_admin_equipped))
valid_paths[initial(iter_outfit.name)] = path
var/new_outfit = input(user, "Choose your briefing officer outfit:", "Game Preference") as null|anything in valid_paths
new_outfit = valid_paths[new_outfit]
if(new_outfit)
brief_outfit = new_outfit
if("bag")
var/new_backpack = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backpacklist
if(new_backpack)
+1 -2
View File
@@ -1673,7 +1673,6 @@
#include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm"
#include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm"
#include "code\modules\antagonists\nukeop\equipment\pinpointer.dm"
#include "code\modules\antagonists\official\official.dm"
#include "code\modules\antagonists\pirate\pirate.dm"
#include "code\modules\antagonists\revenant\revenant.dm"
#include "code\modules\antagonists\revenant\revenant_abilities.dm"
@@ -1913,7 +1912,6 @@
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\neck\_neck.dm"
#include "code\modules\clothing\outfits\ert.dm"
#include "code\modules\clothing\outfits\ert_skyrat.dm"
#include "code\modules\clothing\outfits\event.dm"
#include "code\modules\clothing\outfits\plasmaman.dm"
#include "code\modules\clothing\outfits\standard.dm"
@@ -3409,6 +3407,7 @@
#include "modular_skyrat\master_files\code\game\objects\structures\trash_pile.dm"
#include "modular_skyrat\master_files\code\modules\clothing\anthro_clothes.dm"
#include "modular_skyrat\master_files\code\modules\clothing\non_anthro_clothes.dm"
#include "modular_skyrat\master_files\code\modules\clothing\outfits\ert.dm"
#include "modular_skyrat\master_files\code\modules\events\spider_infestation.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\emote_popup.dm"
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_say.dm"