From 0716d1710e290fb1bf2cc6a599f835ba076d2943 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 1 Sep 2024 13:40:12 -0400 Subject: [PATCH 1/9] gupdate --- beestation.dme | 1 - code/datums/browser.dm | 2 +- code/datums/ert.dm | 18 +- code/modules/admin/verbs/one_click_antag.dm | 175 +++++++++++------- code/modules/antagonists/ert/ert.dm | 85 ++++++--- code/modules/antagonists/official/official.dm | 48 ----- .../preferences/entries/player/admin.dm | 28 +++ code/modules/clothing/outfits/ert.dm | 108 ++++++----- .../features/game_preferences/admin.tsx | 9 +- 9 files changed, 282 insertions(+), 192 deletions(-) delete mode 100644 code/modules/antagonists/official/official.dm diff --git a/beestation.dme b/beestation.dme index 598b90abcda73..f57499734d002 100644 --- a/beestation.dme +++ b/beestation.dme @@ -2106,7 +2106,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..8653d07997d96 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) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 591994462c420..cc9271a6d0b0f 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..e2e170ec70a50 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 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 bcf67ded1cdc1..ddc2fc110c46b 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -1,4 +1,13 @@ -/datum/outfit/ert +/datum/outfit/centcom + name = "CentCom Base" + +/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 @@ -7,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 @@ -24,7 +30,7 @@ W.update_label() ..() -/datum/outfit/ert/commander +/datum/outfit/centcom/ert/commander name = "ERT Commander" id = /obj/item/card/id/ert @@ -39,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) @@ -48,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 @@ -58,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 @@ -71,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) @@ -81,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 @@ -91,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 @@ -105,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) @@ -115,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 @@ -125,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 @@ -141,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) @@ -151,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 @@ -162,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 @@ -179,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 @@ -196,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 @@ -204,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 @@ -215,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 @@ -227,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) @@ -237,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 @@ -249,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 @@ -260,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 @@ -279,7 +285,7 @@ /obj/item/grenade/clusterbuster/cleaner=1, /obj/item/choice_beacon/janicart) -/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) @@ -289,7 +295,7 @@ 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" backpack_contents = list(/obj/item/storage/box/survival/engineer=1, /obj/item/storage/box/lights/mixed=1, @@ -298,7 +304,7 @@ /obj/item/reagent_containers/spray/chemsprayer/janitor=1, /obj/item/choice_beacon/janicart) -/datum/outfit/ert/kudzu +/datum/outfit/centcom/ert/kudzu name = "ERT Weed Whacker" id = /obj/item/card/id/ert/kudzu @@ -315,7 +321,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) @@ -325,7 +331,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 @@ -341,7 +347,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 @@ -357,7 +363,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 @@ -369,7 +375,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 @@ -378,7 +391,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 @@ -399,13 +418,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 @@ -418,7 +434,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 @@ -436,7 +452,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 @@ -461,7 +477,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 @@ -469,10 +485,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 @@ -482,7 +494,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,\ @@ -493,7 +505,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', From d261e0a3b4f92425c215654a0371411aa214ca77 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 1 Sep 2024 14:02:01 -0400 Subject: [PATCH 2/9] bounty hunters --- code/datums/ert.dm | 10 ++++++++ code/game/objects/items/cards_ids.dm | 10 ++++++++ code/modules/antagonists/ert/ert.dm | 12 ++++++++++ .../antagonists/fugitive/hunter_outfits.dm | 23 ++++++++++++++++++- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 8653d07997d96..adac6d4d1a5db 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -141,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 a743677e5141e..2016650ef7666 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/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index e2e170ec70a50..d9e8f23b62be3 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -213,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 b1f1fe323523f..c3afbc2e16423 100644 --- a/code/modules/antagonists/fugitive/hunter_outfits.dm +++ b/code/modules/antagonists/fugitive/hunter_outfits.dm @@ -61,7 +61,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() @@ -139,3 +138,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 +*/ From 7db07b72784ff1a8f9a5918eac585334ec31f8f0 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 1 Sep 2024 15:22:02 -0400 Subject: [PATCH 3/9] shutttles --- _maps/Prefab/Departments.dmm | 64 +- _maps/shuttles/ert/ert_bounty.dmm | 809 ++++++++++++++++++++ _maps/shuttles/hunter/hunter_bounty.dmm | 1 - code/datums/ert.dm | 5 + code/datums/helper_datums/teleport.dm | 59 ++ code/datums/shuttles.dm | 9 + code/game/objects/effects/landmarks.dm | 8 + code/modules/admin/verbs/one_click_antag.dm | 76 +- 8 files changed, 1006 insertions(+), 25 deletions(-) create mode 100644 _maps/shuttles/ert/ert_bounty.dmm diff --git a/_maps/Prefab/Departments.dmm b/_maps/Prefab/Departments.dmm index 701c9bcc3b5ff..5c340dec8ed28 100644 --- a/_maps/Prefab/Departments.dmm +++ b/_maps/Prefab/Departments.dmm @@ -40,6 +40,12 @@ /obj/machinery/status_display/evac, /turf/open/floor/iron, /area/space) +"aM" = ( +/obj/effect/turf_decal/tile/steelgrid/anticorner{ + dir = 4 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "aR" = ( /obj/machinery/door/airlock/atmos/glass{ req_access_txt = "24" @@ -50,6 +56,12 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/tech, /area/engine/atmos) +"aY" = ( +/obj/effect/turf_decal/tile/steelgrid{ + dir = 5 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "aZ" = ( /obj/structure/sign/poster/random, /turf/open/floor/iron/dark, @@ -602,6 +614,10 @@ "oa" = ( /turf/open/floor/carpet/green, /area/lawoffice) +"oh" = ( +/obj/effect/turf_decal/tile/steelgrid/anticorner, +/turf/open/floor/iron/tech/grid, +/area/space) "oq" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters"; @@ -992,6 +1008,12 @@ /obj/item/book/manual/hydroponics_pod_people, /turf/open/floor/grass/no_border, /area/hydroponics) +"xO" = ( +/obj/effect/turf_decal/tile/steelgrid{ + dir = 6 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "xS" = ( /obj/item/book/manual/wiki/sopengineering, /turf/open/floor/carpet/royalblue, @@ -1041,6 +1063,12 @@ /obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/space) +"zB" = ( +/obj/effect/turf_decal/tile/steelgrid/anticorner{ + dir = 1 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "zK" = ( /obj/machinery/vending/wardrobe/robo_wardrobe, /turf/open/floor/iron/white, @@ -1359,6 +1387,12 @@ /obj/item/toy/plush/moth/royal, /turf/open/floor/iron, /area/space) +"JH" = ( +/obj/effect/turf_decal/tile/steelgrid{ + dir = 10 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "JM" = ( /obj/effect/turf_decal/tile/purple/fourcorners/contrasted, /mob/living/simple_animal/pet/dog/pug{ @@ -1412,7 +1446,7 @@ /area/crew_quarters/heads/hor) "Kq" = ( /obj/item/toy/plush/moth/brown, -/turf/open/floor/iron, +/turf/open/floor/iron/tech/grid, /area/space) "Kr" = ( /obj/machinery/suit_storage_unit/hos, @@ -1884,6 +1918,12 @@ /obj/item/toy/plush/moth/deadhead, /turf/open/floor/iron/grid/steel, /area/space) +"Uo" = ( +/obj/effect/turf_decal/tile/steelgrid/anticorner{ + dir = 8 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "Up" = ( /mob/living/simple_animal/hostile/carp/lia, /mob/living/simple_animal/bot/secbot{ @@ -1914,6 +1954,12 @@ /obj/structure/closet/secure_closet/CMO, /turf/open/floor/iron/white, /area/crew_quarters/heads/cmo) +"UJ" = ( +/obj/effect/turf_decal/tile/steelgrid{ + dir = 9 + }, +/turf/open/floor/iron/tech/grid, +/area/space) "UQ" = ( /obj/machinery/suit_storage_unit/mining, /turf/open/floor/iron/sepia, @@ -2551,9 +2597,9 @@ tB XF XF XF -Qk -Qk -Qk +zB +UJ +Uo XF XF XF @@ -2571,9 +2617,9 @@ SQ XF uN XF -Qk +aY Kq -Qk +JH XF rs XF @@ -2591,9 +2637,9 @@ NH XF XF XF -Qk -Qk -Qk +aM +xO +oh XF XF XF diff --git a/_maps/shuttles/ert/ert_bounty.dmm b/_maps/shuttles/ert/ert_bounty.dmm new file mode 100644 index 0000000000000..85aecd20c0e0e --- /dev/null +++ b/_maps/shuttles/ert/ert_bounty.dmm @@ -0,0 +1,809 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"at" = ( +/obj/structure/sign/poster/contraband/bountyhunters, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/hunter) +"bn" = ( +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/office, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"bH" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/fugitive_capture, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"cp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"dW" = ( +/obj/structure/curtain/bounty, +/obj/effect/turf_decal/edges/techfloor_orange, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"ew" = ( +/obj/effect/turf_decal/edges/techfloor_orange, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"ga" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/purple/hidden, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"go" = ( +/obj/machinery/suit_storage_unit/standard_unit{ + storage_type = /obj/item/tank/internals/oxygen/yellow + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"gS" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"hh" = ( +/obj/effect/landmark/ert_shuttle_brief_spawn, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/fancy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"ig" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"ka" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/firstaid/o2{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/storage/firstaid/radbgone{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/storage/firstaid{ + pixel_x = -6; + pixel_y = -1 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/shuttle/hunter) +"lK" = ( +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/computer/fugitive_capture_computer{ + dir = 1 + }, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"lY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/plaque, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"mc" = ( +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"mE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 9 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"mP" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/hunter) +"ov" = ( +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/computer/launchpad, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"oA" = ( +/obj/machinery/power/smes, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"sF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"tK" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"ux" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/plasma_refiner, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"uF" = ( +/obj/structure/curtain/bounty, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"uS" = ( +/obj/structure/table, +/obj/item/phone, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"uX" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/shuttle/hunter) +"vX" = ( +/obj/effect/turf_decal/edges/techfloor_orange, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"wB" = ( +/obj/effect/turf_decal/stripes/asteroid/end{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/shuttle/hunter) +"xr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"xs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"xY" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 8 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"zn" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/hunter) +"zz" = ( +/obj/effect/turf_decal/stripes/asteroid/end, +/turf/open/floor/iron/dark/textured, +/area/shuttle/hunter) +"zR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"Az" = ( +/obj/machinery/shuttle/engine/plasma{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/hunter) +"CK" = ( +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/suit_storage_unit/standard_unit{ + storage_type = /obj/item/tank/internals/oxygen/yellow + }, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"Dk" = ( +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/launchpad, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"Do" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"EK" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"Fa" = ( +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8; + layer = 4.1 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"Gf" = ( +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall/mineral/plastitanium, +/area/shuttle/hunter) +"Gu" = ( +/obj/effect/spawner/structure/window/plastitanium, +/turf/open/floor/plating, +/area/shuttle/hunter) +"JU" = ( +/obj/machinery/computer/camera_advanced{ + dir = 8 + }, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"Kg" = ( +/obj/structure/rack, +/obj/item/grenade/plastic/c4{ + pixel_x = -1 + }, +/obj/item/grenade/plastic/c4{ + pixel_x = 11 + }, +/obj/item/grenade/plastic/c4{ + pixel_x = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"KY" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"LD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line, +/obj/machinery/suit_storage_unit/standard_unit{ + storage_type = /obj/item/tank/internals/oxygen/yellow + }, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"LG" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"Pf" = ( +/obj/structure/curtain/bounty, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"Qe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1 + }, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"Qh" = ( +/obj/effect/turf_decal/edges/techfloor_orange, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8; + layer = 4.1 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"QA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"RI" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/obj/item/binoculars, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/shuttle/hunter) +"SR" = ( +/turf/template_noop, +/area/template_noop) +"TI" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/shuttle/hunter) +"TO" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/shuttle/hunter) +"Ua" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"UC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"Xe" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/docking_port/stationary{ + dwidth = 11; + height = 16; + name = "Deep Space"; + shuttle_id = "pirate_home"; + width = 17 + }, +/obj/docking_port/mobile{ + dheight = 3; + dwidth = 3; + height = 13; + movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); + name = "hunter shuttle"; + rechargeTime = 1800; + shuttle_id = "huntership"; + width = 15 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/shuttle/hunter) +"Xn" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor6-old"; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"XA" = ( +/obj/effect/turf_decal/edges/techfloor_orange, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"Yn" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 4 + }, +/turf/open/floor/iron/techmaint, +/area/shuttle/hunter) +"YG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/dark_blue/line, +/turf/open/floor/pod/light, +/area/shuttle/hunter) +"YY" = ( +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 6 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"Zp" = ( +/obj/machinery/computer/shuttle_flight/hunter{ + dir = 8 + }, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"ZU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 10 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) + +(1,1,1) = {" +SR +SR +SR +mP +SR +SR +SR +SR +SR +mP +SR +SR +SR +"} +(2,1,1) = {" +SR +SR +SR +mP +SR +SR +SR +SR +SR +mP +SR +SR +SR +"} +(3,1,1) = {" +mP +SR +SR +mP +SR +Az +SR +Az +SR +mP +SR +SR +mP +"} +(4,1,1) = {" +mP +SR +Az +mP +mP +zn +Gu +zn +mP +mP +Az +SR +mP +"} +(5,1,1) = {" +mP +mP +zn +mP +ig +ka +Kg +RI +oA +mP +zn +mP +mP +"} +(6,1,1) = {" +mP +Gf +TI +ux +ga +UC +xr +sF +gS +KY +TI +Gf +mP +"} +(7,1,1) = {" +TO +zR +tK +LG +Yn +Yn +Do +Yn +Do +Xn +ak +xs +Xe +"} +(8,1,1) = {" +mP +mP +Gu +mP +wB +uX +uX +uX +zz +mP +Gu +mP +mP +"} +(9,1,1) = {" +SR +mP +Gu +mP +LD +mE +xY +ZU +go +mP +Gu +mP +SR +"} +(10,1,1) = {" +SR +SR +Gu +at +CK +bn +Ua +ew +go +mP +Gu +SR +SR +"} +(11,1,1) = {" +SR +SR +SR +mP +Dk +bn +uS +ew +bH +mP +SR +SR +SR +"} +(12,1,1) = {" +SR +SR +SR +mP +ov +mc +cp +XA +lK +mP +SR +SR +SR +"} +(13,1,1) = {" +SR +SR +SR +Gu +mP +uF +Pf +dW +mP +Gu +SR +SR +SR +"} +(14,1,1) = {" +SR +SR +SR +Gu +QA +Fa +lY +Qh +EK +Gu +SR +SR +SR +"} +(15,1,1) = {" +SR +SR +SR +Gu +YG +mc +hh +vX +Qe +Gu +SR +SR +SR +"} +(16,1,1) = {" +SR +SR +SR +mP +Gu +Zp +JU +YY +Gu +mP +SR +SR +SR +"} +(17,1,1) = {" +SR +SR +SR +SR +Gu +Gu +Gu +Gu +Gu +SR +SR +SR +SR +"} diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm index cbea0fa260013..4733915a612b2 100644 --- a/_maps/shuttles/hunter/hunter_bounty.dmm +++ b/_maps/shuttles/hunter/hunter_bounty.dmm @@ -370,7 +370,6 @@ /turf/open/floor/iron/tech, /area/shuttle/hunter) "nY" = ( -/obj/structure/lattice/catwalk/over, /obj/structure/cable/yellow{ icon_state = "1-2" }, diff --git a/code/datums/ert.dm b/code/datums/ert.dm index adac6d4d1a5db..082b243503b81 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -16,6 +16,10 @@ 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 + /// A custom map template to spawn the ERT at. If this is null or use_custom_shuttle is FALSE, the ERT will spawn at Centcom. + var/datum/map_template/ert_template + /// If we should actually _use_ the ert_template custom shuttle + var/use_custom_shuttle = TRUE /datum/ert/New() if (!polldesc) @@ -151,3 +155,4 @@ mission = "Assist the station in catching perps, dead or alive." polldesc = "a Centcom-hired bounty hunting gang" random_names = FALSE + ert_template = /datum/map_template/shuttle/ert/bounty diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 44c73d4263386..acd9f6a14beaf 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -157,6 +157,65 @@ // DING! You have passed the gauntlet, and are "probably" safe. return F +/// Checks if a given turf is a "safe" location +/proc/is_safe_turf(turf/random_location, extended_safety_checks = FALSE, dense_atoms = FALSE, no_teleport = FALSE) + . = FALSE + if(!isfloorturf(random_location)) + return + var/turf/open/floor/floor_turf = random_location + //var/area/destination_area = floor_turf.loc + + if(no_teleport) + return + + var/datum/gas_mixture/floor_gas_mixture = floor_turf.air + if(!floor_gas_mixture) + return + + var/list/gases_to_check = list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/plasma) + var/trace_gases + for(var/id in floor_gas_mixture.get_gases()) + if(id in gases_to_check) + continue + trace_gases = TRUE + break + + // Can most things breathe? + if(trace_gases) + return + if(!(floor_gas_mixture.get_gases(/datum/gas/oxygen) && floor_gas_mixture.get_gases(/datum/gas/oxygen) >= 16)) + return + if(floor_gas_mixture.get_gases(/datum/gas/plasma)) + return + if(floor_gas_mixture.get_gases(/datum/gas/carbon_dioxide) && floor_gas_mixture.get_gases(/datum/gas/carbon_dioxide) >= 10) + return + + // Aim for goldilocks temperatures and pressure + if((floor_gas_mixture.return_temperature() <= 270) || (floor_gas_mixture.return_temperature() >= 360)) + return + var/pressure = floor_gas_mixture.return_pressure() + if((pressure <= 20) || (pressure >= 550)) + return + + if(extended_safety_checks) + if(islava(floor_turf)) //chasms aren't /floor, and so are pre-filtered + var/turf/open/lava/lava_turf = floor_turf // Cyberboss: okay, this makes no sense and I don't understand the above comment, but I'm too lazy to check history to see what it's supposed to do right now + if(!lava_turf.is_safe()) + return + + // Check that we're not warping onto a table or window + if(!dense_atoms) + var/density_found = FALSE + for(var/atom/movable/found_movable in floor_turf) + if(found_movable.density) + density_found = TRUE + break + if(density_found) + return + + // DING! You have passed the gauntlet, and are "probably" safe. + return TRUE + /proc/get_teleport_turfs(turf/center, precision = 0) if(!precision) return list(center) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index dc6202d1d3531..3867517928fbc 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -240,6 +240,10 @@ port_id = "snowdin" can_be_bought = FALSE +/datum/map_template/shuttle/ert + port_id = "ert" + can_be_bought = FALSE + // Shuttles start here: /datum/map_template/shuttle/emergency/backup @@ -812,6 +816,11 @@ suffix = "excavation" name = "Snowdin Excavation Elevator" +// Custom ERT shuttles +/datum/map_template/shuttle/ert/bounty + suffix = "bounty" + name = "Bounty Hunter ERT Shuttle" + /datum/map_template/shuttle/tram port_id = "tram" can_be_bought = FALSE diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 6031d3bab396d..f8096a9ae8a19 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -403,6 +403,14 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.emergencyresponseteamspawn += loc return INITIALIZE_HINT_QDEL +/obj/effect/landmark/ert_shuttle_spawn + name = "ertshuttlespawn" + icon_state = "ert_spawn" + +/obj/effect/landmark/ert_shuttle_brief_spawn + name = "ertshuttlebriefspawn" + icon_state = "ert_brief_spawn" + //ninja energy nets teleport victims here /obj/effect/landmark/holding_facility name = "Holding Facility" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index cc9271a6d0b0f..7ce90882edd8d 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -261,6 +261,7 @@ .["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" + .["mainsettings"]["use_custom_shuttle"]["value"] = newtemplate.use_custom_shuttle ? "Yes" : "No" /datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag) @@ -328,11 +329,12 @@ "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")]") + "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"), + "use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"), ) ) - var/list/prefreturn = presentpreflikepicker(usr,"Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) + var/list/prefreturn = presentpreflikepicker(usr, "Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) if (isnull(prefreturn)) return FALSE @@ -350,36 +352,75 @@ ertemplate.teamsize = prefs["teamsize"]["value"] ertemplate.mission = prefs["mission"]["value"] ertemplate.polldesc = prefs["polldesc"]["value"] - ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 5 are effectively toggles + ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 6 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" + ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes" var/list/spawnpoints = GLOB.emergencyresponseteamspawn var/index = 0 + var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad") + var/teamSpawned = FALSE + + // This list will take priority over spawnpoints if not empty + var/list/spawn_turfs = list() + + // Takes precedence over spawnpoints[1] if not null + var/turf/brief_spawn + + if(!length(candidates)) + return FALSE + + if(ertemplate.use_custom_shuttle && ertemplate.ert_template) + to_chat(usr, "Attempting to spawn ERT custom shuttle, this may take a few seconds...") + var/datum/map_template/shuttle/ship = new ertemplate.ert_template + var/x = rand(TRANSITIONEDGE, world.maxx - TRANSITIONEDGE - ship.width) + var/y = rand(TRANSITIONEDGE, world.maxy - TRANSITIONEDGE - ship.height) + var/z = SSmapping.empty_space.z_value + var/turf/located_turf = locate(x, y, z) + if(!located_turf) + CRASH("ERT shuttle found no place to load in") + + if(!ship.load(located_turf)) + CRASH("Loading ERT shuttle failed!") + + var/list/shuttle_turfs = ship.get_affected_turfs(located_turf) + + for(var/turf/affected_turf as anything in shuttle_turfs) + for(var/obj/effect/landmark/ert_shuttle_spawn/spawner in affected_turf) + spawn_turfs += get_turf(spawner) + + if(!brief_spawn) + brief_spawn = locate(/obj/effect/landmark/ert_shuttle_brief_spawn) in affected_turf + + if(!length(spawn_turfs)) + stack_trace("ERT shuttle loaded but found no spawnpoints, placing the ERT at wherever inside the shuttle instead.") + + for(var/turf/open/floor/open_turf in shuttle_turfs) + if(!is_safe_turf(open_turf)) + continue + spawn_turfs += open_turf + + if(ertemplate.spawn_admin) if(isobserver(usr)) - var/mob/living/carbon/human/admin_officer = new (spawnpoints[1]) + var/mob/living/carbon/human/admin_officer = new (brief_spawn || 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) - return FALSE - //Pick the (un)lucky players - var/numagents = min(ertemplate.teamsize,candidates.len) + var/numagents = min(ertemplate.teamsize, length(candidates)) //Create team - var/datum/team/ert/ert_team = new ertemplate.team () + var/datum/team/ert/ert_team = new ertemplate.team() if(ertemplate.rename_team) ert_team.name = ertemplate.rename_team @@ -408,9 +449,14 @@ 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/turf/spawnloc + if(length(spawn_turfs)) + spawnloc = pick(spawn_turfs) + else + 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) From a84fe10103f9da84829b164d1a1e91d8e3a34a51 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 1 Sep 2024 15:31:43 -0400 Subject: [PATCH 4/9] oops --- _maps/shuttles/hunter/hunter_bounty.dmm | 1 + 1 file changed, 1 insertion(+) diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm index 4733915a612b2..cbea0fa260013 100644 --- a/_maps/shuttles/hunter/hunter_bounty.dmm +++ b/_maps/shuttles/hunter/hunter_bounty.dmm @@ -370,6 +370,7 @@ /turf/open/floor/iron/tech, /area/shuttle/hunter) "nY" = ( +/obj/structure/lattice/catwalk/over, /obj/structure/cable/yellow{ icon_state = "1-2" }, From fb2281a233b5dfb93aaf07ed457252020c187112 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 1 Sep 2024 16:57:02 -0400 Subject: [PATCH 5/9] shittership --- _maps/shuttles/ert/ert_bounty.dmm | 4 ++-- icons/effects/landmarks_static.dmi | Bin 22934 -> 22717 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/shuttles/ert/ert_bounty.dmm b/_maps/shuttles/ert/ert_bounty.dmm index 85aecd20c0e0e..ba58583b31c2b 100644 --- a/_maps/shuttles/ert/ert_bounty.dmm +++ b/_maps/shuttles/ert/ert_bounty.dmm @@ -470,7 +470,7 @@ dwidth = 11; height = 16; name = "Deep Space"; - shuttle_id = "pirate_home"; + id = "huntership_home"; width = 17 }, /obj/docking_port/mobile{ @@ -480,7 +480,7 @@ movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); name = "hunter shuttle"; rechargeTime = 1800; - shuttle_id = "huntership"; + id = "huntership"; width = 15 }, /obj/structure/fans/tiny, diff --git a/icons/effects/landmarks_static.dmi b/icons/effects/landmarks_static.dmi index f2404dd45fb15e303f9ec43a257f355fc6e37e8f..9f822cddc4442d37da7854db70403e33cad6c88a 100644 GIT binary patch literal 22717 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%0D>Fj>!I&C&urhQUag2KwWAlYP(v0hZW4f>>@~NW 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 literal 22934 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 From 7ec2a5887d1ed7d93ddc469da75caf0f377a7003 Mon Sep 17 00:00:00 2001 From: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:30:25 -0400 Subject: [PATCH 6/9] bad var --- _maps/shuttles/ert/ert_bounty.dmm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/_maps/shuttles/ert/ert_bounty.dmm b/_maps/shuttles/ert/ert_bounty.dmm index ba58583b31c2b..63c3e2b7ca08b 100644 --- a/_maps/shuttles/ert/ert_bounty.dmm +++ b/_maps/shuttles/ert/ert_bounty.dmm @@ -326,8 +326,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/railing{ - dir = 8; - layer = 4.1 + dir = 8 }, /turf/open/floor/iron/tech, /area/shuttle/hunter) @@ -410,8 +409,7 @@ /obj/effect/turf_decal/edges/techfloor_orange, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/railing{ - dir = 8; - layer = 4.1 + dir = 8 }, /turf/open/floor/iron/tech, /area/shuttle/hunter) From c25f1316883f8ca757cba46e19d9fc28635a5164 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 13 Oct 2024 15:19:31 -0400 Subject: [PATCH 7/9] Revert "shittership" This reverts commit fb2281a233b5dfb93aaf07ed457252020c187112. --- _maps/shuttles/ert/ert_bounty.dmm | 92 ++++++++++++++--------------- icons/effects/landmarks_static.dmi | Bin 22717 -> 22934 bytes 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/_maps/shuttles/ert/ert_bounty.dmm b/_maps/shuttles/ert/ert_bounty.dmm index 63c3e2b7ca08b..e8c312f48be18 100644 --- a/_maps/shuttles/ert/ert_bounty.dmm +++ b/_maps/shuttles/ert/ert_bounty.dmm @@ -244,6 +244,16 @@ }, /turf/open/floor/iron/techmaint, /area/shuttle/hunter) +"xS" = ( +/obj/effect/turf_decal/edges/techfloor_orange{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) "xY" = ( /obj/structure/chair/office{ dir = 4 @@ -282,6 +292,31 @@ }, /turf/open/floor/iron/techmaint, /area/shuttle/hunter) +"Ac" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/docking_port/stationary{ + dwidth = 11; + height = 16; + name = "Deep Space"; + shuttle_id = "pirate_home"; + width = 17 + }, +/obj/docking_port/mobile{ + dheight = 3; + dwidth = 3; + height = 13; + movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); + name = "hunter shuttle"; + rechargeTime = 1800; + shuttle_id = "huntership"; + width = 15 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/shuttle/hunter) "Az" = ( /obj/machinery/shuttle/engine/plasma{ dir = 4 @@ -320,16 +355,6 @@ }, /turf/open/floor/pod/light, /area/shuttle/hunter) -"Fa" = ( -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) "Gf" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall/mineral/plastitanium, @@ -338,6 +363,14 @@ /obj/effect/spawner/structure/window/plastitanium, /turf/open/floor/plating, /area/shuttle/hunter) +"JT" = ( +/obj/effect/turf_decal/edges/techfloor_orange, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) "JU" = ( /obj/machinery/computer/camera_advanced{ dir = 8 @@ -405,14 +438,6 @@ }, /turf/open/floor/pod/light, /area/shuttle/hunter) -"Qh" = ( -/obj/effect/turf_decal/edges/techfloor_orange, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) "QA" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/railing/corner{ @@ -460,31 +485,6 @@ /obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/iron/techmaint, /area/shuttle/hunter) -"Xe" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/docking_port/stationary{ - dwidth = 11; - height = 16; - name = "Deep Space"; - id = "huntership_home"; - width = 17 - }, -/obj/docking_port/mobile{ - dheight = 3; - dwidth = 3; - height = 13; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "hunter shuttle"; - rechargeTime = 1800; - id = "huntership"; - width = 15 - }, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, -/area/shuttle/hunter) "Xn" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 @@ -653,7 +653,7 @@ Do Xn ak xs -Xe +Ac "} (8,1,1) = {" mP @@ -751,9 +751,9 @@ SR SR Gu QA -Fa +xS lY -Qh +JT EK Gu SR diff --git a/icons/effects/landmarks_static.dmi b/icons/effects/landmarks_static.dmi index 9f822cddc4442d37da7854db70403e33cad6c88a..f2404dd45fb15e303f9ec43a257f355fc6e37e8f 100644 GIT binary patch literal 22934 zcmYgWWmKC@unul5?(WdyQrx9D6n81^?ruekTX8E;++BjZySqEVA;8Ud&$;K^A8)d= zn>V{VJ3I2sME+2e`ixA73;+N=%ScP8002lFdU8wz&~KI+T1a9`JNgA-6nMef$$z8;7*;);Ebj6eBpT~#vdgobwS^@`wrd@`S+jmMKO ztGr)rXsN783ZtiBQk=9h*4HwWs~9_B-Of2S(e@5+$usd*F|kY!0FVP@Bt+Fbv(B@< zeAN~f2B7?o z$nB@l>pyRW6Slxx`bA;ypxTUnS=6c+dhu0QVrg!CJxr^{U<1^ibjSx9xG*h!1$WAD zL=ziOH#63Ms+%8)LnX24|JLe&=-^2$wqzL4N&f+KIhvF!?)5?m=^>>_iF*j$G zYS-(cNrlX5#<2$|tgffvYdxId$EOxK>qTEWp}}mF81Cd;imX8uk;HHooEW!@h?hBR zf?kjq&gNW7U`a$eL!QT?P@i2FL9I@ZD@jW~fj7=$Esv*8T#sc&nd<$8l9DFbQX}Si zJHZ`In-saZY4H9$6<~mF09gh6mSAaH|fx|u$8fmO?h?wj=b;w znY}OqKUCr`N{(qAeRXt-$Jyjxlvwu?!}pwK`Q%viKcqs}WmIva(hpIi*u~W`DAeaV z2;AD_9pcYqGNKDV?_=dg_gpk@F~9Go0c-s( zudeX6{9o;IL4=>+Ya1GpW$p*&m*kkT6vIEhb&UtYWh0~d zb()_XbI~=##A6;keBII=n3Y^nQ_C?qDX=94KP$D|NZEK@jWR40H{>@osIlUI`dd^~ zn7N#6S@pb3ORY-9kxH8m6Z6^G_ds>^o?z%pm9v42qInaVUA) z;yk>jX1OdFwkDJsePmTuk*iijUJNo`edPES__m)aY0|rs$;rJ87|yF8QTt{0 zI#}d9X(HL`);)5K$abWpzQ?8-+19|9H9BjV%34`~3h6~jkNDf#)=j(QDNe~g!O*zwB} zMfoXMiMwrh>8$a8NpJofnCP`;X?OLv?NT6c?V#C5<`QMd$TKa>r#Ii7@De$E)#@Jw zaa!n8hdi^*&etmA>Y639b`@*uGJI@o2`#PVJRdtdySux)9~v5mb9Ec{d%2M)cxEt( z$F6Q}P}g@@K)CJeoj##GZv0OW!Dran+3EM!vu@vXY=wGm6Cl14kDwv56UW1r);Hlm zVoPwnzhi&aJsX*vbZ-ZTK>JXUTOH?*@%1ezzK$hKZ6bMn)0%h`}H z7O)en3lMm@W&vy=$6-1-ITiG<5){@NI5FkS&SL)lz6Uqbm(LwQH<=}X8(6+5{MpmM ze<4(YZb`C`dl>Hr)`}KXSZ`vxD6nzHzSqO32k>NNGsexJ=%#GH2TK&e05Tq0GcYhfEx%4OyYgjU{Pzujytx9|%;|dF6ETlt;K5j$Zo3Xm6P18K7NqU6-3?WR zZD=|>$l|B*etc}HqM{NJ5m7_(<;xcdDJdVdcM5$3JsgVrfuU3wJV|N&n}nS*#8M`q zrrCCSF$0hGu2AH!T2xg|lA*S{dx(Zn(-qqF%gqjCfD*-QN=C-t2$#Sq_fW_cKAryp zc(_;_f{d#jY&BRVwKyNh0&;vVd1q&5|6A#ux1i6~ilmMX;gsMbF@Qm{%5<(+p$s{Y zbDjD5)%R{js()YrgOqdokWCT?a@htsPVGNXi!zN1N#a8uP zCTp>BJ9`ZtkbUfOaVY;1a@nm?S83G-m*jXO144Sb3nZfVvSEs6oV|@;r;C!WJl66GPO4_WgwzY@NAHk?hVDQJ(*F{(0u8Gas)p) z?e6Z{-VSs~LY8gGihq20*>v;t{Je8?6h2^F`^IwX;o)Jzim!*8kC9C$g-Nj$8OMY` z6%p^yFEtoJxleVIz?O)pZxrH^!^o$xGos4-Mp0`qMGBCWle-Ap5+#gfVPa}TIg;}a zOispbuV;DQ+uO7IprfTV<|K@ajxH=N4r^)Q`Td%$eug6O(3#%xemnGvhm62-pX66S#RqJ7MABXV=zjmY@^+zJ2@Fn%p&a!1J9A8IN_CG;~zI z4vS9FakoEGbm@RuT30u-5(N_--KhPe2Z4+yrUdsx`bV^3*z7;X=9ke~L%Px%y5u4t z>d@S|PDq9ycX!NC=b^gLoMbd^Bnb&gx5$}P*xu2@gZrI#r#?7;yAJS~cNK2-qXcC* zYq?^T(VLFfQE1hy2q8~|OTN4{IXuNUVum>#n3oqgJ}y6>A$b*%|GmB94qMAk%zC20 z0|EI)x$*wC^J)uL#MYKE9F?@VLoEY^R;d+md~!lTPmdTq0Nt&w84&j?y3Wed5@7W4 z{#JHfVm6Lv_Fh)@HS|bP@RDdhNM${Q7 zk)-sOa05Y=prp0+SKPDX#R@dq>w^>=l`c*~Xc(B2%S&1wo<9&LOE-%~E;XVpkDQN> zf5x&=O;Z!i@Vh2E`}&V|LYE=E;ht&n3+87eukf9))rCL&T$o`*)|w`le`J5C`mPGACD7N%fM1nHdelh!xJAM8w40BYkXmY<>O| z5$oIadfBdi)U0$bHS`5t1{G*ax>NxQnn_ph46*+&%W-t9YtI6nIZ6`z_K2Km9f zpHInG{hH}`^uZVsxmz8X2-AFo5rE&_v9e;0z{p4vU1>#ysk|)m3>#Z$SZGV~djvFR zVs4xcmR9&k52C*i)qk77c=P>!jRi^#pcW=;q^`AZ%p`=W*GL< z`K$6w0zPdC2vm{YG?i3>ujTn{w(hd@T?C}4k@PX$(l$k?M2^Tin&O|HJcXX0R6oJPICCRzA82#feR#OK8nNO(?e8f?#>Gi_ z+T~lniyRRVrSsSm1F&f20pt+>6XK0%RA}|woy@hqoR;%?fvAtl%6PVxkG%=P+fNdc zcBK8q3?k#@6vLimL-m~4iAR)%i7=c8MjTrxyvd@cDSzSJQ8pVl0iLN4+I{A-dta~o zB$Smg0A^-KJTC)jclY=Cb0^a;aFEaAv$MVE;KJk-8Jj!E8G_z@$ebRF`8!X;zCM3E zojd%}t~Y1<*$bP>tUnrxgyngdZeg1{6h}4%u_aG?^+25YU5LKJ*@fu1cOlS^b|FS= zQ5ZVKRC3F|Q=_jkGBW)`Lq39RZV(|B(^Nv!7ZltlP4+h#uPm{$wcS5osfSoPmxpt0 zLLwrs#|;mJffZoDM+8_L-f^gJg?n@Q(vzqB>hncxcs)x;{>F{t!zj_}ZDfA+$ahN{ z2FvLhaE)iey384!GIMhKcshD6eb*hx9dOzCXt3tCB6Bmzzo@Kfc*e1oR;XG~$YeQ{ zBiN+OYDi8Yq@0z^hY|mM`}FM0&LR+0Hz&mOk!AH|x8*P5BtemvqsgwT`^U#^ALX^H zqy)`64tC=bmb2lHd3~i}eNkl}K?)Bz$&33?J&7Dm)JUS?FAgjo45J>^K-BoJ@2O0> zPY=z&3COptJN|Q5wX(Xpq`Eo|gm2An0Tk$<4Z-;$VI}>S+xev>6Hda?>gr~Fl;5i9gnY@^321kSd0X4O^`;#>=4?M1P&ekx&)BbGt8boCb)$)tca${(K4W zy{6$%xj4$0kd8SbBlA5`_7>uxY)>m@Nu75TR4~L(*pQjSV<2eDD#k0vGO#?p_hz#j z{1mI(`Fm|`4X)FG1$uZ1((*G8?OX=Khlt9{$6yb8LvUBVy0RkU;!>ZtbT)8(eJ$!#R#v9wJiM@enRg^SHI=+uWjRP;zZ%h#*JXFUD8vK5 zLj-)8{J|1$18^-py+NR+gXms*pf1kC=>bZ=$JVQaR{S?{Vk}Z|H7!I1yX-6*yZt0E zR9^mWGUn;tW%$x$+f@;MIiaedhO2|<>oiF{{b#pawwHOugz5`V;C5x-1gj^#0 zLp&TP9S{)~|A%!kTEGo`J{jCVS4&V6qESn9d)V>cKB zxBFe&rwU5LM^r6-1UpC`ca;d_w*T!X`$$@E<@k>JsIa$HZ=v*`l9QzrPZw~uyni zPl)Qj&H5+()t-FUKZqzMm2Z;?>CLed_=!bfaq=&Njb&!$?P|yYhYXP8f5rDe?Bn6u@j(xOX74*vuTfO z?2zAfN&Lc2;wLpmA4e*;Ip*W1aRU+ZANM2W4NV>@><&Z#n%kzC)lHd$=z1A#M~2@o zTz+=j^1jT@so!tDg{-{>3qGEv^?v?|WDLEie)T3gRfsUxlJ zSgr+{;c^uX!p2TXK*x%_@nuK?Hj;iHII@93>pv1TYDAH_f+lt1$WGY(y-V3+2GzEq z!~k!vCne*B)NopASq4=J4}}=3upgza84-pA@7>(hpZoHnju*U8u8C5INHEnL#X%QG z^G!l0^i{qQLjap>?x*ux{X*?!`7jVyi%)D`0A7QVn7M;Js~l_~ikk~jQ|=Hvsp5(L zNwb|jS{WZ5PfD~FDb9p%k*C~=QX*IE(s$~+NAi>a8k**>yZEh@*9UqugXAqX7Sfw` z({Ek+pY3l+8G?#~)wweJC!$9Tze(|FSR@8)=z%oN+UmkX zEFAZnjjb-|G}+dJ-tZiUuNNI{HufL!M^mSyclVHh_i)wUF^Oq3qCer1@y1f-kjMsw zl&>>?=opm_yGj)I4GZIn_rmz|+lLE$dd^Yb*F4<&#>?XQ^hpmh&!&!f@9-2Jy+_M| znw>K7Hs+|Pa7O^+1@U*|ck~^|NYzN&cv8ow=+8u45fI4XNue$FI8)fnV?%GZpl?N= zI}Jh&ILx|1ytmydL_cll!%O5-VZ$V!JxWlLF@;H;>$pPrn0XJF*YOQ{N%AGU7JNw1-@nvr29oTIxF~*p zet?eb4}x;%!)S*C|1w!k`OGeD-=cTEu7N%I7i%n+t0&>hj|;BL^+%;k;4`0no10)R z5G;t#9jkd75XdDs%@i)7>O%nxs1xAe4NJ@eAZoO54A2!r4 zc>Yq$%8b$AzwO|H%6;pX6whLp#swGx6;PnrL+`pFv>nLq=pYWBC&iD0DiWwnhT_Kf} zv1J`z8fCPHeBoiPjB{xl$Q_PwwAVQmHkCVGBnA!j2T205NufhT3sYkIlhqb0We*o| zMzHZv((Q%9GP8;M{6_5IL17py>J-hs5WCNEXt~5(WXW3#6J!eWLc3#5u7peF&>nIr zvi&z3(L3s=t_U!TU0lFp8uij^-wzg?PMeG8xR zda`73_t+`Vf7tOC3`0+n0#pK)hMfj_b{6oFh^opD+|R_}&bOf>V{yC|7Y%XC;h)2{=wkLJyq6C870UzhM{-8b!z1^2oC-{7h zI6GRf$4FyO(ch zqsHEzr^sLrZNQwqZe^LtwL7kluECOH`%dOveC1GNl|2HXMnQD#X{ay`wnCdCu&^!g zCs3o5cjSGa_Qss{U!5!>pyJ?$QDrd*f4$<*z~7n4F#zg?{us5VW@N}}Yo~8$4+g;? z{P6+(Wy;}h`DhL}^w}Drus?4QeT-d#Tggs|AmWd?@}moX4S2OkYZZ#(4=SxlX3!`yr_$~~hlh5hC^%(}uiOIX-FEJtR zMYWndpQ>@Q;I7LotY{1l_AN_r9Qrfq#GG}`_QUxgkhD%Owzv8aXdGEMiV`{domLP*$y2G*KCX`-;tcUXX~h7~9##*w@^IF0Pn z1b36=@hNgxAi%)0Gg%Xb3!RTDQ~1KGfdy!ISpLyp; zOK7p?x${FZoYAT0q|cw?4aE38*1KPv&(e1%XJVs&)0D~JZ_)Av%;gmY6Ww;ED#D0pR61t9tkF@~)4o)yCj_UanSPJO^~js^ zFR&lvkUmvyZ7URAZ*zQ;3G`)kkwuP=^GWZMZ12s{%EPA-^DdrES?!`aVdU6wZL3Yo;BO3lB* zG_X#rilMpdA2O0mT3B-GF<7gC|L|0NCFsI49Z%_~p$9A?{5=u&I)*ow;AEvlywtv4 zQ63K2eX@ZW71pOURglMlaz-PC&D$wg`Lt(T`Yuc8UQ((5qNmr}?^N6225wQNf2cX9zSJCyM>7`JfdmI*h@^CSeSa@bL4fEZj#LwYEo&@_J+G;@pn&(h z4Xc5&DtptVdJ~Wmu^>v|;Qa7pNg{~o6v5W0+E+xw!@;jB7nhPMq{Z&g4;CK5u~=3o z^zaJdwT`wp(We3%6M@Bs6H%NXQHoV!E#^1R3sj?9a5)&j#>VyxAmX-{D4DzI$5Qg7 z5xNBN_m0pnGmFlACX%U8)FQtnXVcxNhgm^t*+XyO@8a3$wlZoW+Sk}e$|4?ta_p~a z!ULCyj0hX!F@CtFqqEbd|M`QjqodPeJK(It2t^$i-AJ;K@>xDYDX*=r2UqIzjkaf> z(yxNVdS5-qs9)S*H2}}7KnjEtSu=)1H*MsT$JK>Gw!FFD6l$YY)tnb`hjaz53zxwk z9kF0thfFEe5Mea1l@V5EcOK%`uY4E1A8&zQ&Z=9BD>NVOO)tKZp9P@Zo4s8aIV^6W zKA1xZydd-bDiTpDC0rpw7Jq?i?IXj&N+KiVGrB!JJ^e2~0LklgeEC2ZKaFFRNRx{# zY(N=kRAFa}{LcNH&AUCKZ%m|j64r^pTN0F`(mV!)`Lz{?dD-CKvF#y|(@Qo?V=v{8 z8Kp7(f3*P37JXalHE}*Zu4;c?k&cu77fgEZz~61RA5(D3lrj<}B_Qt2x$=3GW0m?? z>!T1&%{}($+3MXyfle<>%};{om0QZv%FFG!IHCH;DW$6Wv4DMtH|;fAwFBXow%2y+ zjSpg8BA}*F@~cly;{ZD`C=8Lsa0{v_HPPfL;VCF6RY^)J{9-ko!$R%Eofl;2<)v5n zLwiSdJ|FBw3e`SRHn}Tc*$K4yP$sort^fdjU6EOux z!gY_)a)S)dB1I>|f&~#-&a5#QV`|%3HE0RS(>5{jm`=WVZUf zo}1_UZx#ZI{I*EEEW*dGPRt&L=RbDB6)f=miT+E(_#~9m2u(f(I4vcQ;u%z5yKB5t zeY&!>^bm%;f!5X~1ah33EsScxZhq=KR826%Vf;m$w)8{LAKdZ-qK8Ustf3-=9Q!YQ z+ln>572YnvJ^D%|kzsB2IoP9&E=ftdnE5+b8orZlQ8Bm;a*ir4t-1|$$wWj(j>JK7 zG3DjakX#G|djuvN5DyIeT8rip#`_i-ppdTg+VKo%n97_27LOmb(xWj&8JZm55nlRK z2{H(j` zR<=pBuA1{pGnF5L8g&-YbRA(q9vAbu*{t=8cWl4C)Ten+`OS zJ#NA6Z(BS!5GQ8j>iAfMiw}Yw|8DaAzN6a0BvN<%+jRnuRo!32QY7udMK0~v8yZdh z{*E;zePL_S_xo?!+``(~aMzh@!Jq(_%m9A{g$-^M->MC@WCA=qP0H72{Fp)I8-ia` zJI;8FHpXR7RZYs+U1km{JPn!$w6t95N7{u(b;Xr1cHpV9L z982%_#^(lC?TAmulwwCaiz2(%F7^I5vP!AGp5M1gfGo=6593>c?>yw6>kX4rrz9DH z62hYaY}+a*(zv;Cg@Yl=>|!6yLcwPhM=ZKJY=ky!-(!w8iaGQI+0@ng(4-@6ymJ!Y zYfr~WKJNK(H_6`urkI4c%|9DuC)|`FoMif(l?t&6FU_uPs|z*uj8HSJUp-h(4(tOz z-d`i56e;_GW_8Tt<2`AV$mG3+GYN9FU_kc$J=p3Uyj}%=^>jZnvR)UEytQ!69NB-6 zW@x`u21!;H{rwx7M5ly2SE7VRr<5ZfB0ebm{$#QMdpw;9#A2Bu{u95tx;Y})3=Y%; zO0>A)?#>0g^Y6R_-Fqa*MpNyeWsYRCA+dit-Cr=wjpg!$R!(a#$RDyZqAGVWRI_^feGw2Y|27Ei5&B&N#|K}LXS5upSlr6nwA zOcrkFbqhP9;9u5AzA`cB+kvlk^e#FStmyTE%HkGc3nXs9*k6a>TVtd1Hf1NS$(7nk znJBpTdJt6p_H2X&RvNwqPMf2jZHG*azuTd1H1vd5QAa{V{1Qi z#a-Sb4=?<8v*A`!=P|t)R#^E!)L|zRns*{hOwbZ7E#?dhQ;3tjIgUw`O4ujEvn#at zt8~Olte+%-QHIbSv)~udYdAuU5QDaW;Fqj-kgbTSI)kqIZ@qsiAJ zbGN?B1$?0Re~PG}k7DLNv~>b-61IYa>7&-ppEf`+t0x<%QCz+sl#{{)q@d_g(@;Ej zlp5umXE>vX13Z1jxrv%8F~Rr#`UA$-9d%;%)M*loXvH(7AHc}u;;*=qx;I< zhUFVZGnR|_GvlI#7>KA{<-qpWIM8vdo0)ER>&bUl%t=h_JF*R(NT*lL-c2ieOt%O+ww= zR$sm1h29sCSBRHqhj5`Z{BoJL{w5){wdC~#5FaT z1$8*Zff4E!u?zT+#K@~ABQ{9xuvyy1Gsnt>6p}3CzCtQ%(mvx-q|LcG$t z{wVy2#|_!Z&zPMJKN7s1)2(LUeOU2ucoyBorufnK6t5-`z;TqJLo4)leo3}f>v`@` zJU+VlmOIsT1Dq>ecgw~A2HpgiO>m#J`;tiA$esz4>mP zYEZ8>?&HJW#Vo9Gqby?odBjRq>iqlg`YA3j59&hT8Z9hu?j$tqrQUglL~0P0Sio)X z{zg@WF0OBO{j)j8pEi7MH%28P+`iUZCM-kmlcY0Eme!k`>+A3utzzRGsKZhtUg%vs z@-of$pW7p^coL%M)3}p8!idoI5FD+yz6$n&w$yPQ~{*c*6xX?a+vyvB8*F`ww?Qp^uwk7%yhv^Cxp{3{CEhLY# zIP`5id0ka*W8kmTHkacu*E8=60FxMI9FqMy|S`;zP=r;k^ zyG8dOVFBmhhp-bM63ghQ=21Fl7Dj01CXf^13ey6j* zz(-afqXku#U+xrkjtyr4b8#4QCbsI2hRUhLF%j&Zme#e~36DE>qe>pKnAWUg(xm$z zZEE+$11J!C@w(;Q!D*oYx4TExwelL`1%z3?V49KogPE{b%;hWn_rpww)ocXx@Yj?n z9RGu~>wvI`tJ0^I$&dANNAYEC%o-uIfP^x5s*mr>e6a2?l0m=-BYkDjJqa}`A_>%x?fSkl~K>O{J+&lHJFQGTT;@NSK z58L(LH#d)9s32NQqT{{`WB8@?;gsKMxbhDImO9L6cHLjR1_aA!YpsANT}J|?Uc ziW*73D49A?ayGBL)<`Aw@ikJZPb2NQQi#!?g2LnR_097F5He3zWKb0x0p5D zg%5WEPPw&IMCWh6E9ROe|C~WbKPIMdC}fNQ&EpF{p=q`-!!M4G3uStmNA^ZIWJ7Rm zI5zYCFipj7DoBGcpLuZdp>B{8dcE|X;cv-0y^zR}CbCi}hTX|tKhRb}OAAlYoE|#AcPzy|-=^`-QR8`I z91M-Hu<>(dZY}z+s(p$fEaSItKsi=?(y}CeX=jEABr3^VBeE`hiCV^z5P_=uJ#RY1DCi_ig0Ec%2@$>KkEEDe5A_gS z;oO6Xl>?0Em?{vA`}qDsBQ{u^nE5)^D%~Z~sr9+>cZ*NF-a9OycM%*slE&nAGLqt( zDm7*E@oV0J|6Jv{GG3~7yr>9GX>`=PLBQt*3YAPt{$e? zq2kY4a7dKyGxI%Q!?mHq1{Pr3LauWqF z8$1Osy){$}{e7PvdOi(h_x@O_3P_u@dE?fl9eqa`x>5mVqyuzkBHv~EWpD}b0Q0Kv z{T@snp`mH9){qDWBOL0vEz}#*_f@u@=ycKlBgGDwP*?&D8hWhh2p4EY4b&xpKp&(Q z3RBRZzSg&wdoVRNxiXLF;|q2(%}&2w?-qv66MDm2sd>IuZkiiC2xddm>j*1Qn)X7h z;FmYx$L;|`Jvo+nZgSHkl7cqH8S7nhAkC__7kUL50f zMRfk=A9lyR-<19A_*i?bvxubBA>0DI8r6t?dk1G{9Pj zv72TPAzE+$2|t7uaA!vi1p)IB*J8Yn*0+6gMF~T#>@ZuWrsX`7>!k#fYrVDT>E?7E zF5hmNH7mUT)TzQz|4#2F3fP#)8aLhCxJAxA`iS;;>=2V5x7vIl`rd3a@{)udySFijcp>k!dOhWBA%1e^bA?MpyntT0|?;|M)2lbvH6J`^ZhOl#HVnq7jP{C5RXV?}wPN;#*o<8$&An-7P{yb*4*vcf<4Bs`$73&7JtHEe-+AFuOWbyHsmZoEn$^h3vc z?_+R=P1PSEf683kX2+(wNP0h>p!c9G2m9jE`jEC*AxiPQKGTA-uJqMn)Jbl4qf!T& z{Hffg!$Bma^~b&|R@MOdhx{AqtiD3nD57?|+=CC@%zg@qVJgHZ@!OX(4={S(r5+q0 zCI-vvx(7iU=r4#S^h6#LGmGu^EaW@RsFQ}8 z;usC;6Gs!=SD~icv3J6q#2J1Uf?1ATsFUkEbSLC$Mq95V@WttMEuzycL)+HVX0xd_ zP!Knvf~0T&O{tTAWs=S(LHGau(U0OWn_euG^J;3GfA0KU**$3ZCcFQiK+&Cfa5y|D z_PLP)Ubo4x;gKPH5Gx(S9NFT4Ed1#HyG?&Kf!G?JPMnXIXu;bUyy zxH0l(X4aR(7g>^DUNks^g`temOcF6!7aPeV{C`I)<+slC`|%46Y+;Y4p0Vtyz4w$8 zpp!|_2{lizQnP=f{X-`Q^ZYcYWcT5NGB6&{3Ir5!WHUx+DUM=XlI!ohM%3X7Dajm*b+gV%hZuf+^TM$6X?;shxmEF?7m^ix?hb7SS zbvMfK{j4IRcV`Y7T8GgRW}UZm`|CQ~z{*2;CC1wfLb%GpqJ)JMH%T__SBBG*%j1%! z;>e9>1?*h=g8Itb_&`MKvQxA;u9%P99QC;_bXjMM@Y@5FQ4Q0uIDLCQ zm#!AXYdVwN%7u7Q@}#+nrqYy2LnTyO{JLK84*G6r2^5jl9FY1;l~DMUHC3oOtXvc; zG)&knO+G2y1hZL&|ldy0#TRWvlrJyM+@ zCG>|m0#?x_xcjM77A|g~Iv$tkO>!IK(~uH8+p5V$Ob~j(E+e$LpM;v1rVpBOK?9at zNNr@si$+`fMCd8y@kLlwDl=h>pjIe)o6c*`{#52KI>5hwm)pZf2ghQ4lWeTus;rt5 zuHHh}%ws*F0HNlOb7jD{egt?}Y5Qkbi7@KRWVm988esb}!l|K-m9JDo5~IG*|Cd_T zy-ehb7(YRc&xl;wr?QS5PceQHB$IBo8H-Bt>_OE|H5e!6Fcbpbh-io!C^6dlJl0?} zeg&%Jm{P@EwI9J}mGJqH^Qo%%6Tj^WIwYl`q=c^2kkd|Y_?ir=Sg?lFyGoQVs3fJL z4xw}wxkts)<&e9M;r1K8S#KLFd?ry6fQs(4w;hF_^Y7+la@pa(@^5(^(o|4{$?F29 zJjJtxo{0Y|FQ>Iy*J@C(JBA72)o~5Wb270yt!sjZF+Mrwtgo-@n2hK0;GT6Rk;MQZ zRw__FzF)HCyp(bh;wJE*2CiLhY+EJDE;j~JietK9LG)o^p;h<0s=C6DP|n_^xmmkc zV67}60RulxI+RL@874vEpS5-E%%D*w^7h5JVb`@DqpM>FbUkd``#XfdmB)3S?F-)` z@)*y~L!Mn4FF~?SUNt8sGArxQBYI-)pk5~|OIw?xHk&FaavB;qNb(Dkd>YXaUOQql z8HD87kj~GGYb!T!m*i|yKE7O98{Kq#W7O?X#w5z?Tg5!}+(k-d+8o~XvZ23Jv5#fl z$ObWl=P8IxrIx%mMdz9JU;2lVTUm>R)CNUySRf%q7njziI7N;~{0hY)#178gR+3Xi zfK`NtKH-jzz*T;#wsQc+HVFM7gAo#8KD3Ketv*@{c%c7}M_oQ+-v2#1nG$rBEKRnE-&4+l2 zjZ;Q3A09^SCE%t5E&$&+6Sjxw`Z#gw2vc@5{G=0y3;m^aUf()&pj$dBH3r|wSD>?o z$5e+`oL_Q5w%kQ)oYDB#P*NyA2Lh-UM4jKC|4f)OUO;gkhn$>Umb{Gf%6E1mvehC& zF?e;FGGxD}4N+C1&BypL48v8_^HE-w?AHs>8a5@z3BS26LutCPm2!axb&|qI z^&xQytme>27+AKIc@TD$VCbx#N#j$!9nWW%Z`Vm8{P}ja!_ox?<=2WQc&ZfMV$U(d zZ@AC|J(62|+JDfJQtZl!XqSIJ*$F2jU2MADPg0s)UqA0Rq({}d81QDEq|HGEv6AjC z&AQFlWW9y8G_hZ=YvAE_AkhHKN3i8*{am((P_)Wnp6jauRs@Ramu_25KJ#km;P|O>^ zF)=}x&bkxS8xR6dOFmXm9mBfwHk!% zo|8s#R15;?dF;ZLbN35DFGgNRZs2J97R$FLR(HJ^4QovQXRXP_C_Ec;qM>21ls z$}PB^(o4m@r+A4hp<^7pwprExcVEBSH-}1e6Jt7ixEO8gfWhX|@u(RCS6GXw3PwNh zV%j!bzuhGeQ+SzpG&auKat0TXK@YjeW(M*;C}v>g@nWogEty++_UrBCB3fI`LFzrl z5$M2c*nN&;+3z+)ZMj~CH@S%$-TtjRWeD3J8v0RziUv&C+#I>1mgC-M#*@~s6?71U zT^Ie&c#T%2|IT5X)oB3eJfa_UShr>6?66AM~>sJ?2I42&S<#}oweEMI2AHHBh zcn1KV8Akmgu2JdJ~Kyrq=fKx(g?A3@F0)+>>5>vjM6 zcHNH^7D%_|Tc(c$#cL7~|8cHYH1zvAf!N*c+H%RlCepYV2T?;(_mw=Cv0(pTEP|1_ zFX!qudIov6 zQ1pd6SG~J%1H%V+b1x_c=W2$VfZSAXWZTxKM=F=Qd&dsRfSBX>N zKPL}_@e!M85+c#&jjco9m1fy89r~sm3P)`HXJS7Rwa}yo)2s6RU+05C2NuDknTRsG zSTNWd8QIx_!&1@@{;87m{A*u@wz>xRI5tyck9`HRSJwFd2H+!**)|gq)a&BhgeV$i zAx4q>UdIf|U%KU;WPnu!LzUQ2f8-p)NWo8zP-In=ru?2PsdWDmCt;aQ@5Y3Xmvz9b zz(}&}B+6~aB@J!b={}p$h0WsnL(}fBY|CcBOhun<4vb5l2fXENPc<}{QV|2cB@Wil z^Wx9+a=%x7G3Zs$qD8<2`9l{B7rCb@-0pv{@M^Gjdl}H!%u-nB{8j(+GzZBGUpM%f zSmFkiGvl-QP&UQ+*wqvGh#_^JXZ+fw{Q*e1;#-yCe^=mi_H5Hg^a8npGh4Z$Q>Moa zmpwGmvA!D1f%2nMu{(Ugz?{nKs3n*4UNbRGqa3QvuFC4;{(VcND+HC z$->7G0?PAb7E?r{+a{X#<8AMzb*~L{n0mJTOJe|E>&;Ws_7BeFtRv-;7Wi%YzT*&z zNrqsouBva7q2~p3HfhX^reA8k0UpaZy zAqTG5_m~%IHC_x1b_YEl0S#JyuFS2iW@KVADCWYDQ*fb1+9N5Yzk6vyB=%yyz zT!(LLl%Ko_C}8GltDq_9pb?6Ib-DtSJFue7P>a*2`APUd6#nu|6ci zmv?`UCH8}o@r7S;;M(!c7@!S=0A_6%T|;C|+9c8?4#~x#vE3~H)5mp3H4!d*Kmh?2 zq}PNdARtHwL4ttvs!{|(Q=|zI=@1eW=|y^x5=44ON>EBbnt&8RdI=JGH6SGrk{9oN z@1Aqtd*|*yyF1@}b9R37eZM_tcV>pkz2vXpM&Zn|6iO7OqX> zJf*S*nZ8>ar9!ELwn9cGRV_0+?It|8>gl6|x!d+oFvwBIi&FF$N2MK8#^Mu0E6LI8GH0g@CD60rs5rVr9UU|`*!F-Sp`s0eR^5S>w6=! zEJS77?S_bb4+vbo76n&+?oIBf8ntW>v!*MpZ_fh_ArNyD`F{j`foChvJZDg7;g8nT z%qf77OFcCaQT~Bc2g?W*~Y9VpT4DKG==vQcJQG5JA5;TBpsyNN^?H%2LQ?`pZUvY*^au%a*2;|A9UisKK~X^E%XI^XFW>C zSoqo3%k!2`gEaBda&p8%U!kUoOaSLV&ESB_G#9{zz52-Oy`3asP!csi?0i#RK0P^^ zkyKW9%K)JY&QS@JzIGjC1BCA=S|5*zqa3qnSFd8#sE(ti_{|gpgV$`Sjw6wK*CeAd z+;Aa7l4ST->U}mTP?-;*gnRK4Z)Vk^t%LmoEIs z9;z>TVpJm1{^;7daYr=5lSk=Ig~-J_Q-XddJib{=yg2jgv3dabUXXnA@dei^su|z@ zc95gC;&R_(MRLLDT*)8bvlD`b&gJxqiYj&krwoBz?0@CcqSmtUL0Z zFDLtmXG8ood0C|QyvUsHkZz&+uPg)2_HvNk#VP9U;0;ev>E6MOyfl-73l3!5&tbx z!D_Z3Fhx|0nZgWL6&O$=m60Z;MEWJqfY0+1J0NQo>To+~=@k2zx%@%&uLVx8craj* zVUb;$ow8V-k4A7Q%pkNw%kk#ez!J_y*YAyx_|L=pfiqQs(>~%SUk|MZ+cz`a zTcv5|=seQYyk<5tfE__YfdG5^Ulj%={viXBvBpw82K``{Db5xK5-8pCnRLUF8Q|~n zUeQxbq)OCS0UlC4vJ!T@Y6m2>@dZq2$-$5Jb&9gLzOXjELFJ$oaSIcZfUKqib1Y*8bKolr%VD*X=Cbl=FbnA4KI=o zml9bYy@a$UXW)ms`~3Whl-Kx(FPHgOWFO{iTf>y-^{^Zgc6QnhoNl5Km_<9kp?lks zukz}n23SXzBH{;M=A!E;0E3jZ=Q|08-<&+d+w@uIIXG&cMf|L?lJ2^9<4@C$Sjy|C zpXEIR$I5s6Iv!-_hy~UXIMBIVHEpx=oo~=4(Xm%J9;)-+?W_G}zmW*Ee zgxn3^4KLgtUtqdVKLFAR@Q(GEZ_=%JwP@2o3Qe>0RZyy-;}ZETm{-R4T9ESM37Now z82n;&FAkdCqM`b$Y4-Cs6PELtG4k&br|hc3`x$}tl0TE(RI&+ znBi7;OITRIPyC$xe^=yaN#*vi=J;&`a5?G(xW}En0OK( zL*MG$$#co%c?O-FJ~g1Lk?b*cPwIHA)e=t3FnhyHrRpnK1rP8Lll=*3@>8&gYS*Fl zVXd@~bK*6fCq6BnwHbjXk5yaNB^8L_Ia-mdCIXJ0agWKBR<0e@;s;`?UXVK_%5Jn< z;rkBU{GKHW9{Bf}#GBi?pNuGDIg){us{=}cMrJOlwI-{rFePPD9-(d`zT7y+>WIMA|JUeF2E2 zIKZiLPJtN*iqa?wy|CXVS}zq&7nZ4P7=aTw>e$iR-sk=Zl%r;^D}Wmwt-Tdw;3OLU zh!(ud8utxC9ezJRsg2OIa_=9OOebN)) zD769?w#?S9n|k&ma|mOX>IIw#_z_IJv&AkKi|(>kb-m5ob!uK0U5Z{$ojmXYpia&e zJjiG81mj*|n4|u_TYy(gqX^Oh@aS6@O=0oVi;#E;n_m8N3RZr05re>CLxd zVs%|CDQ%v*?|_38u!dPO{zagWzLGX{SFK>81-_vVm3~FRdVyzPud-bf^Euw+ zWE_Uhb5VL&(J+w2HLjBFA2&G@h(QnlH%2e?)B!`?yFzena}^O2aJZjIeCV&%TCKZy?|$+goi8(TmFLtbh5d&dIDYZ$R+ z?v94z`=FTgGV@@mhxqS@ zQcdU87{^T-rzc$Phzqdz&{j;1`~3qB$z@{8J7TsMbpN~;(()K--y{^IH@UiD9IXIe zgs3T*Z#;W@+Ao;sub%icT!L7N1Yzt8FEgJpEj`$^yN?dVm=F?a0=Nf2Ls$*2#v_eX zEb9wyT#!s$moVbn$@|Q zs`GNAG!n@35mLhazp(sgVXIT-P$#KQ!AMyshQGp_pYW^?XoJXEWkrY>bz4+L%Ne4G zF82y%&l~NrW-l;L9n{%%OT)3nA@|!|?&;x`%5ntrJB>S`xCH7uMk|F(cWL4o(NE~U zSv*uD0c6@>&^Sv6xy=Z0e~+eaJaNCUmh@6CtkiWO;qYKET0wmgLQBF)fp1w-n9+Dq zS0{m`70(1amnr{i{rV@os+OMGfiPlU!F~fq_L=e2sDp%>YXZ<}BmLd{*}$uNH=Wrq zbu@sp6yufipnyu(8Yo|x>XC+U*yyKpv@S4le;{;#ny)|YTEB2G4l9R`Qg7_-En`uP z?>4gk&(Qp1G*mYo!~crxdAs;%#~c6kmhOYa5oC=h;o_r2UF*r=?*4PJOGLu2VTr+D z5c>KP*!QR_WSxrHsQ})JU~v6~_n}!qP#6GMdL1x7M=V~vqY6TP!1)Kli`a-|LWJ>4 zX0vA9Q@My1v^kJ>ACXnVxVtm9Hovpf*>++00J?x1uO89HC575o4h@Md?nLxeBqvqH zI6<)iW=;)qPdV&VY}4Xitb$?lZ#t(f1sw5_E}$%%GKJKTG}rUhmB#e3^}xI+EU@5W zz{iM5*aKw~I8xG0tep6#X3pZQdAo!MDyQ`{&{sVbNONT|sHsY1>V@@<>Y1hj8!mI0 zAaAB(+6=83$98NimaLD)1|0Ef&9@BnHQBD4WAIGN@q`(Sna~ zR1|(%#!rY(>p87s09EnZDqF@YkW^e17ezn&o|+I}pn`EI7=ErVp_`tr=k?*jlY5+y zrV~lt+cy^OLPZE4c=mhdX7~2#pTH_u6Hlq$O@3VJzk*HC<=vl?QZlz)&B)&Cd36vE z7GXYy#e@@%?=&I39&Dbz5mJ?jg9LLuf(i$!q=?Fk?e#owbGPsLh4p}7py}vpCaZw) z@U375>^63Sg2Xcfo>mVmYCk@+N=LvM=< z)W|*B5~OFgR*JsJ{kgB1x;{l?3fs1>RRQ5X{SLW@NewL-T6L~TMc0NLVMff+t(#PL zij^v&iJzUI3uNuGC3!znYtC1G$y6Nv9qIpw&$|1;6vs<%v31R_Xwe?s3e64BIM-8I zC*4;s+S}=1LvH4cThHzMnUp{OLweEIbTbv;nTT@G(#dJXMv4+c`&-%`&d z3mf#pH;)%J`)9NIk71Dh?~O1m;;4z+mU&@2LVWEi-z51_x*|Tf!x+-W(%~ta_iWl+ z9#hBn!0qU5x{64l+A*%NY?+adIdOXJ=%t#!5G3GR_^M>4c$*Y+1Pc~YDc%dmZ?bH& z_oA%wEpzBgpFj!|9`7|+`J7KDog!n*`*J5fVj=Q~dZP*_W@5{Xp7<~|^Cx@&CqO76 z(`9x@-d6>Q>4}+iZ7SPVZclW%TgBRwC)wfjcgKpC77r&vat+q2Oxw)kyp8MZzVNmmW;mZI63mR+|=E+0E@urzR0o8nEh{n$Iqmm2M7 z|8`2X_-p*d@6Xv{hZEg8E?Jo_k98y81+Zor81=48NQ_u83A}c4eDKKZuIjRa*ANvJ zH$T*a`~1IDS^olmo4qx}=DVQCr(BM@RmFCXz`I8ZMwq$bxQ%+e3wh^s;<~3i&d(qm z346ixZa(AL!EPcg@ek5a!I2-NHd9*vH;-LRG|&4rk?+-JVM>A6!>zXxpiqeI zS?DK&vZaUVwJ9@libKpxkXN5(2G^ie-h`xiz3u~Mf1J5K|Ra&xtpX`GM@Ap zX_|1-e6ij`@}rdRi7?8Pr=LW*a^^@>X^5n$^DaMB( z>e;X_75^Z`QY(?-DlV1(k=xw5 zv5VA`;I2H@{vK1oXk%j)1x%wtZ)BLWVyM5e&ow;jwh&wTANrFV9)O3q^1;fZ;7^^T zVB+1z6>-oeLJTtksprX~`V*AhEZVvIRC_rxe7OU+R|$w$2q&e9Cf~5DvVY#L*U-3t z27bYleGpOpuv#2kmjivuMjPISaQuL}7q{zSV|uqeKYHXUW^S>U8LbN#DU2D439fsx z&uQru0G*p_CVBGvCU$tOg645yQawFYp5WFllG{P7Wf$78%mgtN zG^vGYLJD(RbkjR765^})yCm$FvL~i~XCT@hUVnDJ)rY8}YW~kWMgxYCO)=7J=(TlL z|K!@q&ZuF6nAk|miU)P;bXQ1jSe()5OwcC(8wpL&CPH`suFDn2 z+n&mP+t+4Ib}Sm-tXP*^8`@2GL+v$HJb{dc4Egp$(}BE~F|3KYpoHyqK$0#KZ!_;$C$sk|67mBXaQ*{{fmg$dx+#4RzH7wZo^yu3UwbCX;!P-zxgk%i$2Bx literal 22717 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%0D>Fj>!I&C&urhQUag2KwWAlYP(v0hZW4f>>@~NW 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 From 68d118b0b9220be4d26be911304498575e0e9991 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 13 Oct 2024 15:19:54 -0400 Subject: [PATCH 8/9] Revert "oops" This reverts commit a84fe10103f9da84829b164d1a1e91d8e3a34a51. --- _maps/shuttles/hunter/hunter_bounty.dmm | 243 ++++++++++++------------ 1 file changed, 121 insertions(+), 122 deletions(-) diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm index 9bc7ba09d5318..8eb0af9981515 100644 --- a/_maps/shuttles/hunter/hunter_bounty.dmm +++ b/_maps/shuttles/hunter/hunter_bounty.dmm @@ -133,6 +133,33 @@ }, /turf/open/floor/iron/techmaint, /area/shuttle/hunter) +"cv" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/decal/cleanable/leaper_sludge{ + color = "#808080" + }, +/obj/item/trash/energybar{ + color = "#808080"; + pixel_x = -2; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/cigbutt{ + anchored = 1; + color = "#808080"; + pixel_x = -4; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/plasma, +/obj/structure/lattice{ + color = "#808080" + }, +/turf/open/floor/plating/elevatorshaft{ + color = "#808080" + }, +/area/shuttle/hunter) "dH" = ( /obj/structure/lattice/catwalk/over, /obj/effect/turf_decal/stripes/line{ @@ -211,21 +238,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/tech, /area/shuttle/hunter) -"js" = ( -/obj/item/kirbyplants{ - icon_state = "plant-10" - }, -/obj/structure/railing{ - dir = 2 - }, -/obj/effect/turf_decal/edges/techfloor{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) "jw" = ( /obj/machinery/atmospherics/components/unary/plasma_refiner{ dir = 8 @@ -313,41 +325,6 @@ }, /turf/open/floor/iron/ridged/steel, /area/shuttle/hunter) -"mn" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/item/trash/sosjerky{ - anchored = 1; - color = "#808080"; - pixel_x = 8; - pixel_y = 8 - }, -/obj/effect/decal/cleanable/greenglow{ - color = "#808080" - }, -/obj/item/cigbutt{ - anchored = 1; - color = "#808080"; - pixel_x = -4; - pixel_y = 11 - }, -/obj/structure/lattice{ - color = "#808080" - }, -/turf/open/floor/plating/elevatorshaft{ - color = "#808080" - }, -/area/shuttle/hunter) -"ms" = ( -/obj/structure/railing{ - dir = 2 - }, -/turf/open/floor/iron/stairs{ - icon = 'icons/obj/stairs.dmi'; - dir = 4 - }, -/area/shuttle/hunter) "nb" = ( /obj/machinery/door/airlock/highsecurity{ req_access_txt = "181" @@ -363,16 +340,6 @@ }, /turf/open/floor/iron/tech, /area/shuttle/hunter) -"nY" = ( -/obj/structure/lattice/catwalk/over, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden, -/turf/open/floor/plating{ - broken = 1 - }, -/area/shuttle/hunter) "oH" = ( /obj/structure/tank_dispenser/oxygen, /obj/effect/turf_decal/stripes/line{ @@ -505,19 +472,26 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/tech, /area/shuttle/hunter) -"sS" = ( +"sh" = ( +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/structure/railing{ + dir = 8 + }, /obj/effect/turf_decal/edges/techfloor{ dir = 8 }, -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/railing{ - dir = 2 +/obj/item/flashlight/lamp{ + pixel_x = -4; + pixel_y = 7 }, -/obj/effect/turf_decal/delivery, -/obj/structure/sign/warning/nosmoking{ - pixel_x = 32 +/obj/item/binoculars{ + pixel_x = 3 + }, +/obj/item/gps{ + pixel_x = 7 }, -/obj/machinery/light/small, /turf/open/floor/iron/tech, /area/shuttle/hunter) "sZ" = ( @@ -615,6 +589,15 @@ }, /turf/open/floor/iron/grid/steel, /area/shuttle/hunter) +"zP" = ( +/obj/structure/railing{ + dir = 2 + }, +/turf/open/floor/iron/stairs{ + icon = 'icons/obj/stairs.dmi'; + dir = 4 + }, +/area/shuttle/hunter) "BE" = ( /obj/structure/fluff/empty_sleeper{ dir = 8 @@ -656,33 +639,6 @@ }, /turf/open/floor/plating, /area/shuttle/hunter) -"Gx" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/effect/decal/cleanable/leaper_sludge{ - color = "#808080" - }, -/obj/item/trash/energybar{ - color = "#808080"; - pixel_x = -2; - pixel_y = 4 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/cigbutt{ - anchored = 1; - color = "#808080"; - pixel_x = -4; - pixel_y = 1 - }, -/obj/effect/decal/cleanable/plasma, -/obj/structure/lattice{ - color = "#808080" - }, -/turf/open/floor/plating/elevatorshaft{ - color = "#808080" - }, -/area/shuttle/hunter) "GA" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "181" @@ -898,6 +854,21 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/tech, /area/shuttle/hunter) +"Or" = ( +/obj/effect/turf_decal/edges/techfloor{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/railing{ + dir = 2 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 32 + }, +/obj/machinery/light/small, +/turf/open/floor/iron/tech, +/area/shuttle/hunter) "Pl" = ( /obj/structure/window/reinforced{ dir = 4 @@ -948,6 +919,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/tech, /area/shuttle/hunter) +"Sw" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/turf/open/floor/plating{ + broken = 1 + }, +/area/shuttle/hunter) "TB" = ( /obj/structure/lattice/catwalk/over, /obj/item/trash/semki, @@ -956,6 +936,32 @@ }, /turf/open/floor/plating/rust, /area/shuttle/hunter) +"TL" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/item/trash/sosjerky{ + anchored = 1; + color = "#808080"; + pixel_x = 8; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/greenglow{ + color = "#808080" + }, +/obj/item/cigbutt{ + anchored = 1; + color = "#808080"; + pixel_x = -4; + pixel_y = 11 + }, +/obj/structure/lattice{ + color = "#808080" + }, +/turf/open/floor/plating/elevatorshaft{ + color = "#808080" + }, +/area/shuttle/hunter) "Uw" = ( /obj/machinery/computer/crew{ dir = 8 @@ -1014,32 +1020,25 @@ }, /turf/open/floor/iron/tech, /area/shuttle/hunter) -"XH" = ( -/obj/structure/railing/corner, -/obj/effect/turf_decal/edges/techfloor{ - dir = 1 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"XM" = ( -/obj/structure/table/reinforced{ - color = "#c1b6a5" +"WE" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" }, /obj/structure/railing{ - dir = 8 + dir = 2 }, /obj/effect/turf_decal/edges/techfloor{ - dir = 8 - }, -/obj/item/flashlight/lamp{ - pixel_x = -4; - pixel_y = 7 + dir = 1 }, -/obj/item/binoculars{ - pixel_x = 3 +/obj/structure/extinguisher_cabinet{ + pixel_x = 26 }, -/obj/item/gps{ - pixel_x = 7 +/turf/open/floor/iron/tech, +/area/shuttle/hunter) +"XH" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/edges/techfloor{ + dir = 1 }, /turf/open/floor/iron/tech, /area/shuttle/hunter) @@ -1206,7 +1205,7 @@ GG xf GA az -nY +Sw GA Fv qS @@ -1218,7 +1217,7 @@ nn Lo nn aw -sS +Or nn jl jl @@ -1252,7 +1251,7 @@ ab sc ri nn -mn +TL fp lw nn @@ -1294,10 +1293,10 @@ UI UI nn Hl -js -ms +WE +zP nn -Gx +cv BE Ly nn @@ -1355,7 +1354,7 @@ UI UI Lo nn -XM +sh YJ ca nn From b57536de3ef3f38bc42aaf235631749aa9038a15 Mon Sep 17 00:00:00 2001 From: RKz Date: Sun, 13 Oct 2024 15:20:25 -0400 Subject: [PATCH 9/9] Revert "shutttles" This reverts commit 7db07b72784ff1a8f9a5918eac585334ec31f8f0. --- _maps/Prefab/Departments.dmm | 64 +- _maps/shuttles/ert/ert_bounty.dmm | 807 -------------------- _maps/shuttles/hunter/hunter_bounty.dmm | 1 + code/datums/ert.dm | 5 - code/datums/helper_datums/teleport.dm | 59 -- code/datums/shuttles.dm | 9 - code/game/objects/effects/landmarks.dm | 8 - code/modules/admin/verbs/one_click_antag.dm | 76 +- 8 files changed, 25 insertions(+), 1004 deletions(-) delete mode 100644 _maps/shuttles/ert/ert_bounty.dmm diff --git a/_maps/Prefab/Departments.dmm b/_maps/Prefab/Departments.dmm index 24535bfa649df..d848487eaebe0 100644 --- a/_maps/Prefab/Departments.dmm +++ b/_maps/Prefab/Departments.dmm @@ -112,12 +112,6 @@ /obj/structure/closet/secure_closet/chemical, /turf/open/floor/iron/white, /area/medical/apothecary) -"cb" = ( -/obj/effect/turf_decal/tile/steelgrid{ - dir = 9 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "cc" = ( /mob/living/simple_animal/slime, /turf/open/floor/iron/grid/steel, @@ -648,18 +642,6 @@ }, /turf/open/floor/iron, /area/space) -"pD" = ( -/obj/effect/turf_decal/tile/steelgrid/anticorner{ - dir = 8 - }, -/turf/open/floor/iron/tech/grid, -/area/space) -"pF" = ( -/obj/effect/turf_decal/tile/steelgrid{ - dir = 6 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "pG" = ( /obj/machinery/requests_console, /turf/open/floor/iron/dark, @@ -846,12 +828,6 @@ /obj/structure/disposalpipe/sorting/mail/destination/qm_office, /turf/open/floor/carpet/orange, /area/quartermaster/qm) -"vy" = ( -/obj/effect/turf_decal/tile/steelgrid{ - dir = 10 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "vD" = ( /obj/structure/disposalpipe/sorting/mail/destination/ce_office, /turf/open/floor/carpet/royalblue, @@ -898,7 +874,7 @@ /area/crew_quarters/heads/hos) "wM" = ( /obj/item/toy/plush/moth/brown, -/turf/open/floor/iron/tech/grid, +/turf/open/floor/iron, /area/space) "wQ" = ( /obj/machinery/sparker, @@ -1213,12 +1189,6 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/medical/sleeper) -"EH" = ( -/obj/effect/turf_decal/tile/steelgrid/anticorner{ - dir = 1 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "EI" = ( /obj/effect/turf_decal/tile/purple/fourcorners/contrasted, /obj/effect/landmark/start/depsec/science, @@ -1381,10 +1351,6 @@ /obj/structure/sign/warning/pods, /turf/open/floor/iron/dark, /area/space) -"Jr" = ( -/obj/effect/turf_decal/tile/steelgrid/anticorner, -/turf/open/floor/iron/tech/grid, -/area/space) "Ju" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -2020,12 +1986,6 @@ /obj/item/dest_tagger, /turf/open/floor/iron/sepia, /area/quartermaster/sorting) -"Xo" = ( -/obj/effect/turf_decal/tile/steelgrid/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "Xs" = ( /obj/machinery/button/ignition, /turf/open/floor/iron, @@ -2094,12 +2054,6 @@ /obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/crew_quarters/heads/hop) -"Zb" = ( -/obj/effect/turf_decal/tile/steelgrid{ - dir = 5 - }, -/turf/open/floor/iron/tech/grid, -/area/space) "Zj" = ( /obj/structure/reagent_dispensers/fueltank, /obj/structure/reagent_dispensers/watertank, @@ -2554,9 +2508,9 @@ SQ PY Em BJ -EH -cb -pD +Qk +Qk +Qk XF XF XF @@ -2574,9 +2528,9 @@ SQ uy Ow xY -Zb +Qk wM -vy +Qk XF rs XF @@ -2594,9 +2548,9 @@ NH Hj UA kF -Xo -pF -Jr +Qk +Qk +Qk XF XF XF diff --git a/_maps/shuttles/ert/ert_bounty.dmm b/_maps/shuttles/ert/ert_bounty.dmm deleted file mode 100644 index e8c312f48be18..0000000000000 --- a/_maps/shuttles/ert/ert_bounty.dmm +++ /dev/null @@ -1,807 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ak" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 9 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"at" = ( -/obj/structure/sign/poster/contraband/bountyhunters, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/hunter) -"bn" = ( -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/office, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"bH" = ( -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/fugitive_capture, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"cp" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/ert_shuttle_spawn, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"dW" = ( -/obj/structure/curtain/bounty, -/obj/effect/turf_decal/edges/techfloor_orange, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"ew" = ( -/obj/effect/turf_decal/edges/techfloor_orange, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"ga" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold/purple/hidden, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"go" = ( -/obj/machinery/suit_storage_unit/standard_unit{ - storage_type = /obj/item/tank/internals/oxygen/yellow - }, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"gS" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/ert_shuttle_spawn, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"hh" = ( -/obj/effect/landmark/ert_shuttle_brief_spawn, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/fancy/shuttle{ - dir = 4 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"ig" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"ka" = ( -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 8 - }, -/obj/structure/rack, -/obj/item/storage/firstaid/o2{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/storage/firstaid/radbgone{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/item/storage/firstaid{ - pixel_x = -6; - pixel_y = -1 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/hunter) -"lK" = ( -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/fugitive_capture_computer{ - dir = 1 - }, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"lY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/plaque, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"mc" = ( -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"mE" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 9 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"mP" = ( -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/hunter) -"ov" = ( -/obj/effect/turf_decal/trimline/dark_blue/line, -/obj/machinery/computer/launchpad, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"oA" = ( -/obj/machinery/power/smes, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"sF" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 8 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"tK" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 10 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"ux" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/plasma_refiner, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"uF" = ( -/obj/structure/curtain/bounty, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"uS" = ( -/obj/structure/table, -/obj/item/phone, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"uX" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured, -/area/shuttle/hunter) -"vX" = ( -/obj/effect/turf_decal/edges/techfloor_orange, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"wB" = ( -/obj/effect/turf_decal/stripes/asteroid/end{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/shuttle/hunter) -"xr" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/ert_shuttle_spawn, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"xs" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"xS" = ( -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"xY" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 8 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"zn" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/shuttle/hunter) -"zz" = ( -/obj/effect/turf_decal/stripes/asteroid/end, -/turf/open/floor/iron/dark/textured, -/area/shuttle/hunter) -"zR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"Ac" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/docking_port/stationary{ - dwidth = 11; - height = 16; - name = "Deep Space"; - shuttle_id = "pirate_home"; - width = 17 - }, -/obj/docking_port/mobile{ - dheight = 3; - dwidth = 3; - height = 13; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "hunter shuttle"; - rechargeTime = 1800; - shuttle_id = "huntership"; - width = 15 - }, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, -/area/shuttle/hunter) -"Az" = ( -/obj/machinery/shuttle/engine/plasma{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/shuttle/hunter) -"CK" = ( -/obj/effect/turf_decal/trimline/dark_blue/line, -/obj/machinery/suit_storage_unit/standard_unit{ - storage_type = /obj/item/tank/internals/oxygen/yellow - }, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"Dk" = ( -/obj/effect/turf_decal/trimline/dark_blue/line, -/obj/machinery/launchpad, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"Do" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"EK" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"Gf" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/hunter) -"Gu" = ( -/obj/effect/spawner/structure/window/plastitanium, -/turf/open/floor/plating, -/area/shuttle/hunter) -"JT" = ( -/obj/effect/turf_decal/edges/techfloor_orange, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"JU" = ( -/obj/machinery/computer/camera_advanced{ - dir = 8 - }, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"Kg" = ( -/obj/structure/rack, -/obj/item/grenade/plastic/c4{ - pixel_x = -1 - }, -/obj/item/grenade/plastic/c4{ - pixel_x = 11 - }, -/obj/item/grenade/plastic/c4{ - pixel_x = 5 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"KY" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/ert_shuttle_spawn, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"LD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line, -/obj/machinery/suit_storage_unit/standard_unit{ - storage_type = /obj/item/tank/internals/oxygen/yellow - }, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"LG" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"Pf" = ( -/obj/structure/curtain/bounty, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"Qe" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 1 - }, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"QA" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/dark_blue/line, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"RI" = ( -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 8 - }, -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 7 - }, -/obj/item/binoculars, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/hunter) -"SR" = ( -/turf/template_noop, -/area/template_noop) -"TI" = ( -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/shuttle/hunter) -"TO" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, -/area/shuttle/hunter) -"Ua" = ( -/obj/structure/table, -/obj/machinery/recharger, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"UC" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 8 - }, -/obj/effect/landmark/ert_shuttle_spawn, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"Xn" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "floor6-old"; - pixel_y = 16 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"XA" = ( -/obj/effect/turf_decal/edges/techfloor_orange, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"Yn" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ - dir = 4 - }, -/turf/open/floor/iron/techmaint, -/area/shuttle/hunter) -"YG" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/trimline/dark_blue/line, -/turf/open/floor/pod/light, -/area/shuttle/hunter) -"YY" = ( -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 6 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"Zp" = ( -/obj/machinery/computer/shuttle_flight/hunter{ - dir = 8 - }, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) -"ZU" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/edges/techfloor_orange{ - dir = 10 - }, -/turf/open/floor/iron/tech, -/area/shuttle/hunter) - -(1,1,1) = {" -SR -SR -SR -mP -SR -SR -SR -SR -SR -mP -SR -SR -SR -"} -(2,1,1) = {" -SR -SR -SR -mP -SR -SR -SR -SR -SR -mP -SR -SR -SR -"} -(3,1,1) = {" -mP -SR -SR -mP -SR -Az -SR -Az -SR -mP -SR -SR -mP -"} -(4,1,1) = {" -mP -SR -Az -mP -mP -zn -Gu -zn -mP -mP -Az -SR -mP -"} -(5,1,1) = {" -mP -mP -zn -mP -ig -ka -Kg -RI -oA -mP -zn -mP -mP -"} -(6,1,1) = {" -mP -Gf -TI -ux -ga -UC -xr -sF -gS -KY -TI -Gf -mP -"} -(7,1,1) = {" -TO -zR -tK -LG -Yn -Yn -Do -Yn -Do -Xn -ak -xs -Ac -"} -(8,1,1) = {" -mP -mP -Gu -mP -wB -uX -uX -uX -zz -mP -Gu -mP -mP -"} -(9,1,1) = {" -SR -mP -Gu -mP -LD -mE -xY -ZU -go -mP -Gu -mP -SR -"} -(10,1,1) = {" -SR -SR -Gu -at -CK -bn -Ua -ew -go -mP -Gu -SR -SR -"} -(11,1,1) = {" -SR -SR -SR -mP -Dk -bn -uS -ew -bH -mP -SR -SR -SR -"} -(12,1,1) = {" -SR -SR -SR -mP -ov -mc -cp -XA -lK -mP -SR -SR -SR -"} -(13,1,1) = {" -SR -SR -SR -Gu -mP -uF -Pf -dW -mP -Gu -SR -SR -SR -"} -(14,1,1) = {" -SR -SR -SR -Gu -QA -xS -lY -JT -EK -Gu -SR -SR -SR -"} -(15,1,1) = {" -SR -SR -SR -Gu -YG -mc -hh -vX -Qe -Gu -SR -SR -SR -"} -(16,1,1) = {" -SR -SR -SR -mP -Gu -Zp -JU -YY -Gu -mP -SR -SR -SR -"} -(17,1,1) = {" -SR -SR -SR -SR -Gu -Gu -Gu -Gu -Gu -SR -SR -SR -SR -"} diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm index 8eb0af9981515..23ec88975fb59 100644 --- a/_maps/shuttles/hunter/hunter_bounty.dmm +++ b/_maps/shuttles/hunter/hunter_bounty.dmm @@ -920,6 +920,7 @@ /turf/open/floor/iron/tech, /area/shuttle/hunter) "Sw" = ( +/obj/structure/lattice/catwalk/over, /obj/structure/cable/yellow{ icon_state = "1-2" }, diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 082b243503b81..adac6d4d1a5db 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -16,10 +16,6 @@ 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 - /// A custom map template to spawn the ERT at. If this is null or use_custom_shuttle is FALSE, the ERT will spawn at Centcom. - var/datum/map_template/ert_template - /// If we should actually _use_ the ert_template custom shuttle - var/use_custom_shuttle = TRUE /datum/ert/New() if (!polldesc) @@ -155,4 +151,3 @@ mission = "Assist the station in catching perps, dead or alive." polldesc = "a Centcom-hired bounty hunting gang" random_names = FALSE - ert_template = /datum/map_template/shuttle/ert/bounty diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 46c18cdb1f981..2f88159ad3296 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -157,65 +157,6 @@ // DING! You have passed the gauntlet, and are "probably" safe. return F -/// Checks if a given turf is a "safe" location -/proc/is_safe_turf(turf/random_location, extended_safety_checks = FALSE, dense_atoms = FALSE, no_teleport = FALSE) - . = FALSE - if(!isfloorturf(random_location)) - return - var/turf/open/floor/floor_turf = random_location - //var/area/destination_area = floor_turf.loc - - if(no_teleport) - return - - var/datum/gas_mixture/floor_gas_mixture = floor_turf.air - if(!floor_gas_mixture) - return - - var/list/gases_to_check = list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/plasma) - var/trace_gases - for(var/id in floor_gas_mixture.get_gases()) - if(id in gases_to_check) - continue - trace_gases = TRUE - break - - // Can most things breathe? - if(trace_gases) - return - if(!(floor_gas_mixture.get_gases(/datum/gas/oxygen) && floor_gas_mixture.get_gases(/datum/gas/oxygen) >= 16)) - return - if(floor_gas_mixture.get_gases(/datum/gas/plasma)) - return - if(floor_gas_mixture.get_gases(/datum/gas/carbon_dioxide) && floor_gas_mixture.get_gases(/datum/gas/carbon_dioxide) >= 10) - return - - // Aim for goldilocks temperatures and pressure - if((floor_gas_mixture.return_temperature() <= 270) || (floor_gas_mixture.return_temperature() >= 360)) - return - var/pressure = floor_gas_mixture.return_pressure() - if((pressure <= 20) || (pressure >= 550)) - return - - if(extended_safety_checks) - if(islava(floor_turf)) //chasms aren't /floor, and so are pre-filtered - var/turf/open/lava/lava_turf = floor_turf // Cyberboss: okay, this makes no sense and I don't understand the above comment, but I'm too lazy to check history to see what it's supposed to do right now - if(!lava_turf.is_safe()) - return - - // Check that we're not warping onto a table or window - if(!dense_atoms) - var/density_found = FALSE - for(var/atom/movable/found_movable in floor_turf) - if(found_movable.density) - density_found = TRUE - break - if(density_found) - return - - // DING! You have passed the gauntlet, and are "probably" safe. - return TRUE - /proc/get_teleport_turfs(turf/center, precision = 0) if(!precision) return list(center) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 3867517928fbc..dc6202d1d3531 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -240,10 +240,6 @@ port_id = "snowdin" can_be_bought = FALSE -/datum/map_template/shuttle/ert - port_id = "ert" - can_be_bought = FALSE - // Shuttles start here: /datum/map_template/shuttle/emergency/backup @@ -816,11 +812,6 @@ suffix = "excavation" name = "Snowdin Excavation Elevator" -// Custom ERT shuttles -/datum/map_template/shuttle/ert/bounty - suffix = "bounty" - name = "Bounty Hunter ERT Shuttle" - /datum/map_template/shuttle/tram port_id = "tram" can_be_bought = FALSE diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 3d818e9d5a79f..ccdb8b598f528 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -403,14 +403,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.emergencyresponseteamspawn += loc return INITIALIZE_HINT_QDEL -/obj/effect/landmark/ert_shuttle_spawn - name = "ertshuttlespawn" - icon_state = "ert_spawn" - -/obj/effect/landmark/ert_shuttle_brief_spawn - name = "ertshuttlebriefspawn" - icon_state = "ert_brief_spawn" - //ninja energy nets teleport victims here /obj/effect/landmark/holding_facility name = "Holding Facility" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 7ce90882edd8d..cc9271a6d0b0f 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -261,7 +261,6 @@ .["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" - .["mainsettings"]["use_custom_shuttle"]["value"] = newtemplate.use_custom_shuttle ? "Yes" : "No" /datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag) @@ -329,12 +328,11 @@ "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")]"), - "use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"), + "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]") ) ) - var/list/prefreturn = presentpreflikepicker(usr, "Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) + var/list/prefreturn = presentpreflikepicker(usr,"Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) if (isnull(prefreturn)) return FALSE @@ -352,75 +350,36 @@ ertemplate.teamsize = prefs["teamsize"]["value"] ertemplate.mission = prefs["mission"]["value"] ertemplate.polldesc = prefs["polldesc"]["value"] - ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 6 are effectively toggles + 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" - ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes" var/list/spawnpoints = GLOB.emergencyresponseteamspawn var/index = 0 - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad") - var/teamSpawned = FALSE - - // This list will take priority over spawnpoints if not empty - var/list/spawn_turfs = list() - - // Takes precedence over spawnpoints[1] if not null - var/turf/brief_spawn - - if(!length(candidates)) - return FALSE - - if(ertemplate.use_custom_shuttle && ertemplate.ert_template) - to_chat(usr, "Attempting to spawn ERT custom shuttle, this may take a few seconds...") - var/datum/map_template/shuttle/ship = new ertemplate.ert_template - var/x = rand(TRANSITIONEDGE, world.maxx - TRANSITIONEDGE - ship.width) - var/y = rand(TRANSITIONEDGE, world.maxy - TRANSITIONEDGE - ship.height) - var/z = SSmapping.empty_space.z_value - var/turf/located_turf = locate(x, y, z) - if(!located_turf) - CRASH("ERT shuttle found no place to load in") - - if(!ship.load(located_turf)) - CRASH("Loading ERT shuttle failed!") - - var/list/shuttle_turfs = ship.get_affected_turfs(located_turf) - - for(var/turf/affected_turf as anything in shuttle_turfs) - for(var/obj/effect/landmark/ert_shuttle_spawn/spawner in affected_turf) - spawn_turfs += get_turf(spawner) - - if(!brief_spawn) - brief_spawn = locate(/obj/effect/landmark/ert_shuttle_brief_spawn) in affected_turf - - if(!length(spawn_turfs)) - stack_trace("ERT shuttle loaded but found no spawnpoints, placing the ERT at wherever inside the shuttle instead.") - - for(var/turf/open/floor/open_turf in shuttle_turfs) - if(!is_safe_turf(open_turf)) - continue - spawn_turfs += open_turf - - if(ertemplate.spawn_admin) if(isobserver(usr)) - var/mob/living/carbon/human/admin_officer = new (brief_spawn || spawnpoints[1]) + 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) + return FALSE + //Pick the (un)lucky players - var/numagents = min(ertemplate.teamsize, length(candidates)) + var/numagents = min(ertemplate.teamsize,candidates.len) //Create team - var/datum/team/ert/ert_team = new ertemplate.team() + var/datum/team/ert/ert_team = new ertemplate.team () if(ertemplate.rename_team) ert_team.name = ertemplate.rename_team @@ -449,14 +408,9 @@ earmarked_leader = pick(candidates) while(numagents && candidates.len) - var/turf/spawnloc - if(length(spawn_turfs)) - spawnloc = pick(spawn_turfs) - else - spawnloc = spawnpoints[index+1] - //loop through spawnpoints one at a time - index = (index + 1) % spawnpoints.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)