[MIRROR] Create ERT refactor (#5924)

* Create ERT refactor (#36321)

cl Naksu
admin: ERT creation has been refactored to allow for easier customization and deployment via templates and settings
/cl

* Create ERT refactor
This commit is contained in:
CitadelStationBot
2018-03-12 07:30:03 -05:00
committed by Poojawa
parent 6a65ed49d0
commit c91006c27f
13 changed files with 446 additions and 178 deletions

View File

@@ -393,7 +393,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
//Dummy mob reserve slots
#define DUMMY_HUMAN_SLOT_PREFERENCES "dummy_preference_preview"
#define DUMMY_HUMAN_SLOT_ADMIN "admintools"
#define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation"
#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round

View File

@@ -312,8 +312,9 @@
/datum/browser/modal/preflikepicker
var/settings = list()
var/icon/preview_icon = null
var/datum/callback/preview_update
/datum/browser/modal/preflikepicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/settings,inputtype="checkbox", width = 400, height, slidecolor)
/datum/browser/modal/preflikepicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/settings,inputtype="checkbox", width = 600, height, slidecolor)
if (!User)
return
src.settings = settings
@@ -322,12 +323,20 @@
set_content(ShowChoices(User))
/datum/browser/modal/preflikepicker/proc/ShowChoices(mob/user)
if (settings["preview_callback"])
var/datum/callback/callback = settings["preview_callback"]
preview_icon = callback.Invoke(settings)
if (preview_icon)
user << browse_rsc(preview_icon, "previewicon.png")
var/dat = ""
for (var/name in settings["mainsettings"])
var/setting = settings["mainsettings"][name]
if (setting["type"] == "datum")
dat += "<b>[setting["desc"]]:</b> <a href='?src=[REF(src)];setting=[name];task=input;type=datum;path=[setting["path"]]'>[setting["value"]]</a><BR>"
if (setting["subtypesonly"])
dat += "<b>[setting["desc"]]:</b> <a href='?src=[REF(src)];setting=[name];task=input;subtypesonly=1;type=datum;path=[setting["path"]]'>[setting["value"]]</a><BR>"
else
dat += "<b>[setting["desc"]]:</b> <a href='?src=[REF(src)];setting=[name];task=input;type=datum;path=[setting["path"]]'>[setting["value"]]</a><BR>"
else
dat += "<b>[setting["desc"]]:</b> <a href='?src=[REF(src)];setting=[name];task=input;type=[setting["type"]]'>[setting["value"]]</a><BR>"
@@ -354,7 +363,13 @@
var/setting = href_list["setting"]
switch (href_list["type"])
if ("datum")
settings["mainsettings"][setting]["value"] = pick_closest_path(null, make_types_fancy(typesof(text2path(href_list["path"]))))
var/oldval = settings["mainsettings"][setting]["value"]
if (href_list["subtypesonly"])
settings["mainsettings"][setting]["value"] = pick_closest_path(null, make_types_fancy(subtypesof(text2path(href_list["path"]))))
else
settings["mainsettings"][setting]["value"] = pick_closest_path(null, make_types_fancy(typesof(text2path(href_list["path"]))))
if (isnull(settings["mainsettings"][setting]["value"]))
settings["mainsettings"][setting]["value"] = oldval
if ("string")
settings["mainsettings"][setting]["value"] = stripped_input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]")
if ("number")
@@ -363,6 +378,9 @@
settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("Yes","No")
if ("ckey")
settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("none") + GLOB.directory
if (settings["mainsettings"][setting]["callback"])
var/datum/callback/callback = settings["mainsettings"][setting]["callback"]
settings = callback.Invoke(settings)
if (href_list["button"])
var/button = text2num(href_list["button"])
if (button <= 3 && button >= 1)

55
code/datums/ert.dm Normal file
View File

@@ -0,0 +1,55 @@
/datum/ert
var/mobtype = /mob/living/carbon/human
var/team = /datum/team/ert
var/opendoors = TRUE
var/leader_role = /datum/antagonist/ert/commander
var/enforce_human = TRUE
var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) //List of possible roles to be assigned to ERT members.
var/rename_team
var/code
var/mission = "Assist the station."
var/teamsize = 5
var/polldesc
/datum/ert/New()
if (!polldesc)
polldesc = "a Code [code] Nanotrasen Emergency Response Team"
/datum/ert/blue
opendoors = FALSE
code = "Blue"
/datum/ert/amber
code = "Amber"
/datum/ert/red
leader_role = /datum/antagonist/ert/commander/red
roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red)
code = "Red"
/datum/ert/deathsquad
roles = list(/datum/antagonist/ert/deathsquad)
leader_role = /datum/antagonist/ert/deathsquad/leader
rename_team = "Deathsquad"
code = "Delta"
mission = "Leave no witnesses."
polldesc = "an elite Nanotrasen Strike Team"
/datum/ert/centcom_official
code = "Green"
teamsize = 1
opendoors = FALSE
leader_role = /datum/antagonist/official
roles = list(/datum/antagonist/official)
rename_team = "CentCom Officials"
polldesc = "a CentCom Official"
/datum/ert/centcom_official/New()
mission = "Conduct a routine performance review of [station_name()] and its Captain."
/datum/ert/inquisition
roles = list(/datum/antagonist/ert/chaplain/inquisitor, /datum/antagonist/ert/security/inquisitor, /datum/antagonist/ert/medic/inquisitor)
leader_role = /datum/antagonist/ert/commander/inquisitor
rename_team = "Inquisition"
mission = "Destroy any traces of paranormal activity aboard the station."
polldesc = "a Nanotrasen paranormal response team"

View File

@@ -293,6 +293,14 @@ update_label("John Doe", "Clowny")
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
. = ..()
/obj/item/card/id/ert/chaplain
registered_name = "Religious Response Officer"
assignment = "Religious Response Officer"
/obj/item/card/id/ert/chaplain/Initialize()
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
. = ..()
/obj/item/card/id/prisoner
name = "prisoner ID card"
desc = "You are a number, you are not a free man."

View File

@@ -550,3 +550,20 @@
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/holy
name = "holy hand grenade"
desc = "A vessel of concentrated religious might."
icon_state = "holy_grenade"
stage = READY
/obj/item/grenade/chem_grenade/holy/Initialize()
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("potassium", 100)
B2.reagents.add_reagent("holywater", 100)
beakers += B1
beakers += B2

View File

@@ -274,6 +274,17 @@
qdel(S)
return ..()
/obj/item/nullrod/scythe/talking/chainsword
icon_state = "chainswordon"
item_state = "chainswordon"
name = "possessed chainsaw sword"
desc = "Suffer not a heretic to live."
slot_flags = SLOT_BELT
force = 30
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
/obj/item/nullrod/hammmer
icon_state = "hammeron"
item_state = "hammeron"

View File

@@ -942,3 +942,12 @@ obj/item/storage/box/clown
/obj/item/storage/box/fountainpens/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/pen/fountain(src)
/obj/item/storage/box/holy_grenades
name = "box of holy hand grenades"
desc = "Contains several grenades used to rapidly purge heresy."
illustration = "flashbang"
/obj/item/storage/box/holy_grenades/PopulateContents()
for(var/i in 1 to 7)
new/obj/item/grenade/chem_grenade/holy(src)

View File

@@ -271,157 +271,177 @@
// DEATH SQUADS
/datum/admins/proc/makeDeathsquad()
return makeEmergencyresponseteam(ERT_DEATHSQUAD)
/datum/admins/proc/makeOfficial()
var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a CentCom Official?", "deathsquad")
if(candidates.len)
var/mob/dead/observer/chosen_candidate = pick(candidates)
//Create the official
var/mob/living/carbon/human/newmob = new (pick(GLOB.emergencyresponseteamspawn))
chosen_candidate.client.prefs.copy_to(newmob)
newmob.real_name = newmob.dna.species.random_name(newmob.gender,1)
newmob.dna.update_dna_identity()
newmob.key = chosen_candidate.key
//Job
newmob.mind.assigned_role = "CentCom Official"
newmob.mind.special_role = "official"
//Mission
var/datum/objective/missionobj = new
missionobj.owner = newmob.mind
missionobj.explanation_text = mission
missionobj.completed = 1
var/datum/antagonist/official/O = new
O.mission = missionobj
newmob.mind.add_antag_datum(O)
//Logging and cleanup
message_admins("CentCom Official [key_name_admin(newmob)] has spawned with the task: [mission]")
log_game("[key_name(newmob)] has been selected as a CentCom Official")
return 1
return 0
return makeEmergencyresponseteam(/datum/ert/deathsquad)
// CENTCOM RESPONSE TEAM
/datum/admins/proc/makeEmergencyresponseteam(alert_type)
var/alert
if(!alert_type)
alert = input("Which team should we send?", "Select Response Level") as null|anything in list("Green: CentCom Official", "Blue: Light ERT (No Armoury Access)", "Amber: Full ERT (Armoury Access)", "Red: Elite ERT (Armoury Access + Pulse Weapons)", "Delta: Deathsquad")
if(!alert)
return
else
alert = alert_type
var/teamsize = 0
var/deathsquad = FALSE
switch(alert)
if("Delta: Deathsquad")
alert = ERT_DEATHSQUAD
teamsize = 5
deathsquad = TRUE
if("Red: Elite ERT (Armoury Access + Pulse Weapons)")
alert = ERT_RED
if("Amber: Full ERT (Armoury Access)")
alert = ERT_AMBER
if("Blue: Light ERT (No Armoury Access)")
alert = ERT_BLUE
if("Green: CentCom Official")
return makeOfficial()
else
return
if(!teamsize)
var/teamcheck = input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num
if(isnull(teamcheck))
return
teamsize = min(7,teamcheck)
var/default_mission = deathsquad ? "Leave no witnesses." : "Assist the station."
var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", default_mission) as null|text
if(!mission)
/datum/admins/proc/makeERTTemplateModified(list/settings)
. = settings
var/datum/ert/newtemplate = settings["mainsettings"]["template"]["value"]
if (isnull(newtemplate))
return
var/prompt_name = deathsquad ? "an elite Nanotrasen Strike Team" : "a Code [alert] Nanotrasen Emergency Response Team"
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [prompt_name] ?", "deathsquad", null)
var/teamSpawned = 0
if (!ispath(newtemplate))
newtemplate = text2path(newtemplate)
newtemplate = new newtemplate
.["mainsettings"]["teamsize"]["value"] = newtemplate.teamsize
.["mainsettings"]["mission"]["value"] = newtemplate.mission
.["mainsettings"]["polldesc"]["value"] = newtemplate.polldesc
if(candidates.len > 0)
//Pick the (un)lucky players
var/numagents = min(teamsize,candidates.len) //How many officers to spawn
//Create team
var/datum/team/ert/ert_team = new
if(deathsquad)
ert_team.name = "Death Squad"
//Asign team objective
var/datum/objective/missionobj = new
missionobj.team = ert_team
missionobj.explanation_text = mission
missionobj.completed = 1
ert_team.objectives += missionobj
ert_team.mission = missionobj
/datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag)
for(var/I in mannequin.get_equipped_items())
qdel(I)
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)
//We give these out in order, then back from the start if there's more than 3
var/list/role_order = list(ERT_SEC,ERT_MED,ERT_ENG)
/datum/admins/proc/makeERTPreviewIcon(list/settings)
// Set up the dummy for its photoshoot
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_ADMIN)
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
while(numagents && candidates.len)
if (numagents > spawnpoints.len)
var/prefs = settings["mainsettings"]
var/datum/ert/template = prefs["template"]["value"]
if (isnull(template))
return null
if (!ispath(template))
template = text2path(prefs["template"]["value"]) // new text2path ... doesn't compile in 511
template = new template
var/datum/antagonist/ert/ert = template.leader_role
equipAntagOnDummy(mannequin, ert)
COMPILE_OVERLAYS(mannequin)
CHECK_TICK
var/icon/preview_icon = icon('icons/effects/effects.dmi', "nothing")
preview_icon.Scale(48+32, 16+32)
CHECK_TICK
mannequin.setDir(NORTH)
var/icon/stamp = getFlatIcon(mannequin)
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
CHECK_TICK
mannequin.setDir(WEST)
stamp = getFlatIcon(mannequin)
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
CHECK_TICK
mannequin.setDir(SOUTH)
stamp = getFlatIcon(mannequin)
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
CHECK_TICK
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
CHECK_TICK
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_ADMIN)
return preview_icon
/datum/admins/proc/makeEmergencyresponseteam(var/datum/ert/ertemplate = null)
if (ertemplate)
ertemplate = new ertemplate
else
ertemplate = new /datum/ert/centcom_official
var/list/settings = list(
"preview_callback" = CALLBACK(src, .proc/makeERTPreviewIcon),
"mainsettings" = list(
"template" = list("desc" = "Template", "callback" = CALLBACK(src, .proc/makeERTTemplateModified), "type" = "datum", "path" = "/datum/ert", "subtypesonly" = TRUE, "value" = ertemplate.type),
"teamsize" = list("desc" = "Team Size", "type" = "number", "value" = ertemplate.teamsize),
"mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission),
"polldesc" = list("desc" = "Ghost poll description", "string" = "text", "value" = ertemplate.polldesc),
"enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(CONFIG_GET(flag/enforce_human_authority) ? "Yes" : "No")]"),
)
)
var/list/prefreturn = presentpreflikepicker(usr,"Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings)
if (isnull(prefreturn))
return FALSE
if (prefreturn["button"] == 1)
var/list/prefs = settings["mainsettings"]
var/templtype = prefs["template"]["value"]
if (!ispath(prefs["template"]["value"]))
templtype = text2path(prefs["template"]["value"]) // new text2path ... doesn't compile in 511
if (ertemplate.type != templtype)
ertemplate = new templtype
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
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null)
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
//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.dangerous_existence) // 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--
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
teamSpawned++
//Spawn the body
var/mob/living/carbon/human/ERTOperative = new(spawnloc)
chosen_candidate.client.prefs.copy_to(ERTOperative)
ERTOperative.key = chosen_candidate.key
if(CONFIG_GET(flag/enforce_human_authority))
ERTOperative.set_species(/datum/species/human)
if (teamSpawned)
message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]")
//Give antag datum
var/datum/antagonist/ert/ert_antag = new
ert_antag.high_alert = alert == ERT_RED
if(numagents == 1)
ert_antag.role = deathsquad ? DEATHSQUAD_LEADER : ERT_LEADER
else
ert_antag.role = deathsquad ? DEATHSQUAD : role_order[WRAP(numagents,1,role_order.len + 1)]
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("[prompt_name] has spawned with the mission: [mission]")
//Open the Armory doors
if(alert != ERT_BLUE)
if(ertemplate.opendoors)
for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
spawn(0)
door.open()
return 1
door.open()
CHECK_TICK
return TRUE
else
return 0
return FALSE
return

View File

@@ -6,8 +6,10 @@
/datum/antagonist/ert
name = "Emergency Response Officer"
var/datum/team/ert/ert_team
var/role = ERT_SEC
var/high_alert = FALSE
var/leader = FALSE
var/datum/outfit/outfit = /datum/outfit/ert/security
var/role = "Security Officer"
var/list/name_source
show_in_antagpanel = FALSE
antag_moodlet = /datum/mood_event/focused
@@ -20,25 +22,76 @@
/datum/antagonist/ert/get_team()
return ert_team
/datum/antagonist/ert/New()
. = ..()
name_source = GLOB.last_names
/datum/antagonist/ert/proc/update_name()
var/new_name
switch(role)
if(ERT_ENG)
new_name = "Engineer [pick(GLOB.last_names)]"
if(ERT_MED)
new_name = "Medical Officer [pick(GLOB.last_names)]"
if(ERT_SEC)
new_name = "Security Officer [pick(GLOB.last_names)]"
if(ERT_LEADER)
new_name = "Commander [pick(GLOB.last_names)]"
name = "Emergency Response Commander"
if(DEATHSQUAD)
new_name = "Trooper [pick(GLOB.commando_names)]"
name = "Deathsquad Trooper"
if(DEATHSQUAD_LEADER)
new_name = "Officer [pick(GLOB.commando_names)]"
name = "Deathsquad Officer"
owner.current.fully_replace_character_name(owner.current.real_name,new_name)
owner.current.fully_replace_character_name(owner.current.real_name,"[role] [pick(name_source)]")
/datum/antagonist/ert/deathsquad/New()
. = ..()
name_source = GLOB.commando_names
/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
/datum/antagonist/ert/engineer
role = "Engineer"
outfit = /datum/outfit/ert/engineer
/datum/antagonist/ert/engineer/red
outfit = /datum/outfit/ert/engineer/alert
/datum/antagonist/ert/medic
role = "Medical Officer"
outfit = /datum/outfit/ert/medic
/datum/antagonist/ert/medic/red
outfit = /datum/outfit/ert/medic/alert
/datum/antagonist/ert/commander
role = "Commander"
outfit = /datum/outfit/ert/commander
/datum/antagonist/ert/commander/red
outfit = /datum/outfit/ert/commander/alert
/datum/antagonist/ert/deathsquad
name = "Deathsquad Trooper"
outfit = /datum/outfit/death_commando
role = "Trooper"
/datum/antagonist/ert/medic/inquisitor
outfit = /datum/outfit/ert/medic/inquisitor
/datum/antagonist/ert/security/inquisitor
outfit = /datum/outfit/ert/security/inquisitor
/datum/antagonist/ert/chaplain
role = "Chaplain"
outfit = /datum/outfit/ert/chaplain
/datum/antagonist/ert/chaplain/inquisitor
outfit = /datum/outfit/ert/chaplain/inquisitor
/datum/antagonist/ert/chaplain/on_gain()
. = ..()
owner.isholy = TRUE
/datum/antagonist/ert/commander/inquisitor
outfit = /datum/outfit/ert/commander/inquisitor
/datum/antagonist/ert/commander/inquisitor/on_gain()
. = ..()
owner.isholy = TRUE
/datum/antagonist/ert/deathsquad/leader
name = "Deathsquad Officer"
outfit = /datum/outfit/death_commando
role = "Officer"
/datum/antagonist/ert/create_team(datum/team/ert/new_team)
if(istype(new_team))
@@ -53,28 +106,12 @@
var/mob/living/carbon/human/H = owner.current
if(!istype(H))
return
var/outfit
switch(role)
if(ERT_LEADER)
outfit = high_alert ? /datum/outfit/ert/commander/alert : /datum/outfit/ert/commander
if(ERT_ENG)
outfit = high_alert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer
if(ERT_MED)
outfit = high_alert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic
if(ERT_SEC)
outfit = high_alert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security
if(DEATHSQUAD)
outfit = /datum/outfit/death_commando/officer
if(DEATHSQUAD_LEADER)
outfit = /datum/outfit/death_commando
H.equipOutfit(outfit)
/datum/antagonist/ert/greet()
if(!ert_team)
return
var/leader = role == ERT_LEADER || role == DEATHSQUAD_LEADER
to_chat(owner, "<B><font size=3 color=red>You are the [name].</font></B>")
var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division."
@@ -82,8 +119,23 @@
missiondesc += " Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready."
else
missiondesc += " Follow orders given to you by your squad leader."
if(role != DEATHSQUAD && role != DEATHSQUAD_LEADER)
missiondesc += "Avoid civilian casualites when possible."
missiondesc += "<BR><B>Your Mission</B> : [ert_team.mission.explanation_text]"
to_chat(owner,missiondesc)
/datum/antagonist/ert/deathsquad/greet()
if(!ert_team)
return
to_chat(owner, "<B><font size=3 color=red>You are the [name].</font></B>")
var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division."
if(leader) //If Squad Leader
missiondesc += " Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready."
else
missiondesc += " Follow orders given to you by your squad leader."
missiondesc += "<BR><B>Your Mission</B> : [ert_team.mission.explanation_text]"
to_chat(owner,missiondesc)

View File

@@ -191,3 +191,73 @@
W.assignment = "CentCom Official"
W.registered_name = H.real_name
W.update_label()
/datum/outfit/ert/commander/inquisitor
name = "Inquisition Commander"
r_hand = /obj/item/nullrod/scythe/talking/chainsword
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal
backpack_contents = list(/obj/item/storage/box/engineer=1,
/obj/item/clothing/mask/gas/sechailer=1,
/obj/item/gun/energy/e_gun=1)
/datum/outfit/ert/security/inquisitor
name = "Inquisition Security"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
backpack_contents = list(/obj/item/storage/box/engineer=1,
/obj/item/storage/box/handcuffs=1,
/obj/item/clothing/mask/gas/sechailer=1,
/obj/item/gun/energy/e_gun/stun=1,
/obj/item/melee/baton/loaded=1,
/obj/item/construction/rcd/loaded=1)
/datum/outfit/ert/medic/inquisitor
name = "Inquisition Medic"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
backpack_contents = list(/obj/item/storage/box/engineer=1,
/obj/item/melee/baton/loaded=1,
/obj/item/clothing/mask/gas/sechailer=1,
/obj/item/gun/energy/e_gun=1,
/obj/item/reagent_containers/hypospray/combat=1,
/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)
..()
if(visualsOnly)
return
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/hop
R.recalculateChannels()
/datum/outfit/ert/chaplain
name = "ERT Chaplain"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit
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/engineer=1,
/obj/item/nullrod=1,
/obj/item/clothing/mask/gas/sechailer=1,
/obj/item/gun/energy/e_gun=1,
)
/datum/outfit/ert/chaplain/inquisitor
name = "Inquisition Chaplain"
suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
belt = /obj/item/storage/belt/soulstone/full
backpack_contents = list(/obj/item/storage/box/engineer=1,
/obj/item/storage/box/holy_grenades=1,
/obj/item/nullrod=1,
/obj/item/clothing/mask/gas/sechailer=1,
/obj/item/gun/energy/e_gun=1,
)

View File

@@ -167,3 +167,10 @@
volume = 1
amount_per_transfer_from_this = 1
list_reagents = list("unstablemutationtoxin" = 1)
/obj/item/reagent_containers/hypospray/combat/heresypurge
name = "holy water autoinjector"
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with 5 doses of a holy water mixture."
volume = 250
list_reagents = list("holywater" = 150, "tiresolution" = 50, "dizzysolution" = 50)
amount_per_transfer_from_this = 50

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -276,6 +276,7 @@
#include "code\datums\dog_fashion.dm"
#include "code\datums\embedding_behavior.dm"
#include "code\datums\emotes.dm"
#include "code\datums\ert.dm"
#include "code\datums\explosion.dm"
#include "code\datums\forced_movement.dm"
#include "code\datums\holocall.dm"