"
dat += "
Time Search Range: [gameTimestamp(wtime = time_from)]"
dat += " To:
[gameTimestamp(wtime = time_to)]"
dat += "
"
@@ -133,26 +139,24 @@
var/mob/M = i
dat += "
[get_display_name(M)]"
dat += "
Add Mob"
- dat += "
Add Mob (by ckey)"
dat += "
Clear All Mobs"
dat += "
"
dat += "
Ckeys being used:"
for(var/ckey in selected_ckeys)
- dat += "
[ckey]"
+ dat += "
[get_ckey_name(ckey)]"
dat += "
Add ckey"
dat += "
Clear All ckeys"
dat += "
"
dat += "
Log Types:"
- for(var/i in all_log_types)
- var/log_type = i
+ for(var/log_type in all_log_types)
var/enabled = (log_type in selected_log_types)
var/text
var/style
if(enabled)
text = "
[log_type]"
- style = "background: [get_logtype_color(i)]"
+ style = "background: [get_logtype_color(log_type)]"
else
text = log_type
@@ -168,7 +172,7 @@
var/tdStyleType = "width:80px; text-align:center;"
var/tdStyleWho = "width:400px; text-align:center;"
var/tdStyleWhere = "width:150px; text-align:center;"
- dat += "
"
+ dat += "
"
dat += "
"
dat += "| When | Type | Who | What | Target | Where |
"
for(var/i in log_records)
@@ -224,6 +228,7 @@
return
if(href_list["clear_ckeys"])
selected_ckeys.Cut()
+ selected_ckeys_mobs.Cut()
show_ui(usr)
return
if(href_list["add_mob"])
@@ -231,11 +236,6 @@
var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a mob: ", mobs)
A.on_close(CALLBACK(src, .proc/add_mob, usr))
return
- if(href_list["add_mob_ckey"])
- var/list/mobs = get_assoc_mob_list_by_ckey()
- var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a ckey: ", mobs)
- A.on_close(CALLBACK(src, .proc/add_mob, usr))
- return
if(href_list["add_ckey"])
var/list/ckeys = SSlogging.get_ckeys_logged()
var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a ckey: ", ckeys)
@@ -274,6 +274,8 @@
return "deepskyblue"
if(MISC_LOG)
return "gray"
+ if(DEAD_CHAT_LOG)
+ return "#cc00c6"
return "slategray"
/datum/log_viewer/proc/get_display_name(mob/M)
@@ -282,4 +284,12 @@
name = "[name] ([M.real_name])"
if(isobserver(M))
name = "[name] (DEAD)"
- return name
+ return "\[[M.last_known_ckey]\] [name]"
+
+/datum/log_viewer/proc/get_ckey_name(ckey)
+ UPDATE_CKEY_MOB(ckey)
+ var/mob/M = selected_ckeys_mobs[ckey]
+
+ return get_display_name(M)
+
+#undef UPDATE_CKEY_MOB
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 386f395363e..33bef79fba1 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1268,8 +1268,11 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
/mob/proc/create_log(log_type, what, target = null, turf/where = get_turf(src))
if(!ckey)
return
+ var/real_ckey = ckey
+ if(ckey[1] == "@") // Admin aghosting will do this
+ real_ckey = copytext(ckey, 2)
var/datum/log_record/record = new(log_type, src, what, target, where, world.time)
- SSlogging.add_log(ckey, record)
+ SSlogging.add_log(real_ckey, record)
/proc/create_log_in_list(list/target, text, collapse = TRUE, last_log)//forgive me code gods for this shitcode proc
//this proc enables lovely stuff like an attack log that looks like this: "[18:20:29-18:20:45]21x John Smith attacked Andrew Jackson with a crowbar."
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 81d22e40a0b..87446bcf79e 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -55,6 +55,7 @@
return
say_dead_direct("[pick("complains", "moans", "whines", "laments", "blubbers", "salts")], \"[message]\"", src)
+ create_log(DEAD_CHAT_LOG, message)
/mob/proc/say_understands(var/mob/other, var/datum/language/speaking = null)
if(stat == DEAD)
From dbd89f66de4a71d1d6548099233fa9b6bc7845b7 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Fri, 3 Apr 2020 10:18:48 +0200
Subject: [PATCH 06/94] Add BLACKBOX again and make an define of it's own for
logging
---
code/__DEFINES/subsystems.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index ac3ac7d982e..e9dee4a149a 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -45,9 +45,10 @@
// Subsystems shutdown in the reverse of the order they initialize in
// The numbers just define the ordering, they are meaningless otherwise.
-#define INIT_ORDER_GARBAGE 19
+#define INIT_ORDER_GARBAGE 20
+#define INIT_ORDER_LOGGING 19
#define INIT_ORDER_DBCORE 18
-#define INIT_ORDER_LOGGING 17
+#define INIT_ORDER_BLACKBOX 17
#define INIT_ORDER_SERVER_MAINT 16
#define INIT_ORDER_INPUT 15
#define INIT_ORDER_RESEARCH 14
From 1fcd7f8153996dcb2d9c9389f69af7f579ab3d31 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Fri, 3 Apr 2020 10:24:29 +0200
Subject: [PATCH 07/94] Init change of SSlogging
---
code/controllers/subsystem/logging.dm | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/code/controllers/subsystem/logging.dm b/code/controllers/subsystem/logging.dm
index ab2c22d424f..916cc509629 100644
--- a/code/controllers/subsystem/logging.dm
+++ b/code/controllers/subsystem/logging.dm
@@ -2,19 +2,13 @@ SUBSYSTEM_DEF(logging)
name = "Logging"
priority = INIT_ORDER_LOGGING
flags = SS_NO_FIRE
- var/list/datum/log_record/logs // Assoc list of assoc lists (ckey, (log_type, list/logs))
-
-/datum/controller/subsystem/logging/Initialize()
- LAZYINITLIST(logs)
- return ..()
+ var/list/datum/log_record/logs = list() // Assoc list of assoc lists (ckey, (log_type, list/logs))
/datum/controller/subsystem/logging/proc/add_log(ckey, datum/log_record/log)
if(!ckey)
log_debug("SSLogging.add_log called with an invalid ckey")
return
- LAZYINITLIST(logs)
-
if(!logs[ckey])
logs[ckey] = list()
@@ -43,7 +37,6 @@ SUBSYSTEM_DEF(logging)
log_debug("SSLogging.get_logs_by_type called with an invalid log_type '[log_type]'")
return
- LAZYINITLIST(logs)
var/list/log_types_list = logs[ckey]
// Check if logs exist for the ckey
if(!log_types_list?.len)
From 0960d8d6c1a35cb9eb25b83c9f19218147e06c67 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Fri, 3 Apr 2020 10:57:12 +0200
Subject: [PATCH 08/94] Remove the subsystem and replace it with a glob
---
code/__DEFINES/subsystems.dm | 3 +--
code/_globalvars/logging.dm | 2 ++
code/datums/log_viewer.dm | 4 ++--
.../subsystem => datums}/logging.dm | 17 +++++++----------
code/modules/mob/mob.dm | 2 +-
paradise.dme | 2 +-
6 files changed, 14 insertions(+), 16 deletions(-)
rename code/{controllers/subsystem => datums}/logging.dm (63%)
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index e9dee4a149a..300d3a41fc0 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -45,8 +45,7 @@
// Subsystems shutdown in the reverse of the order they initialize in
// The numbers just define the ordering, they are meaningless otherwise.
-#define INIT_ORDER_GARBAGE 20
-#define INIT_ORDER_LOGGING 19
+#define INIT_ORDER_GARBAGE 19
#define INIT_ORDER_DBCORE 18
#define INIT_ORDER_BLACKBOX 17
#define INIT_ORDER_SERVER_MAINT 16
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index 0ea513708a1..631d356af0b 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -32,4 +32,6 @@ GLOBAL_PROTECT(IClog)
GLOBAL_LIST_EMPTY(OOClog)
GLOBAL_PROTECT(OOClog)
+GLOBAL_DATUM_INIT(logging, /datum/logging, new /datum/logging())
+
GLOBAL_LIST_INIT(investigate_log_subjects, list("notes", "watchlist", "hrefs"))
diff --git a/code/datums/log_viewer.dm b/code/datums/log_viewer.dm
index 5084feb1a9f..aafaccf0f14 100644
--- a/code/datums/log_viewer.dm
+++ b/code/datums/log_viewer.dm
@@ -36,7 +36,7 @@ if(!result || result.ckey != __ckey){\
for(var/ckey in ckeys)
for(var/log_type in selected_log_types)
- var/list/logs = SSlogging.get_logs_by_type(ckey, log_type)
+ var/list/logs = GLOB.logging.get_logs_by_type(ckey, log_type)
var/len_logs = length(logs)
if(len_logs)
var/start_index = get_earliest_log_index(logs)
@@ -237,7 +237,7 @@ if(!result || result.ckey != __ckey){\
A.on_close(CALLBACK(src, .proc/add_mob, usr))
return
if(href_list["add_ckey"])
- var/list/ckeys = SSlogging.get_ckeys_logged()
+ var/list/ckeys = GLOB.logging.get_ckeys_logged()
var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a ckey: ", ckeys)
A.on_close(CALLBACK(src, .proc/add_ckey, usr))
return
diff --git a/code/controllers/subsystem/logging.dm b/code/datums/logging.dm
similarity index 63%
rename from code/controllers/subsystem/logging.dm
rename to code/datums/logging.dm
index 916cc509629..3c6a6a8e9e0 100644
--- a/code/controllers/subsystem/logging.dm
+++ b/code/datums/logging.dm
@@ -1,12 +1,9 @@
-SUBSYSTEM_DEF(logging)
- name = "Logging"
- priority = INIT_ORDER_LOGGING
- flags = SS_NO_FIRE
+/datum/logging
var/list/datum/log_record/logs = list() // Assoc list of assoc lists (ckey, (log_type, list/logs))
-/datum/controller/subsystem/logging/proc/add_log(ckey, datum/log_record/log)
+/datum/logging/proc/add_log(ckey, datum/log_record/log)
if(!ckey)
- log_debug("SSLogging.add_log called with an invalid ckey")
+ log_debug("GLOB.logging.add_log called with an invalid ckey")
return
if(!logs[ckey])
@@ -20,7 +17,7 @@ SUBSYSTEM_DEF(logging)
var/list/datum/log_record/log_records = log_types_list[log.log_type]
log_records.Add(log)
-/datum/controller/subsystem/logging/proc/get_ckeys_logged()
+/datum/logging/proc/get_ckeys_logged()
var/list/ckeys = list()
for(var/ckey in logs)
ckeys.Add(ckey)
@@ -29,12 +26,12 @@ SUBSYSTEM_DEF(logging)
/* Returns the logs of a given ckey and log_type
* If no logs exist it will return an empty list
*/
-/datum/controller/subsystem/logging/proc/get_logs_by_type(ckey, log_type)
+/datum/logging/proc/get_logs_by_type(ckey, log_type)
if(!ckey)
- log_debug("SSLogging.get_logs_by_type called with an invalid ckey")
+ log_debug("GLOB.logging.get_logs_by_type called with an invalid ckey")
return
if(!log_type || !(log_type in ALL_LOGS))
- log_debug("SSLogging.get_logs_by_type called with an invalid log_type '[log_type]'")
+ log_debug("GLOB.logging.get_logs_by_type called with an invalid log_type '[log_type]'")
return
var/list/log_types_list = logs[ckey]
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 33bef79fba1..49a4351d6cf 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1272,7 +1272,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
if(ckey[1] == "@") // Admin aghosting will do this
real_ckey = copytext(ckey, 2)
var/datum/log_record/record = new(log_type, src, what, target, where, world.time)
- SSlogging.add_log(real_ckey, record)
+ GLOB.logging.add_log(real_ckey, record)
/proc/create_log_in_list(list/target, text, collapse = TRUE, last_log)//forgive me code gods for this shitcode proc
//this proc enables lovely stuff like an attack log that looks like this: "[18:20:29-18:20:45]21x John Smith attacked Andrew Jackson with a crowbar."
diff --git a/paradise.dme b/paradise.dme
index 9ce3187a1d9..f07289a2a42 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -226,7 +226,6 @@
#include "code\controllers\subsystem\ipintel.dm"
#include "code\controllers\subsystem\jobs.dm"
#include "code\controllers\subsystem\lighting.dm"
-#include "code\controllers\subsystem\logging.dm"
#include "code\controllers\subsystem\machinery.dm"
#include "code\controllers\subsystem\mapping.dm"
#include "code\controllers\subsystem\medals.dm"
@@ -267,6 +266,7 @@
#include "code\datums\hud.dm"
#include "code\datums\log_record.dm"
#include "code\datums\log_viewer.dm"
+#include "code\datums\logging.dm"
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"
#include "code\datums\mutable_appearance.dm"
From 562d3525776d1af7a3d83cc171502b803ce43fde Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Fri, 3 Apr 2020 18:02:10 +0200
Subject: [PATCH 09/94] dead chat -> deadchat. OOC logging. Logtypes order
---
code/__DEFINES/logs.dm | 5 +++--
code/datums/log_viewer.dm | 4 +++-
code/game/verbs/ooc.dm | 1 +
code/modules/mob/say.dm | 2 +-
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/code/__DEFINES/logs.dm b/code/__DEFINES/logs.dm
index 5fd66c88f4a..9374e75a454 100644
--- a/code/__DEFINES/logs.dm
+++ b/code/__DEFINES/logs.dm
@@ -4,6 +4,7 @@
#define SAY_LOG "Say"
#define EMOTE_LOG "Emote"
#define MISC_LOG "Misc"
-#define DEAD_CHAT_LOG "Dead chat"
+#define DEADCHAT_LOG "Deadchat"
+#define OOC_LOG "OOC"
-#define ALL_LOGS list(ATTACK_LOG, DEFENSE_LOG, CONVERSION_LOG, SAY_LOG, EMOTE_LOG, MISC_LOG, DEAD_CHAT_LOG)
+#define ALL_LOGS list(ATTACK_LOG, DEFENSE_LOG, CONVERSION_LOG, SAY_LOG, EMOTE_LOG, DEADCHAT_LOG, OOC_LOG, MISC_LOG)
diff --git a/code/datums/log_viewer.dm b/code/datums/log_viewer.dm
index aafaccf0f14..0df7efb7921 100644
--- a/code/datums/log_viewer.dm
+++ b/code/datums/log_viewer.dm
@@ -274,8 +274,10 @@ if(!result || result.ckey != __ckey){\
return "deepskyblue"
if(MISC_LOG)
return "gray"
- if(DEAD_CHAT_LOG)
+ if(DEADCHAT_LOG)
return "#cc00c6"
+ if(OOC_LOG)
+ return "#002eb8"
return "slategray"
/datum/log_viewer/proc/get_display_name(mob/M)
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 824159487eb..29ad752b3ce 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -53,6 +53,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00")
return
log_ooc(msg, src)
+ mob.create_log(OOC_LOG, msg)
var/display_colour = GLOB.normal_ooc_colour
if(holder && !holder.fakekey)
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 87446bcf79e..49b188a4365 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -55,7 +55,7 @@
return
say_dead_direct("[pick("complains", "moans", "whines", "laments", "blubbers", "salts")], \"[message]\"", src)
- create_log(DEAD_CHAT_LOG, message)
+ create_log(DEADCHAT_LOG, message)
/mob/proc/say_understands(var/mob/other, var/datum/language/speaking = null)
if(stat == DEAD)
From 2c414085e3920990a41286083e7186da32ef10b7 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Sat, 4 Apr 2020 08:46:53 +0200
Subject: [PATCH 10/94] LOOC and OOC
---
code/__DEFINES/logs.dm | 3 ++-
code/datums/log_viewer.dm | 2 ++
code/game/verbs/ooc.dm | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/code/__DEFINES/logs.dm b/code/__DEFINES/logs.dm
index 9374e75a454..96fac582283 100644
--- a/code/__DEFINES/logs.dm
+++ b/code/__DEFINES/logs.dm
@@ -6,5 +6,6 @@
#define MISC_LOG "Misc"
#define DEADCHAT_LOG "Deadchat"
#define OOC_LOG "OOC"
+#define LOOC_LOG "LOOC"
-#define ALL_LOGS list(ATTACK_LOG, DEFENSE_LOG, CONVERSION_LOG, SAY_LOG, EMOTE_LOG, DEADCHAT_LOG, OOC_LOG, MISC_LOG)
+#define ALL_LOGS list(ATTACK_LOG, DEFENSE_LOG, CONVERSION_LOG, SAY_LOG, EMOTE_LOG, DEADCHAT_LOG, OOC_LOG, LOOC_LOG, MISC_LOG)
diff --git a/code/datums/log_viewer.dm b/code/datums/log_viewer.dm
index 0df7efb7921..53d330b391d 100644
--- a/code/datums/log_viewer.dm
+++ b/code/datums/log_viewer.dm
@@ -278,6 +278,8 @@ if(!result || result.ckey != __ckey){\
return "#cc00c6"
if(OOC_LOG)
return "#002eb8"
+ if(LOOC_LOG)
+ return "#6699CC"
return "slategray"
/datum/log_viewer/proc/get_display_name(mob/M)
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 29ad752b3ce..fe2d2e836ae 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -206,7 +206,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00")
return
log_looc(msg, src)
-
+ mob.create_log(LOOC_LOG, msg)
var/mob/source = mob.get_looc_source()
var/list/heard = get_mobs_in_view(7, source)
From 112baa534ea3dcc317c3f083af05a0c5b15c87bc Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sun, 26 Apr 2020 17:59:54 -0700
Subject: [PATCH 11/94] ID computer demote/termination slot freedom, logging
and upgrades
---
code/controllers/subsystem/jobs.dm | 26 +++++++++++++++++
code/game/machinery/computer/card.dm | 28 +++++++++++++-----
code/game/machinery/doors/brigdoors.dm | 29 ++-----------------
code/game/objects/items/weapons/cards_ids.dm | 5 ++++
.../file_system/programs/command/card.dm | 11 +++++--
5 files changed, 63 insertions(+), 36 deletions(-)
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index 6f7894ca428..41451ba8b61 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -642,6 +642,32 @@ SUBSYSTEM_DEF(jobs)
oldjobdatum.current_positions--
newjobdatum.current_positions++
+/datum/controller/subsystem/jobs/proc/force_free_slot(oldtitle)
+ // Used when a crew ID is demoted/terminated in an ID computer.
+ var/datum/job/oldjobdatum = SSjobs.GetJob(oldtitle)
+ if(istype(oldjobdatum) && oldjobdatum.current_positions > 0)
+ oldjobdatum.current_positions--
+
+/datum/controller/subsystem/jobs/proc/notify_dept_head(jobtitle, antext)
+ // Used to notify the department head of jobtitle X that their employee was brigged, demoted or terminated
+ if(!jobtitle || !antext)
+ return
+ var/datum/job/tgt_job = GetJob(jobtitle)
+ if(!tgt_job)
+ return
+ if(!tgt_job.department_head[1])
+ return
+ var/boss_title = tgt_job.department_head[1]
+ var/obj/item/pda/target_pda
+ for(var/obj/item/pda/check_pda in GLOB.PDAs)
+ if(check_pda.ownrank == boss_title)
+ target_pda = check_pda
+ if(!target_pda)
+ return
+ var/datum/data/pda/app/messenger/PM = target_pda.find_program(/datum/data/pda/app/messenger)
+ if(PM && PM.can_receive())
+ PM.notify("Automated Notification: \"[antext]\" (Unable to Reply)")
+
/datum/controller/subsystem/jobs/proc/fetch_transfer_record_html(var/centcom)
var/record_html = ""
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 40005f8fd12..4920c3a7183 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -464,6 +464,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(is_authenticated(usr) && !target_dept)
var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE)
if(delcount)
+ message_admins("[key_name_admin(usr)] has wiped all ID computer logs.")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
SSnanoui.update_uis(src)
@@ -503,9 +504,17 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("terminate")
if(is_authenticated(usr) && !target_dept)
var/jobnamedata = modify.getRankAndAssignment()
- log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".")
- message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".")
+ var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.","Employment Termination"),1,MAX_MESSAGE_LEN))
+ if(!reason || !is_authenticated(usr) || !modify)
+ return 0
+ var/m_ckey = modify.getPlayerCkey()
+ var/m_ckey_text = m_ckey ? "([m_ckey])" : "(no ckey)"
+ log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
+ message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
+ if(modify.owner_uid)
+ SSjobs.force_free_slot(modify.rank)
+ SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
modify.access = list()
@@ -517,16 +526,21 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(!job_in_department(SSjobs.GetJob(modify.rank), FALSE))
visible_message("[src]: Heads may only demote members of their own department.")
return 0
-
+ var/reason = sanitize(copytext(input("Enter legal reason for demotion. Enter nothing to cancel.","Legal Demotion"),1,MAX_MESSAGE_LEN))
+ if(!reason || !is_authenticated(usr) || !modify)
+ return 0
var/list/access = list()
var/datum/job/jobdatum = new /datum/job/civilian
access = jobdatum.get_access()
-
var/jobnamedata = modify.getRankAndAssignment()
- log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Demoted)\".")
- message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Demoted)\".")
+ var/m_ckey = modify.getPlayerCkey()
+ var/m_ckey_text = m_ckey ? "([m_ckey])" : "(no ckey)"
+ log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
+ message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Demoted", scan.registered_name)
-
+ if(modify.owner_uid)
+ SSjobs.force_free_slot(modify.rank)
+ SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.access = access
modify.rank = "Civilian"
modify.assignment = "Demoted"
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 29549a05630..0850b5a4b45 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -86,8 +86,8 @@
Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]"
Radio.autosay(announcetext, name, "Security", list(z))
- if(prisoner_trank != "unknown")
- notify_dept_head(prisoner_trank, announcetext)
+ if(prisoner_trank != "unknown" && prisoner_trank != "Civilian")
+ SSjobs.notify_dept_head(prisoner_trank, announcetext)
if(R)
prisoner = R
@@ -103,31 +103,6 @@
update_all_mob_security_hud()
return 1
-
-/obj/machinery/door_timer/proc/notify_dept_head(jobtitle, antext)
- if(!jobtitle || !antext)
- return
- if(jobtitle == "Civilian")
- // Don't notify the HoP about greytiding civilians
- return
- var/datum/job/brigged_job = SSjobs.GetJob(jobtitle)
- if(!brigged_job)
- return
- if(!brigged_job.department_head[1])
- return
- var/boss_title = brigged_job.department_head[1]
-
- var/obj/item/pda/target_pda
- for(var/obj/item/pda/check_pda in GLOB.PDAs)
- if(check_pda.ownrank == boss_title)
- target_pda = check_pda
- if(!target_pda)
- return
- var/datum/data/pda/app/messenger/PM = target_pda.find_program(/datum/data/pda/app/messenger)
- if(PM && PM.can_receive())
- PM.notify("Message from Brig Timer (Automated), \"[antext]\" (Unable to Reply)")
-
-
/obj/machinery/door_timer/Initialize()
..()
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 405ce47a033..86f36513a2e 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -212,6 +212,11 @@
return M
owner_ckey = null
+/obj/item/card/id/proc/getPlayerCkey()
+ var/mob/living/carbon/human/H = getPlayer()
+ if(istype(H))
+ return H.ckey
+
/obj/item/card/id/proc/is_untrackable()
return untrackable
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 9067a345d4e..f440e3ad214 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -289,6 +289,7 @@
if(is_authenticated(usr))
var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE)
if(delcount)
+ message_admins("[key_name_admin(usr)] has wiped all ID computer logs.")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("PRG_print")
@@ -330,9 +331,15 @@
if("PRG_terminate")
if(is_authenticated(usr))
var/jobnamedata = modify.getRankAndAssignment()
- log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".")
- message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".")
+ var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.","Employment Termination"),1,MAX_MESSAGE_LEN))
+ if(!reason || !is_authenticated(usr) || !modify)
+ return
+ log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
+ message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
+ if(modify.owner_uid)
+ SSjobs.force_free_slot(modify.rank)
+ SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
modify.access = list()
From 4d47a99c4c2f24dfcd7b21fff79b08164f80c8d1 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 28 Apr 2020 16:29:53 -0700
Subject: [PATCH 12/94] removes change that freed job slot when an original
card is demoted/terminated
---
code/controllers/subsystem/jobs.dm | 6 ------
code/game/machinery/computer/card.dm | 4 ----
.../modular_computers/file_system/programs/command/card.dm | 2 --
3 files changed, 12 deletions(-)
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index 41451ba8b61..96b0d0ff226 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -642,12 +642,6 @@ SUBSYSTEM_DEF(jobs)
oldjobdatum.current_positions--
newjobdatum.current_positions++
-/datum/controller/subsystem/jobs/proc/force_free_slot(oldtitle)
- // Used when a crew ID is demoted/terminated in an ID computer.
- var/datum/job/oldjobdatum = SSjobs.GetJob(oldtitle)
- if(istype(oldjobdatum) && oldjobdatum.current_positions > 0)
- oldjobdatum.current_positions--
-
/datum/controller/subsystem/jobs/proc/notify_dept_head(jobtitle, antext)
// Used to notify the department head of jobtitle X that their employee was brigged, demoted or terminated
if(!jobtitle || !antext)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 4920c3a7183..981de67bcb9 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -512,8 +512,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
- if(modify.owner_uid)
- SSjobs.force_free_slot(modify.rank)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
modify.access = list()
@@ -538,8 +536,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Demoted", scan.registered_name)
- if(modify.owner_uid)
- SSjobs.force_free_slot(modify.rank)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.access = access
modify.rank = "Civilian"
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index f440e3ad214..e94240a1931 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -337,8 +337,6 @@
log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
- if(modify.owner_uid)
- SSjobs.force_free_slot(modify.rank)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
modify.access = list()
From 22db923496719d15a033d6a3797f25e706849eea Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 28 Apr 2020 17:04:39 -0700
Subject: [PATCH 13/94] allow numbers in names, replacement cards for IPCs
---
code/game/machinery/computer/card.dm | 2 +-
.../modular_computers/file_system/programs/command/card.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 981de67bcb9..6dc93c86c15 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -435,7 +435,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(is_authenticated(usr) && !target_dept)
var/t2 = modify
if((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
- var/temp_name = reject_bad_name(href_list["reg"])
+ var/temp_name = reject_bad_name(href_list["reg"], 1)
if(temp_name)
modify.registered_name = temp_name
else
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index e94240a1931..609bb6cf9fb 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -265,7 +265,7 @@
if("PRG_reg")
if(is_authenticated(usr))
- var/temp_name = reject_bad_name(href_list["reg"])
+ var/temp_name = reject_bad_name(href_list["reg"], 1)
if(temp_name)
modify.registered_name = temp_name
else
From a18b342e857b6de569f5daca6d4378cf0a53a5aa Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 12 May 2020 13:53:28 -0700
Subject: [PATCH 14/94] slot freeing only applies to original crew IDs
---
code/game/machinery/computer/card.dm | 3 ++-
.../modular_computers/file_system/programs/command/card.dm | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 6dc93c86c15..07c74e89bf5 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -418,7 +418,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
message_admins("[key_name_admin(usr)] has reassigned \"[modify.registered_name]\" from \"[jobnamedata]\" to \"[t1]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, t1, scan.registered_name)
- SSjobs.slot_job_transfer(modify.rank, t1)
+ if(modify.owner_uid)
+ SSjobs.slot_job_transfer(modify.rank, t1)
var/mob/living/carbon/human/H = modify.getPlayer()
if(istype(H))
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 609bb6cf9fb..0ec75c6d74e 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -250,7 +250,8 @@
message_admins("[key_name_admin(usr)] has reassigned \"[modify.registered_name]\" from \"[jobnamedata]\" to \"[t1]\".")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, t1, scan.registered_name)
- SSjobs.slot_job_transfer(modify.rank, t1)
+ if(modify.owner_uid)
+ SSjobs.slot_job_transfer(modify.rank, t1)
var/mob/living/carbon/human/H = modify.getPlayer()
if(istype(H))
From eba1f6446f6c0d0abd77204be345d5ab38543f95 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Mon, 25 May 2020 16:08:23 -0700
Subject: [PATCH 15/94] Fixes #13494
---
code/game/machinery/computer/card.dm | 2 +-
.../modular_computers/file_system/programs/command/card.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 07c74e89bf5..752deea9c11 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -389,7 +389,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(!job_in_department(SSjobs.GetJob(t1)))
return 0
if(t1 == "Custom")
- var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN))
+ var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN), 1))
//let custom jobs function as an impromptu alt title, mainly for sechuds
if(temp_t && modify)
SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name)
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 0ec75c6d74e..6d8cece1615 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -221,7 +221,7 @@
if(is_authenticated(usr) && modify)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
- var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN))
+ var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.","Assignment"), 1, MAX_MESSAGE_LEN), 1))
//let custom jobs function as an impromptu alt title, mainly for sechuds
if(temp_t && modify)
SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name)
From 346a8c8020b1449b200802f24f73907312577be7 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Sun, 7 Jun 2020 00:56:43 +0200
Subject: [PATCH 16/94] Ticket conversion possible + refactor
---
.../subsystem/tickets/mentor_tickets.dm | 15 +++--
code/controllers/subsystem/tickets/tickets.dm | 57 ++++++++++++++-----
code/modules/admin/topic.dm | 6 ++
code/modules/admin/verbs/adminhelp.dm | 20 ++++---
4 files changed, 71 insertions(+), 27 deletions(-)
diff --git a/code/controllers/subsystem/tickets/mentor_tickets.dm b/code/controllers/subsystem/tickets/mentor_tickets.dm
index d8bae77840c..983d24c79d1 100644
--- a/code/controllers/subsystem/tickets/mentor_tickets.dm
+++ b/code/controllers/subsystem/tickets/mentor_tickets.dm
@@ -9,13 +9,18 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
ticket_system_name = "Mentor Tickets"
ticket_name = "Mentor Ticket"
span_class = "mentorhelp"
+ other_ticket_name = "Admin"
close_rights = R_MENTOR | R_ADMIN
-
-/datum/controller/subsystem/tickets/mentor_tickets/message_staff(var/msg)
- message_mentorTicket(msg)
+ rights_needed = R_MENTOR | R_ADMIN | R_MOD
/datum/controller/subsystem/tickets/mentor_tickets/Initialize()
- close_messages = list("- [ticket_name] Closed -",
- "Please try to be as descriptive as possible in mentor helps. Mentors do not know the full situation you're in and need more information to give you a helpful response.",
+ close_messages = list("- [ticket_name] Closed -",
+ "Please try to be as descriptive as possible in mentor helps. Mentors do not know the full situation you're in and need more information to give you a helpful response.",
"Your [ticket_name] has now been closed.")
return ..()
+
+/datum/controller/subsystem/tickets/mentor_tickets/message_staff(msg)
+ message_mentorTicket(msg)
+
+/datum/controller/subsystem/tickets/mentor_tickets/create_other_system_ticket(datum/ticket/T)
+ SStickets.newTicket(T.clientName, T.content, T.title)
diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm
index 058569250ec..0ce05d0532c 100644
--- a/code/controllers/subsystem/tickets/tickets.dm
+++ b/code/controllers/subsystem/tickets/tickets.dm
@@ -12,24 +12,26 @@
SUBSYSTEM_DEF(tickets)
name = "Admin Tickets"
+ init_order = INIT_ORDER_TICKETS
+ wait = 300
+ priority = FIRE_PRIORITY_TICKETS
+ flags = SS_BACKGROUND
+
var/span_class = "adminticket"
var/ticket_system_name = "Admin Tickets"
var/ticket_name = "Admin Ticket"
var/close_rights = R_ADMIN
+ var/rights_needed = R_ADMIN | R_MOD
+ var/other_ticket_name = "Mentor"
var/list/close_messages
- init_order = INIT_ORDER_TICKETS
- wait = 300
- priority = FIRE_PRIORITY_TICKETS
-
- flags = SS_BACKGROUND
-
+
var/list/allTickets = list() //make it here because someone might ahelp before the system has initialized
var/ticketCounter = 1
/datum/controller/subsystem/tickets/Initialize()
close_messages = list("- [ticket_name] Rejected! -",
- "Please try to be calm, clear, and descriptive in admin helps, do not assume the staff member has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.",
+ "Please try to be calm, clear, and descriptive in admin helps, do not assume the staff member has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.",
"Your [ticket_name] has now been closed.")
return ..()
@@ -112,10 +114,28 @@ SUBSYSTEM_DEF(tickets)
message_staff("[usr.client] / ([usr]) resolved [ticket_name] number [N]")
to_chat_safe(returnClient(N), "Your [ticket_name] has now been resolved.")
return TRUE
-
+
+/datum/controller/subsystem/tickets/proc/convert_to_other_ticket(ticketId)
+ if(!check_rights(rights_needed))
+ return
+ if(alert("Are you sure to convert this ticket to an '[other_ticket_name]' ticket?",,"Yes","No") != "Yes")
+ return
+ var/datum/ticket/T = allTickets[ticketId]
+ convert_ticket(T)
+
+/datum/controller/subsystem/tickets/proc/convert_ticket(datum/ticket/T)
+ T.ticketState = TICKET_CLOSED
+ var/client/C = usr.client
+ to_chat_safe(T.clientName, "[key_name_hidden(C)] has converted your ticket to a [other_ticket_name] ticket. Staff has been informed and will when able.")
+ message_staff("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
+ log_game("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
+ create_other_system_ticket(T)
+
+/datum/controller/subsystem/tickets/proc/create_other_system_ticket(datum/ticket/T)
+ SSmentor_tickets.newTicket(T.clientName, T.content, T.title)
/datum/controller/subsystem/tickets/proc/autoRespond(N)
- if(!check_rights(R_ADMIN|R_MOD))
+ if(!check_rights(rights_needed))
return
var/datum/ticket/T = allTickets[N]
@@ -124,8 +144,8 @@ SUBSYSTEM_DEF(tickets)
if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Another admin appears to already be handling this." : "This ticket is already marked as closed or resolved"] Are you sure you want to continue?", "Confirmation", "Yes", "No") != "Yes")
return
T.assignStaff(C)
-
- var/response_phrases = list("Thanks" = "Thanks, have a Paradise day!",
+
+ var/response_phrases = list("Thanks" = "Thanks, have a Paradise day!",
"Handling It" = "The issue is being looked into, thanks.",
"Already Resolved" = "The problem has been resolved already.",
"Mentorhelp" = "Please redirect your question to Mentorhelp, as they are better experienced with these types of questions.",
@@ -136,7 +156,7 @@ SUBSYSTEM_DEF(tickets)
"Man Up" = "Man Up",
"Appeal on the Forums" = "Appealing a ban must occur on the forums. Privately messaging, or adminhelping about your ban will not resolve it. To appeal your ban, please head to [config.banappeals]"
)
-
+
var/sorted_responses = list()
for(var/key in response_phrases) //build a new list based on the short descriptive keys of the master list so we can send this as the input instead of the full paragraphs to the admin choosing which autoresponse
sorted_responses += key
@@ -156,14 +176,17 @@ SUBSYSTEM_DEF(tickets)
resolveTicket(N)
message_staff("[C] has auto responded to [T.clientName]\'s adminhelp with: [message_key] ")
log_game("[C] has auto responded to [T.clientName]\'s adminhelp with: [response_phrases[message_key]]")
+ if("Mentorhelp")
+ convert_ticket(T)
else
var/msg_sound = sound('sound/effects/adminhelp.ogg')
SEND_SOUND(returnClient(N), msg_sound)
- to_chat(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
+ to_chat_safe(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
message_staff("[C] has auto responded to [T.clientName]\'s adminhelp with: [message_key] ") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key
T.lastStaffResponse = "Autoresponse: [message_key]"
resolveTicket(N)
log_game("[C] has auto responded to [T.clientName]\'s adminhelp with: [response_phrases[message_key]]")
+
//Set ticket state with key N to closed
/datum/controller/subsystem/tickets/proc/closeTicket(N)
var/datum/ticket/T = allTickets[N]
@@ -351,7 +374,7 @@ UI STUFF
dat += "| [T.content[i]] |
"
dat += "
"
- dat += "Re-Open[check_rights(R_ADMIN|R_MOD, 0) ? "Auto": ""]Resolve
"
+ dat += "Re-Open[check_rights(rights_needed, 0) ? "Auto": ""]Resolve
"
if(!T.staffAssigned)
dat += "No staff member assigned to this [ticket_name] - Take Ticket
"
@@ -366,6 +389,7 @@ UI STUFF
dat += "
"
dat += "Close Ticket"
+ dat += "Convert Ticket"
var/datum/browser/popup = new(user, "[ticket_system_name]detail", "[ticket_system_name] #[T.ticketNum]", 1000, 600)
popup.set_content(dat)
@@ -447,7 +471,6 @@ UI STUFF
return
if(closeTicket(indexNum))
showDetailUI(usr, indexNum)
-
if(href_list["detailreopen"])
var/indexNum = text2num(href_list["detailreopen"])
@@ -468,6 +491,10 @@ UI STUFF
var/indexNum = text2num(href_list["autorespond"])
autoRespond(indexNum)
+ if(href_list["convert_ticket"])
+ var/indexNum = text2num(href_list["convert_ticket"])
+ convert_to_other_ticket(indexNum)
+
if(href_list["resolveall"])
if(ticket_system_name == "Mentor Tickets")
usr.client.resolveAllMentorTickets()
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1a040d46e90..64c15ad5c24 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1585,6 +1585,12 @@
return
SStickets.autoRespond(index)
+ if(href_list["convert_ticket"])
+ var/indexNum = text2num(href_list["convert_ticket"])
+ if(href_list["is_mhelp"])
+ SSmentor_tickets.convert_to_other_ticket(indexNum)
+ else
+ SStickets.convert_to_other_ticket(indexNum)
else if(href_list["cult_nextobj"])
if(alert(usr, "Validate the current Cult objective and unlock the next one?", "Cult Cheat Code", "Yes", "No") != "Yes")
return
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 8ac9c4fd2b0..b64492439cf 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -125,22 +125,28 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown","the","a","an","of","mo
ticketNum = T.ticketNum // ticketNum is the number of their ticket.
T.addResponse(src, msg)
- msg = "[span][selected_type]: [key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_TP(mob,"TP")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (TICKET) [ai_found ? "(CL)" : ""] (TAKE) (RESOLVE) [isMhelp ? "" : "(AUTO)"] : [span][msg]"
+ var/finalised_msg = "[span][selected_type]: [key_name(src, TRUE, selected_type)] "
+ finalised_msg += "([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_TP(mob,"TP")]) ([ADMIN_SM(mob,"SM")]) "
+ finalised_msg += "([admin_jump_link(mob)]) (TICKET) "
+ finalised_msg += "[ai_found ? "(CL)" : ""] (TAKE) "
+ finalised_msg += "(RESOLVE) [isMhelp ? "" : "(AUTO)"] "
+ finalised_msg += "(CONVERT) : [span][msg]"
+
if(isMhelp)
//Open a new adminticket and inform the user.
- SSmentor_tickets.newTicket(src, prunedmsg, msg)
+ SSmentor_tickets.newTicket(src, prunedmsg, finalised_msg)
for(var/client/X in mentorholders + modholders + adminholders)
if(X.prefs.sound & SOUND_MENTORHELP)
- X << 'sound/effects/adminhelp.ogg'
- to_chat(X, msg)
+ SEND_SOUND(X, 'sound/effects/adminhelp.ogg')
+ to_chat(X, finalised_msg)
else //Ahelp
//Open a new adminticket and inform the user.
- SStickets.newTicket(src, prunedmsg, msg)
+ SStickets.newTicket(src, prunedmsg, finalised_msg)
for(var/client/X in modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(X, 'sound/effects/adminhelp.ogg')
window_flash(X)
- to_chat(X, msg)
+ to_chat(X, finalised_msg)
From 3ee0026f90595fc1f98f443a1980496b9f1f5936 Mon Sep 17 00:00:00 2001
From: joep van der velden
Date: Sun, 7 Jun 2020 01:07:21 +0200
Subject: [PATCH 17/94] Message change
---
code/controllers/subsystem/tickets/tickets.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm
index 0ce05d0532c..11f205f2735 100644
--- a/code/controllers/subsystem/tickets/tickets.dm
+++ b/code/controllers/subsystem/tickets/tickets.dm
@@ -126,7 +126,8 @@ SUBSYSTEM_DEF(tickets)
/datum/controller/subsystem/tickets/proc/convert_ticket(datum/ticket/T)
T.ticketState = TICKET_CLOSED
var/client/C = usr.client
- to_chat_safe(T.clientName, "[key_name_hidden(C)] has converted your ticket to a [other_ticket_name] ticket. Staff has been informed and will when able.")
+ to_chat_safe(T.clientName, list("[key_name_hidden(C)] has converted your ticket to a [other_ticket_name] ticket.",\
+ "Be sure to use the correct type of help next time!"))
message_staff("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
log_game("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
create_other_system_ticket(T)
From 6e6414071a9ee93a064125c1723a38b1e9352dcf Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sat, 13 Jun 2020 00:09:55 -0700
Subject: [PATCH 18/94] spacing, true/false
---
code/game/machinery/computer/card.dm | 2 +-
.../modular_computers/file_system/programs/command/card.dm | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 752deea9c11..f47e9308f39 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -389,7 +389,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(!job_in_department(SSjobs.GetJob(t1)))
return 0
if(t1 == "Custom")
- var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN), 1))
+ var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.", "Assignment"), 1, MAX_MESSAGE_LEN), TRUE))
//let custom jobs function as an impromptu alt title, mainly for sechuds
if(temp_t && modify)
SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name)
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 6d8cece1615..564dfb89909 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -221,7 +221,7 @@
if(is_authenticated(usr) && modify)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
- var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.","Assignment"), 1, MAX_MESSAGE_LEN), 1))
+ var/temp_t = sanitize(reject_bad_name(copytext(input("Enter a custom job assignment.", "Assignment"), 1, MAX_MESSAGE_LEN), TRUE))
//let custom jobs function as an impromptu alt title, mainly for sechuds
if(temp_t && modify)
SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name)
@@ -266,7 +266,7 @@
if("PRG_reg")
if(is_authenticated(usr))
- var/temp_name = reject_bad_name(href_list["reg"], 1)
+ var/temp_name = reject_bad_name(href_list["reg"], TRUE)
if(temp_name)
modify.registered_name = temp_name
else
@@ -332,7 +332,7 @@
if("PRG_terminate")
if(is_authenticated(usr))
var/jobnamedata = modify.getRankAndAssignment()
- var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.","Employment Termination"),1,MAX_MESSAGE_LEN))
+ var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.", "Employment Termination"), 1, MAX_MESSAGE_LEN))
if(!reason || !is_authenticated(usr) || !modify)
return
log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
From e95bf0ae411b9a89000404a9b3c88932798c098c Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sat, 13 Jun 2020 00:15:48 -0700
Subject: [PATCH 19/94] spacing and logs II
---
code/game/machinery/computer/card.dm | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index f47e9308f39..4468d155160 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -436,7 +436,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(is_authenticated(usr) && !target_dept)
var/t2 = modify
if((modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
- var/temp_name = reject_bad_name(href_list["reg"], 1)
+ var/temp_name = reject_bad_name(href_list["reg"], TRUE)
if(temp_name)
modify.registered_name = temp_name
else
@@ -466,6 +466,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE)
if(delcount)
message_admins("[key_name_admin(usr)] has wiped all ID computer logs.")
+ usr.create_log(MISC_LOG, "wiped all ID computer logs.")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
SSnanoui.update_uis(src)
@@ -505,13 +506,14 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("terminate")
if(is_authenticated(usr) && !target_dept)
var/jobnamedata = modify.getRankAndAssignment()
- var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.","Employment Termination"),1,MAX_MESSAGE_LEN))
+ var/reason = sanitize(copytext(input("Enter legal reason for termination. Enter nothing to cancel.", "Employment Termination"), 1, MAX_MESSAGE_LEN))
if(!reason || !is_authenticated(usr) || !modify)
- return 0
+ return FALSE
var/m_ckey = modify.getPlayerCkey()
var/m_ckey_text = m_ckey ? "([m_ckey])" : "(no ckey)"
log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\" for: \"[reason]\".")
+ usr.create_log(MISC_LOG, "terminated the employment of \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\"")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
@@ -536,6 +538,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/m_ckey_text = m_ckey ? "([m_ckey])" : "(no ckey)"
log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" [m_ckey_text] to \"Civilian (Demoted)\" for: \"[reason]\".")
+ usr.create_log(MISC_LOG, "demoted \"[modify.registered_name]\" [m_ckey_text] the \"[jobnamedata]\"")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Demoted", scan.registered_name)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.access = access
From 0180b1724a5592116ea0218f2f06fe48e6e77dab Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sat, 13 Jun 2020 00:18:49 -0700
Subject: [PATCH 20/94] more logging
---
.../modular_computers/file_system/programs/command/card.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index 564dfb89909..2f94f2d293b 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -291,6 +291,7 @@
var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE)
if(delcount)
message_admins("[key_name_admin(usr)] has wiped all ID computer logs.")
+ usr.create_log(MISC_LOG, "wiped all ID computer logs.")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("PRG_print")
@@ -337,6 +338,7 @@
return
log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for: \"[reason]\".")
+ usr.create_log(MISC_LOG, "terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\"")
SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name)
SSjobs.notify_dept_head(modify.rank, "[scan.registered_name] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\" for \"[reason]\".")
modify.assignment = "Terminated"
From 250c05d5b0c2c76475e8fdcc4e825491e9a89c95 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sat, 13 Jun 2020 00:23:34 -0700
Subject: [PATCH 21/94] adds break
---
code/controllers/subsystem/jobs.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index f7b0136d91d..c1a988e670c 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -657,6 +657,7 @@ SUBSYSTEM_DEF(jobs)
for(var/obj/item/pda/check_pda in GLOB.PDAs)
if(check_pda.ownrank == boss_title)
target_pda = check_pda
+ break
if(!target_pda)
return
var/datum/data/pda/app/messenger/PM = target_pda.find_program(/datum/data/pda/app/messenger)
From 13149fa93a4933bee3d30e467ba28735fcc20343 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 11:56:59 -0700
Subject: [PATCH 22/94] Fixes runtimes from moving SSD/AFK people out of
machines
---
code/game/dna/dna_modifier.dm | 3 +++
code/game/machinery/Sleeper.dm | 3 +++
code/game/machinery/cryo.dm | 3 +++
code/game/machinery/cryopod.dm | 7 +++++++
code/game/machinery/machinery.dm | 5 +++++
code/game/machinery/suit_storage_unit.dm | 11 +++++++----
6 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index fb0ccff32cb..d887153c6d5 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -282,6 +282,9 @@
occupant = null
icon_state = "scanner_open"
+/obj/machinery/dna_scannernew/force_eject_occupant()
+ go_out(null, TRUE)
+
/obj/machinery/dna_scannernew/ex_act(severity)
if(occupant)
occupant.ex_act(severity)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index e4d0befa61e..7c5a03e29e6 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -411,6 +411,9 @@
for(var/atom/movable/A in contents - component_parts - list(beaker))
A.forceMove(loc)
+/obj/machinery/sleeper/force_eject_occupant()
+ go_out()
+
/obj/machinery/sleeper/proc/inject_chemical(mob/living/user as mob, chemical, amount)
if(!(chemical in possible_chems))
to_chat(user, "The sleeper does not offer that chemical!")
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 4213ff517bf..8be09ef30b7 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -443,6 +443,9 @@
for(var/atom/movable/A in contents - component_parts - list(beaker))
A.forceMove(get_step(loc, SOUTH))
+/obj/machinery/atmospherics/unary/cryo_cell/force_eject_occupant()
+ go_out()
+
/// Called when either the occupant is dead and the AUTO_EJECT_DEAD flag is present, OR the occupant is alive, has no external damage, and the AUTO_EJECT_HEALTHY flag is present.
/obj/machinery/atmospherics/unary/cryo_cell/proc/auto_eject(eject_flag)
on = FALSE
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 36196ea4eca..e0d53d61505 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -768,9 +768,16 @@
return ..()
+
/proc/cryo_ssd(var/mob/living/carbon/person_to_cryo)
if(istype(person_to_cryo.loc, /obj/machinery/cryopod))
return 0
+ if(istype(person_to_cryo.loc, /obj/mecha))
+ var/obj/mecha/E = person_to_cryo.loc
+ E.go_out()
+ if(istype(person_to_cryo.loc, /obj/machinery))
+ var/obj/machinery/E = person_to_cryo.loc
+ E.force_eject_occupant()
var/list/free_cryopods = list()
for(var/obj/machinery/cryopod/P in GLOB.machines)
if(!P.occupant && istype(get_area(P), /area/crew_quarters/sleep))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index f02e037e8c5..f1f66314dda 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -597,3 +597,8 @@ Class Procs:
. = . % 9
AM.pixel_x = -8 + ((.%3)*8)
AM.pixel_y = -8 + (round( . / 3)*8)
+
+/obj/machinery/proc/force_eject_occupant()
+ // For each subtype of /machinery, this proc handles safely removing occupants from the machine if they must be cryoed due to being SSD/AFK.
+ // In the event that the machinery doesn't have an overriden version of this proc to do it, log a runtime so one can be added.
+ log_runtime(EXCEPTION("Proc force_eject_occupant() is not overriden on a machine containing a mob."), src)
\ No newline at end of file
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index da4df4f8382..98a50d0c69d 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -740,10 +740,11 @@
if(!occupant)
return
- if(user != occupant)
- to_chat(occupant, "The machine kicks you out!")
- if(user.loc != loc)
- to_chat(occupant, "You leave the not-so-cozy confines of the SSU.")
+ if(user)
+ if(user != occupant)
+ to_chat(occupant, "The machine kicks you out!")
+ if(user.loc != loc)
+ to_chat(occupant, "You leave the not-so-cozy confines of the SSU.")
occupant.forceMove(loc)
occupant = null
if(!state_open)
@@ -751,6 +752,8 @@
update_icon()
return
+/obj/machinery/suit_storage_unit/force_eject_occupant()
+ eject_occupant()
/obj/machinery/suit_storage_unit/verb/get_out()
set name = "Eject Suit Storage Unit"
From ef9d5bbe7c77d3536580155de51583071f336ae3 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 12:12:05 -0700
Subject: [PATCH 23/94] refactor
---
code/game/machinery/cryopod.dm | 9 +++------
code/game/machinery/machinery.dm | 5 -----
code/game/objects/objs.dm | 5 +++++
code/game/objects/structures/crates_lockers/closets.dm | 5 +++++
4 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index e0d53d61505..3c33035f2c9 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -772,12 +772,9 @@
/proc/cryo_ssd(var/mob/living/carbon/person_to_cryo)
if(istype(person_to_cryo.loc, /obj/machinery/cryopod))
return 0
- if(istype(person_to_cryo.loc, /obj/mecha))
- var/obj/mecha/E = person_to_cryo.loc
- E.go_out()
- if(istype(person_to_cryo.loc, /obj/machinery))
- var/obj/machinery/E = person_to_cryo.loc
- E.force_eject_occupant()
+ if(istype(person_to_cryo.loc, /obj))
+ var/obj/O = person_to_cryo.loc
+ O.force_eject_occupant()
var/list/free_cryopods = list()
for(var/obj/machinery/cryopod/P in GLOB.machines)
if(!P.occupant && istype(get_area(P), /area/crew_quarters/sleep))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index f1f66314dda..f02e037e8c5 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -597,8 +597,3 @@ Class Procs:
. = . % 9
AM.pixel_x = -8 + ((.%3)*8)
AM.pixel_y = -8 + (round( . / 3)*8)
-
-/obj/machinery/proc/force_eject_occupant()
- // For each subtype of /machinery, this proc handles safely removing occupants from the machine if they must be cryoed due to being SSD/AFK.
- // In the event that the machinery doesn't have an overriden version of this proc to do it, log a runtime so one can be added.
- log_runtime(EXCEPTION("Proc force_eject_occupant() is not overriden on a machine containing a mob."), src)
\ No newline at end of file
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index d40c628ed90..c0802eaa78a 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -351,3 +351,8 @@ a {
/obj/proc/check_uplink_validity()
return TRUE
+
+/obj/proc/force_eject_occupant()
+ // This proc handles safely removing occupants from the object if they must be cryoed due to being SSD/AFK.
+ // In the event that the object doesn't have an overriden version of this proc to do it, log a runtime so one can be added.
+ log_runtime(EXCEPTION("Proc force_eject_occupant() is not overriden on a machine containing a mob."), src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 04373502832..6db1846e872 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -354,6 +354,11 @@
/obj/structure/closet/AllowDrop()
return TRUE
+/obj/structure/closet/force_eject_occupant()
+ // Its okay to silently teleport mobs out of lockers, since the only thing affected is their contents list.
+ return
+
+
/obj/structure/closet/bluespace
name = "bluespace closet"
desc = "A storage unit that moves and stores through the fourth dimension."
From 5cb0288621dc34b46fdb2b4604a0be2399a96067 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 12:35:02 -0700
Subject: [PATCH 24/94] mechs too
---
code/game/mecha/mecha.dm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 52973c9e285..ecdcd7179d0 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1264,6 +1264,9 @@
L.client.RemoveViewMod("mecha")
zoom_mode = FALSE
+/obj/mecha/force_eject_occupant()
+ go_out()
+
/////////////////////////
////// Access stuff /////
/////////////////////////
From f4ac180b69c4b017bdd299c444b9181c490a3329 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 12:35:12 -0700
Subject: [PATCH 25/94] and admin GET
---
code/modules/admin/verbs/adminjump.dm | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index 0c1a8c5f14f..980e5a60e25 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -111,6 +111,10 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
+
+ if(istype(M.loc, /obj))
+ var/obj/O = M.loc
+ O.force_eject_occupant()
admin_forcemove(M, get_turf(usr))
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -135,6 +139,9 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1)
if(M)
+ if(istype(M.loc, /obj))
+ var/obj/O = M.loc
+ O.force_eject_occupant()
admin_forcemove(M, get_turf(usr))
admin_forcemove(usr, M.loc)
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
From 4f49695e961bad27e11a559439ffef41dd51f67f Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 12:43:21 -0700
Subject: [PATCH 26/94] travis newlines
---
code/game/objects/objs.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index c0802eaa78a..19d3ecc8328 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -355,4 +355,5 @@ a {
/obj/proc/force_eject_occupant()
// This proc handles safely removing occupants from the object if they must be cryoed due to being SSD/AFK.
// In the event that the object doesn't have an overriden version of this proc to do it, log a runtime so one can be added.
- log_runtime(EXCEPTION("Proc force_eject_occupant() is not overriden on a machine containing a mob."), src)
\ No newline at end of file
+ log_runtime(EXCEPTION("Proc force_eject_occupant() is not overriden on a machine containing a mob."), src)
+
From bd38053b1f4d35b8169f4ce8fb59e03339909f65 Mon Sep 17 00:00:00 2001
From: TheSardele <46876120+TheSardele@users.noreply.github.com>
Date: Tue, 21 Jul 2020 22:27:54 +0200
Subject: [PATCH 27/94] Changed del to qdel
---
code/modules/admin/topic.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index c3e34898727..e01b6f3ded3 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -913,7 +913,7 @@
log_admin("[key_name(usr)] booted [key_name(C)].")
message_admins("[key_name_admin(usr)] booted [key_name_admin(C)].", 1)
//C = null
- del(C)
+ qdel(C)
//Player Notes
else if(href_list["addnote"])
From 6a442a1b1fd06bdfb42d3bd0ea8e1e06b02ad741 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 19:32:37 -0700
Subject: [PATCH 28/94] v1
---
_maps/map_files/shuttles/emergency_dept.dmm | 2060 +++++++++++--------
1 file changed, 1248 insertions(+), 812 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 739056d20d6..6a90c7ba45c 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -17,81 +17,152 @@
"ad" = (
/turf/space,
/turf/simulated/shuttle/wall{
- tag = "icon-swall_f10";
icon_state = "swall_f10";
dir = 2
},
/area/shuttle/escape)
"ae" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
+/obj/structure/table/reinforced,
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
},
/area/shuttle/escape)
"af" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swallc4"
+/obj/structure/table/reinforced,
+/obj/item/folder/red,
+/obj/item/restraints/handcuffs,
+/obj/item/flash,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
/area/shuttle/escape)
"ag" = (
-/obj/machinery/computer/emergency_shuttle,
-/turf/simulated/shuttle/floor,
+/obj/machinery/computer/robotics,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkblue"
+ },
/area/shuttle/escape)
"ah" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swallc3"
+/obj/machinery/computer/crew,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
},
/area/shuttle/escape)
"ai" = (
-/obj/machinery/computer/station_alert,
-/turf/simulated/shuttle/floor,
+/obj/machinery/computer/emergency_shuttle,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
+ },
/area/shuttle/escape)
"aj" = (
/obj/machinery/computer/communications,
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkblue"
},
-/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ak" = (
-/obj/machinery/computer/security{
- network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
+/obj/structure/table/reinforced,
+/obj/item/storage/fancy/donut_box,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"al" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/cell/high,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
+ },
+/area/shuttle/escape)
+"am" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
+ },
+/area/shuttle/escape)
+"an" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"ao" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"am" = (
-/obj/structure/table,
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"an" = (
-/obj/machinery/computer/crew,
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"ao" = (
-/obj/machinery/computer/robotics,
-/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ap" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/toolbox/mechanical,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
+ },
+/area/shuttle/escape)
+"aq" = (
/turf/simulated/shuttle/wall{
icon_state = "swall3";
dir = 2
},
/area/shuttle/escape)
-"aq" = (
-/turf/simulated/shuttle/floor,
+"ar" = (
+/obj/machinery/computer/security{
+ network = list("SS13","Research Outpost","Mining Outpost","Telecomms")
+ },
+/obj/structure/sign/poster/official/nanotrasen_logo{
+ pixel_x = -32;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkred"
+ },
+/area/shuttle/escape)
+"as" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"at" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 29;
+ pixel_y = -60
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"au" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"av" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
/area/shuttle/escape)
"aw" = (
/turf/simulated/shuttle/wall{
@@ -100,49 +171,258 @@
},
/area/shuttle/escape)
"ax" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swall14";
- dir = 2
+/obj/machinery/computer/station_alert,
+/obj/structure/sign/poster/official/nanotrasen_logo{
+ pixel_x = 32;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkyellow"
},
/area/shuttle/escape)
"ay" = (
-/obj/machinery/door/airlock/command/glass{
- name = "Escape Shuttle Cockpit";
- req_access_txt = "19"
+/obj/machinery/computer/secure_data,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkred"
},
-/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"az" = (
-/obj/structure/chair/comfy/shuttle,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aA" = (
-/obj/machinery/status_display{
- pixel_y = 30
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/obj/structure/chair/comfy/shuttle,
-/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aB" = (
-/obj/structure/grille,
-/obj/structure/window/full/shuttle{
- icon_state = "16"
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
},
-/turf/simulated/floor/plating,
/area/shuttle/escape)
"aC" = (
+/obj/machinery/computer/atmos_alert,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkyellow"
+ },
+/area/shuttle/escape)
+"aD" = (
+/obj/machinery/status_display,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"aE" = (
+/obj/machinery/door/airlock/command/glass{
+ name = "Escape Shuttle Cockpit";
+ normalspeed = 0;
+ req_access_txt = "19"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"aF" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"aG" = (
+/obj/machinery/recharger/wallcharger{
+ pixel_x = 32;
+ pixel_y = 0
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"aH" = (
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"aI" = (
+/obj/machinery/door/airlock/medical/glass{
+ id_tag = null;
+ name = "Escape Shuttle Infirmary";
+ req_access_txt = "0"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"aJ" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/fancy/donut_box,
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"aK" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Escape Shuttle Engineering";
+ req_access_txt = "32";
+ req_one_access_txt = "0"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
+"aL" = (
+/obj/machinery/door/airlock/mining/glass{
+ name = "Escape Shuttle Cargo";
+ req_access_txt = "50"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"aM" = (
+/obj/machinery/door/airlock/medical/glass{
+ name = "Escape Shuttle Medical";
+ req_access_txt = "5"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
+"aN" = (
+/obj/structure/sign/directions/security{
+ dir = 1;
+ pixel_y = 7
+ },
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"aO" = (
+/obj/machinery/door/airlock/research{
+ name = "Escape Shuttle Research";
+ req_access_txt = "47"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/escape)
+"aP" = (
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall7";
+ icon_state = "swall7";
+ dir = 2
+ },
+/area/shuttle/escape)
+"aQ" = (
+/obj/machinery/defibrillator_mount/loaded,
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc4"
+ },
+/area/shuttle/escape)
+"aR" = (
+/turf/simulated/shuttle/wall{
+ dir = 2;
+ icon_state = "swallc1"
+ },
+/area/shuttle/escape)
+"aS" = (
/turf/simulated/floor/plasteel{
icon_state = "cafeteria";
dir = 2
},
/area/shuttle/escape)
-"aD" = (
+"aT" = (
+/obj/item/twohanded/required/kirbyplants,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"aU" = (
+/obj/structure/chair/stool/bar,
+/turf/simulated/floor/plasteel{
+ icon_state = "cafeteria";
+ dir = 2
+ },
+/area/shuttle/escape)
+"aV" = (
+/obj/structure/table/wood,
+/turf/simulated/floor/plasteel{
+ icon_state = "cafeteria";
+ dir = 2
+ },
+/area/shuttle/escape)
+"aW" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Escape Shuttle Brig";
+ req_access_txt = "63"
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"aX" = (
/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"aY" = (
+/turf/simulated/shuttle/wall{
+ dir = 2;
+ icon_state = "swallc3"
+ },
+/area/shuttle/escape)
+"aZ" = (
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall14";
+ icon_state = "swall14";
+ dir = 2
+ },
+/area/shuttle/escape)
+"ba" = (
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"bb" = (
+/obj/structure/sign/greencross,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bc" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"bd" = (
+/obj/item/storage/box/drinkingglasses,
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/structure/table/wood,
+/obj/machinery/light{
+ icon_state = "tube1";
dir = 4
},
/turf/simulated/floor/plasteel{
@@ -150,60 +430,7 @@
dir = 2
},
/area/shuttle/escape)
-"aE" = (
-/obj/structure/table/wood,
-/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
- },
-/area/shuttle/escape)
-"aF" = (
-/obj/machinery/status_display{
- pixel_y = 30
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
- },
-/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
- },
-/area/shuttle/escape)
-"aG" = (
-/obj/item/storage/box/drinkingglasses,
-/obj/item/reagent_containers/food/drinks/shaker,
-/obj/structure/table/wood,
-/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
- },
-/area/shuttle/escape)
-"aH" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = -28
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"aI" = (
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"aJ" = (
-/obj/structure/grille,
-/obj/structure/window/full/shuttle{
- icon_state = "15"
- },
-/turf/simulated/floor/plating,
-/area/shuttle/escape)
-"aK" = (
-/obj/structure/chair/comfy/shuttle,
-/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
- },
-/area/shuttle/escape)
-"aL" = (
+"be" = (
/obj/machinery/chem_dispenser/beer,
/obj/structure/table/wood,
/turf/simulated/floor/plasteel{
@@ -211,24 +438,39 @@
dir = 2
},
/area/shuttle/escape)
-"aM" = (
-/obj/machinery/door/airlock/security/glass{
- name = "Escape Shuttle Cell";
- req_access_txt = "2"
+"bf" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/food/drinks/mug/med,
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
},
-/turf/simulated/floor/plating,
-/area/shuttle/escape)
-"aN" = (
-/obj/item/storage/box/drinkingglasses,
-/obj/item/reagent_containers/food/drinks/shaker,
-/obj/item/clothing/mask/cigarette/cigar,
-/obj/structure/table/wood,
+/obj/item/storage/firstaid/machine,
/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
-"aO" = (
+"bg" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"bh" = (
+/obj/machinery/recharger/wallcharger{
+ pixel_x = 0;
+ pixel_y = -32
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/shuttle/escape)
+"bi" = (
/obj/machinery/chem_dispenser/soda,
/obj/structure/table/wood,
/turf/simulated/floor/plasteel{
@@ -236,410 +478,166 @@
dir = 2
},
/area/shuttle/escape)
-"aP" = (
-/obj/machinery/door/airlock/shuttle{
- aiControlDisabled = 1;
- hackProof = 1;
- id_tag = "s_docking_airlock";
- name = "Shuttle Hatch"
- },
-/turf/simulated/floor/plating,
-/area/shuttle/escape)
-"aQ" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"aR" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
- },
-/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
- },
-/area/shuttle/escape)
-"aS" = (
-/turf/simulated/shuttle/wall{
- tag = "icon-swall7";
- icon_state = "swall7";
- dir = 2
- },
-/area/shuttle/escape)
-"aT" = (
-/obj/docking_port/mobile/emergency{
- dir = 4;
- dwidth = 11;
- height = 13;
- timid = 1;
- width = 24
- },
-/obj/machinery/door/airlock/shuttle{
- aiControlDisabled = 1;
- hackProof = 1;
- id_tag = "s_docking_airlock";
- name = "Shuttle Hatch"
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"aU" = (
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"aV" = (
-/obj/machinery/door/window/southright{
- autoclose = 1;
- name = "engineering door";
- req_access_txt = "32"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
-"aW" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"aX" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
-"aY" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"aZ" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"ba" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/escape)
-"bb" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"bc" = (
-/obj/machinery/door/window/southright{
- autoclose = 1;
- name = "science door";
- req_access_txt = "47"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/escape)
-"bd" = (
-/obj/machinery/door/window/northleft{
- autoclose = 1;
- name = "security door";
+"bj" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Escape Shuttle Cell";
req_access_txt = "2"
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
-"be" = (
-/obj/structure/window/reinforced{
- dir = 1
+"bl" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
-"bf" = (
-/obj/item/radio/intercom{
- dir = 8;
- name = "station intercom (General)";
- pixel_x = -28
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
+/obj/machinery/light{
icon_state = "tube1";
dir = 8
},
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
-"bg" = (
-/obj/structure/grille,
-/obj/structure/window/full/shuttle{
- icon_state = "8"
- },
-/turf/simulated/floor/plating,
-/area/shuttle/escape)
-"bh" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bi" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bj" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
-"bk" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"bl" = (
-/obj/machinery/door/window/northleft{
- autoclose = 1;
- name = "medical door";
- req_access_txt = "5"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
-/area/shuttle/escape)
-"bm" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
"bn" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
+/obj/machinery/light,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
},
/area/shuttle/escape)
"bo" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/escape)
-"bp" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bq" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"br" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/escape)
-"bs" = (
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = 28
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
- icon_state = "tube1";
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
-/area/shuttle/escape)
-"bt" = (
-/obj/structure/window/reinforced,
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/escape)
-"bu" = (
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
- icon_state = "tube1";
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bv" = (
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
- icon_state = "tube1";
- dir = 4
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bw" = (
/obj/machinery/door/airlock/shuttle{
aiControlDisabled = 1;
hackProof = 1;
id_tag = "s_docking_airlock";
name = "Shuttle Hatch"
},
-/turf/simulated/shuttle/floor,
+/turf/simulated/floor/plasteel,
/area/shuttle/escape)
-"bx" = (
-/obj/structure/noticeboard,
-/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
- },
-/area/shuttle/escape)
-"by" = (
-/obj/machinery/door/airlock/shuttle{
- aiControlDisabled = 1;
- hackProof = 1;
- id_tag = null;
- name = "Shuttle Cargo Hatch"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
-/area/shuttle/escape)
-"bz" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
-/area/shuttle/escape)
-"bA" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
+"bp" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"bq" = (
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f5";
+ dir = 2
},
/area/shuttle/escape)
-"bB" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/o2{
- layer = 2.8;
- pixel_x = 4;
- pixel_y = 6
+"br" = (
+/turf/simulated/shuttle/wall{
+ dir = 2;
+ icon_state = "swallc2"
},
-/obj/item/storage/firstaid/regular{
- pixel_x = 2;
- pixel_y = 6
- },
-/obj/item/storage/firstaid/regular{
- pixel_x = -2;
- pixel_y = 4
- },
-/obj/item/bodybag{
- pixel_x = 5
- },
-/obj/item/storage/firstaid/fire,
-/obj/item/storage/firstaid/regular{
- pixel_x = 2;
- pixel_y = 3
- },
-/turf/simulated/floor/plasteel,
/area/shuttle/escape)
-"bC" = (
-/obj/machinery/door/airlock/medical/glass{
- id_tag = null;
- name = "Escape Shuttle Infirmary";
- req_access_txt = "0"
- },
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bD" = (
+"bs" = (
/turf/simulated/shuttle/wall{
icon_state = "swall11";
dir = 2
},
/area/shuttle/escape)
-"bE" = (
+"bt" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall7";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bu" = (
+/obj/structure/shuttle/engine/heater,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/shuttle/plating,
+/area/shuttle/escape)
+"bv" = (
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f9";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bw" = (
+/obj/structure/shuttle/engine/propulsion,
+/turf/simulated/shuttle/plating,
+/area/shuttle/escape)
+"bx" = (
+/obj/machinery/light,
+/turf/simulated/floor/plasteel{
+ icon_state = "cafeteria";
+ dir = 2
+ },
+/area/shuttle/escape)
+"by" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
+"bz" = (
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
+"bA" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
+"bB" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
+"bC" = (
+/obj/structure/sign/directions/engineering,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bD" = (
/obj/machinery/door/airlock/shuttle{
aiControlDisabled = 1;
hackProof = 1;
id_tag = "s_docking_airlock";
name = "Shuttle Hatch"
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
+/obj/docking_port/mobile/emergency{
+ dir = 4;
+ dwidth = 11;
+ height = 18;
+ timid = 1;
+ width = 29
+ },
+/turf/simulated/floor/plasteel,
+/area/shuttle/escape)
+"bE" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"bF" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/obj/structure/sign/directions/medical,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
},
/area/shuttle/escape)
"bG" = (
@@ -656,422 +654,860 @@
},
/area/shuttle/escape)
"bI" = (
-/obj/machinery/vending/wallmed{
- layer = 3.3;
- name = "Emergency NanoMed";
- pixel_x = 28;
- pixel_y = 0;
- req_access_txt = "0"
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
},
-/obj/machinery/sleeper,
-/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bJ" = (
-/obj/item/radio/intercom{
- dir = 4;
- name = "station intercom (General)";
- pixel_x = 28
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
},
-/obj/item/extinguisher,
-/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bK" = (
-/obj/structure/closet/cardboard,
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/escape)
+"bL" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light{
icon_state = "tube1";
dir = 8
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
/area/shuttle/escape)
-"bL" = (
-/obj/machinery/recharge_station,
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bN" = (
-/obj/structure/bed/roller,
-/turf/simulated/floor/plasteel,
-/area/shuttle/escape)
-"bO" = (
-/obj/machinery/sleeper,
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
+"bM" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light{
icon_state = "tube1";
dir = 4
},
-/turf/simulated/floor/plasteel,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
+"bN" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
+"bO" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
/area/shuttle/escape)
"bP" = (
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f5";
- dir = 2
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bot";
+ dir = 1
},
/area/shuttle/escape)
"bQ" = (
-/obj/structure/window/reinforced{
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bot";
dir = 1
},
-/obj/structure/shuttle/engine/heater,
-/turf/simulated/shuttle/plating,
/area/shuttle/escape)
"bR" = (
-/obj/structure/shuttle/engine/heater,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/shuttle/plating,
+/obj/structure/flora/ausbushes/grassybush,
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/structure/flora/ausbushes/sunnybush,
+/obj/structure/window/full/shuttle,
+/turf/simulated/floor/grass,
/area/shuttle/escape)
"bS" = (
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f9";
- dir = 2
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
},
/area/shuttle/escape)
"bT" = (
-/obj/structure/shuttle/engine/propulsion,
-/turf/simulated/shuttle/plating,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
/area/shuttle/escape)
"bU" = (
-/turf/space,
+/obj/structure/sign/directions/science,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bV" = (
+/obj/structure/sign/directions/cargo,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bW" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/recharger/wallcharger{
+ pixel_x = -24
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"bX" = (
+/obj/machinery/ai_status_display,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall3";
+ dir = 2
+ },
+/area/shuttle/escape)
+"bY" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/structure/flora/ausbushes/fernybush,
+/obj/structure/window/full/shuttle,
+/turf/simulated/floor/grass,
+/area/shuttle/escape)
+"bZ" = (
+/obj/machinery/recharge_station/upgraded,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"cc" = (
+/obj/structure/extinguisher_cabinet,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall3";
+ dir = 2
+ },
+/area/shuttle/escape)
+"cf" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc4"
+ },
+/area/shuttle/escape)
+"ch" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "station intercom (General)";
+ pixel_x = -28
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"ck" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bot";
+ dir = 1
+ },
+/area/shuttle/escape)
+"co" = (
+/obj/machinery/sleeper{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"cp" = (
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"cw" = (
+/obj/structure/bed/roller,
+/obj/machinery/iv_drip,
+/turf/simulated/floor/plasteel{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"cx" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/turf/simulated/floor/plasteel{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"cz" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/firstaid/o2{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/firstaid/regular{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-whiteblue (NORTHEAST)";
+ icon_state = "whiteblue";
+ dir = 5
+ },
+/area/shuttle/escape)
+"cA" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bot";
+ dir = 1
+ },
+/area/shuttle/escape)
+"cD" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/backpack/medic,
+/obj/item/storage/belt/medical,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"cE" = (
+/obj/structure/bed/roller,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"cG" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/gloves/color/latex/nitrile,
+/obj/item/clothing/mask/breath,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"cH" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "wall3"
+ },
/area/shuttle/escape)
(1,1,1) = {"
aa
aa
aa
-aa
-aa
ab
-ap
-ap
-ap
+aq
+aq
+aq
aP
-aS
-aT
-ap
-aB
-bg
-aJ
-ap
-bw
-aS
-bE
+aq
+bo
+aP
+bD
+aq
ac
-ap
-bP
+ac
+ac
+aq
+bo
+aq
+bo
+bt
+aq
+ac
+ac
+aq
+aq
+bt
+bq
aa
"}
(2,1,1) = {"
aa
aa
-ab
-ap
-ap
-aw
+aa
+av
az
+bl
+az
+ac
+bW
aH
-aI
-aI
-ae
-aU
-bf
-aW
-bj
-bm
-bu
-aU
-ae
-aU
-aU
-bK
-ax
+aN
+ba
+bg
bP
+bP
+bP
+ba
+ba
+aT
+ba
+bR
+bP
+cA
+bP
+bP
+bP
+av
+cH
+cH
"}
(3,1,1) = {"
aa
-ab
-af
-aq
-aq
-ae
-aA
-aI
-aI
-aI
-ae
-aU
-bd
-aI
-be
-aV
-aU
-aU
-bx
-aU
-aU
-bL
-bQ
-bT
+aa
+aa
+ac
+aH
+aH
+aH
+bj
+aH
+aH
+aW
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+bV
+ba
+ba
+ba
+ba
+ba
+av
+bu
+bw
"}
(4,1,1) = {"
aa
-ae
-ai
-al
-aq
-ae
-az
-aI
-aI
-aQ
-ae
-aU
-bk
-bb
+aa
+aa
+av
aX
-bo
-aU
-aU
-by
-aU
-aU
-bL
+bp
+aX
+ac
+aH
+aH
+aR
+ac
+aY
bQ
-bT
+bQ
+bQ
+ba
+ba
+ba
+ba
+aL
+ba
+ba
+ba
+ba
+ba
+ac
+bu
+bw
"}
(5,1,1) = {"
-aa
-ae
-aj
-al
+ab
aq
-ae
+ac
+bs
+aq
+bt
+aq
+cf
+aH
az
-aI
-aI
-aQ
-ae
-aU
-aB
-bg
-bg
-aJ
-aU
-aU
-aB
-bg
-bg
-aJ
-aw
-bS
+ch
+az
+ac
+bP
+bP
+bP
+ba
+ba
+ba
+bZ
+bR
+bQ
+ck
+bQ
+bQ
+bQ
+av
+cH
+cH
"}
(6,1,1) = {"
-ab
-af
-ak
-al
-aq
-ax
-aB
-aJ
-aM
-aB
-aJ
-aU
-aY
-bh
-bh
-bp
-aU
-aU
-aY
-bh
-bh
-bh
+av
ae
-bU
+am
+ar
+ay
+aD
+aJ
+aH
+aH
+aH
+aH
+aH
+ac
+ba
+ba
+ba
+ba
+bn
+br
+bR
+bs
+bY
+cc
+bR
+bX
+bY
+av
+cH
+cH
"}
(7,1,1) = {"
ac
-ag
-al
-aq
-aq
-ay
-aC
-aC
-aC
-aC
-aC
-aU
-aU
-aU
-aU
-aU
-aU
-aU
-aU
-aU
-aU
-aU
-ae
-bU
+af
+an
+as
+aA
+av
+aH
+aG
+aH
+aX
+bp
+aX
+ac
+bQ
+bQ
+bQ
+ba
+ba
+bC
+by
+by
+by
+bL
+by
+by
+by
+av
+bu
+bw
"}
(8,1,1) = {"
-ad
-ah
-am
-aq
-aq
-ae
-aD
-aD
-aD
-aD
-aD
-aU
+ac
+ag
+ao
+an
+bh
aZ
-bi
-bi
-bq
-aU
-aU
-aZ
-bi
-bi
-bi
-ae
-bU
+aW
+bt
+aW
+ac
+aq
+ac
+cf
+bP
+bP
+bP
+ba
+ba
+aK
+bz
+bz
+bz
+bz
+bz
+bz
+bz
+ac
+bu
+bw
"}
(9,1,1) = {"
-aa
-ae
+ac
+ah
+ao
+an
an
-al
-aq
-ae
aE
+an
aE
-aE
-aE
-aE
-aU
-aB
+ba
+ba
bg
-bg
-aJ
-aU
-aU
-aB
-bg
-bg
-aJ
-aw
-bP
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+bR
+bA
+bA
+bA
+bM
+bA
+bA
+bA
+av
+cH
+cH
"}
(10,1,1) = {"
-aa
-ae
+ac
+ai
ao
-al
-aq
-ae
-aC
-aC
-aC
-aC
-aC
-aU
-bz
-bF
+an
+an
+aE
+an
+aE
ba
-br
-aU
-aU
-bC
-aU
-aU
-bN
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+ba
+bn
+aZ
bR
-bT
+bR
+bY
+cc
+bR
+bX
+bY
+aw
+cH
+cH
"}
(11,1,1) = {"
-aa
-ad
-ah
-aq
-aq
-ae
-aF
-aK
-aN
-aR
-aC
-aU
-bl
-bG
-bn
-bc
-aU
-aU
ac
-aU
-aU
+aj
+ao
+at
+an
+aD
+aF
+av
+ba
+ba
+bc
+ba
+ba
+bQ
+bQ
+bQ
+ba
+ba
+bF
bB
-bR
-bT
+bB
+bB
+bN
+bB
+bB
+bB
+av
+bu
+bw
"}
(12,1,1) = {"
-aa
-aa
-ad
-ap
-ap
-aw
-aG
-aL
-aO
-aR
-aC
-aU
+ac
+ak
+an
+au
+aB
+aZ
+aq
bs
-bH
-bA
-bt
-bv
-aU
-ae
-bI
-bJ
-bO
-ax
-bS
+aI
+ac
+aY
+aT
+ba
+bP
+bP
+bP
+ba
+ba
+aM
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+ac
+bu
+bw
"}
(13,1,1) = {"
+av
+al
+ap
+ax
+aC
+aD
+co
+bE
+cp
+cE
+bb
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+bR
+bH
+bH
+bH
+bO
+bH
+bH
+bH
+av
+cH
+cH
+"}
+(14,1,1) = {"
+ad
+aq
+ac
+bt
+aq
+aQ
+co
+cp
+cp
+cp
+aI
+aS
+aU
+aU
+aU
+aU
+aS
+bx
+aZ
+bR
+bR
+bY
+cc
+bR
+bX
+bY
+aw
+cH
+cH
+"}
+(15,1,1) = {"
aa
aa
aa
+av
+cp
+cp
+cp
+cp
+cp
+cE
+ac
+aS
+aV
+aV
+aV
+aV
+aU
+aS
+bU
+bI
+bI
+bI
+bS
+bI
+bI
+bI
+av
+bu
+bw
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+ac
+cp
+cp
+cp
+cp
+cp
+cw
+ac
+aS
+aS
+aS
+aS
+aV
+aU
+aS
+aO
+bJ
+bJ
+bJ
+bJ
+bJ
+bJ
+bJ
+ac
+bu
+bw
+"}
+(17,1,1) = {"
+aa
+aa
+aa
+av
+cx
+cz
+cD
+bf
+cx
+cG
+av
+aS
+bd
+be
+bi
+aV
+aU
+aS
+bR
+bK
+bK
+bK
+bT
+bK
+bK
+bK
+av
+cH
+cH
+"}
+(18,1,1) = {"
+aa
aa
aa
ad
-ap
-ap
-ap
+aq
+aq
+aq
+aq
+aq
ac
-ap
-ap
-ap
-aB
-bg
-aJ
-ap
+bs
ac
-bD
-ap
-ap
-ap
-bS
+ac
+ac
+ac
+ac
+ac
+ac
+bs
+ac
+ac
+ac
+aq
+ac
+ac
+ac
+bs
+bv
aa
"}
From 4f30d51a2ca5eaf3687056010451fa90658b65c4 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Tue, 21 Jul 2020 19:57:06 -0700
Subject: [PATCH 29/94] small tweaks
---
_maps/map_files/shuttles/emergency_dept.dmm | 49 ++++++++++++---------
1 file changed, 28 insertions(+), 21 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 6a90c7ba45c..65e2e0b88fd 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -314,12 +314,10 @@
},
/area/shuttle/escape)
"aO" = (
-/obj/machinery/door/airlock/research{
- name = "Escape Shuttle Research";
- req_access_txt = "47"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
+/mob/living/simple_animal/bot/secbot,
+/turf/simulated/floor/plasteel{
+ icon_state = "cafeteria";
+ dir = 2
},
/area/shuttle/escape)
"aP" = (
@@ -463,8 +461,8 @@
/area/shuttle/escape)
"bh" = (
/obj/machinery/recharger/wallcharger{
- pixel_x = 0;
- pixel_y = -32
+ pixel_x = 5;
+ pixel_y = -28
},
/turf/simulated/floor/plasteel{
icon_state = "dark"
@@ -485,6 +483,15 @@
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
+"bk" = (
+/obj/machinery/door/airlock/research/glass{
+ name = "Escape Shuttle Research";
+ req_access_txt = "47"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/escape)
"bl" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
@@ -495,6 +502,15 @@
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
+"bm" = (
+/obj/machinery/sleeper/upgraded{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
"bn" = (
/obj/machinery/light,
/turf/simulated/floor/plasteel{
@@ -857,15 +873,6 @@
dir = 1
},
/area/shuttle/escape)
-"co" = (
-/obj/machinery/sleeper{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/shuttle/escape)
"cp" = (
/turf/simulated/floor/plasteel{
dir = 2;
@@ -1332,7 +1339,7 @@ ap
ax
aC
aD
-co
+bm
bE
cp
cE
@@ -1363,7 +1370,7 @@ ac
bt
aq
aQ
-co
+bm
cp
cp
cp
@@ -1437,7 +1444,7 @@ aS
aV
aU
aS
-aO
+bk
bJ
bJ
bJ
@@ -1467,7 +1474,7 @@ be
bi
aV
aU
-aS
+aO
bR
bK
bK
From d4f02a591411a4a5b88d184b3b4679fee673d960 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 02:05:59 -0700
Subject: [PATCH 30/94] updated based on affecteds suggestions
---
_maps/map_files/shuttles/emergency_dept.dmm | 583 ++++++++++----------
1 file changed, 302 insertions(+), 281 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 65e2e0b88fd..3257194c720 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -240,12 +240,9 @@
/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 4
- },
/turf/simulated/floor/plasteel{
- icon_state = "dark"
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"aG" = (
@@ -272,35 +269,44 @@
"aJ" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
+/obj/machinery/light{
+ dir = 1;
+ on = 1
+ },
+/obj/item/restraints/handcuffs,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aK" = (
-/obj/machinery/door/airlock/engineering/glass{
- name = "Escape Shuttle Engineering";
- req_access_txt = "32";
- req_one_access_txt = "0"
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
+/obj/structure/table/reinforced,
+/obj/item/storage/firstaid/adv,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"aL" = (
-/obj/machinery/door/airlock/mining/glass{
- name = "Escape Shuttle Cargo";
- req_access_txt = "50"
+/obj/machinery/door/airlock/medical/glass{
+ id_tag = null;
+ name = "Escape Shuttle Infirmary";
+ normalspeed = 0;
+ req_access_txt = "5"
},
/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "neutralfull"
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"aM" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Escape Shuttle Medical";
- req_access_txt = "5"
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"aN" = (
@@ -334,10 +340,10 @@
},
/area/shuttle/escape)
"aR" = (
-/turf/simulated/shuttle/wall{
- dir = 2;
- icon_state = "swallc1"
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
+/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aS" = (
/turf/simulated/floor/plasteel{
@@ -369,6 +375,7 @@
"aW" = (
/obj/machinery/door/airlock/security/glass{
name = "Escape Shuttle Brig";
+ normalspeed = 0;
req_access_txt = "63"
},
/turf/simulated/shuttle/floor4,
@@ -406,13 +413,14 @@
},
/area/shuttle/escape)
"bc" = (
+/obj/structure/bed/roller,
/obj/machinery/light{
- icon_state = "tube1";
- dir = 4
+ dir = 1;
+ on = 1
},
/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "neutralfull"
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"bd" = (
@@ -438,11 +446,6 @@
/area/shuttle/escape)
"bf" = (
/obj/structure/table/reinforced,
-/obj/item/reagent_containers/food/drinks/mug/med,
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 4
- },
/obj/item/storage/firstaid/machine,
/turf/simulated/floor/plasteel{
dir = 2;
@@ -450,14 +453,11 @@
},
/area/shuttle/escape)
"bg" = (
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 8
- },
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "neutralfull"
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
+/obj/machinery/light,
+/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bh" = (
/obj/machinery/recharger/wallcharger{
@@ -479,17 +479,20 @@
"bj" = (
/obj/machinery/door/airlock/security/glass{
name = "Escape Shuttle Cell";
+ normalspeed = 0;
req_access_txt = "2"
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bk" = (
-/obj/machinery/door/airlock/research/glass{
- name = "Escape Shuttle Research";
- req_access_txt = "47"
+/obj/machinery/door/airlock/mining/glass{
+ name = "Escape Shuttle Cargo";
+ normalspeed = 0;
+ req_access_txt = "50"
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
},
/area/shuttle/escape)
"bl" = (
@@ -512,10 +515,9 @@
},
/area/shuttle/escape)
"bn" = (
-/obj/machinery/light,
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "neutralfull"
+/obj/structure/table/reinforced,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
},
/area/shuttle/escape)
"bo" = (
@@ -545,9 +547,11 @@
},
/area/shuttle/escape)
"br" = (
-/turf/simulated/shuttle/wall{
- dir = 2;
- icon_state = "swallc2"
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
},
/area/shuttle/escape)
"bs" = (
@@ -583,8 +587,8 @@
"bx" = (
/obj/machinery/light,
/turf/simulated/floor/plasteel{
- icon_state = "cafeteria";
- dir = 2
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"by" = (
@@ -609,11 +613,9 @@
},
/area/shuttle/escape)
"bB" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
+/obj/structure/table/reinforced,
/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+ icon_state = "floor5"
},
/area/shuttle/escape)
"bC" = (
@@ -640,33 +642,40 @@
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bE" = (
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 8
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/escape)
+"bF" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
/turf/simulated/floor/plasteel{
dir = 2;
icon_state = "cmo"
},
/area/shuttle/escape)
-"bF" = (
-/obj/structure/sign/directions/medical,
-/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
- },
-/area/shuttle/escape)
"bG" = (
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/obj/item/twohanded/required/kirbyplants,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"bH" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
},
/area/shuttle/escape)
"bI" = (
@@ -715,27 +724,26 @@
},
/area/shuttle/escape)
"bN" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
/obj/machinery/light{
- icon_state = "tube1";
- dir = 8
+ dir = 1;
+ on = 1
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
},
/area/shuttle/escape)
"bO" = (
/obj/structure/chair/comfy/shuttle{
- dir = 8
+ dir = 4
},
/obj/machinery/light{
icon_state = "tube1";
- dir = 4
+ dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/turf/simulated/floor/plasteel{
+ icon_state = "bot";
+ dir = 1
},
/area/shuttle/escape)
"bP" = (
@@ -833,6 +841,24 @@
icon_state = "neutralfull"
},
/area/shuttle/escape)
+"ca" = (
+/obj/machinery/light,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "neutralfull"
+ },
+/area/shuttle/escape)
+"cb" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Escape Shuttle Engineering";
+ normalspeed = 0;
+ req_access_txt = "32";
+ req_one_access_txt = "0"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/escape)
"cc" = (
/obj/structure/extinguisher_cabinet,
/turf/simulated/shuttle/wall{
@@ -840,26 +866,21 @@
dir = 2
},
/area/shuttle/escape)
+"cd" = (
+/obj/machinery/door/airlock/research/glass{
+ name = "Escape Shuttle Research";
+ normalspeed = 0;
+ req_access_txt = "47"
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/escape)
"cf" = (
/turf/simulated/shuttle/wall{
icon_state = "swallc4"
},
/area/shuttle/escape)
-"ch" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/obj/item/radio/intercom{
- dir = 8;
- name = "station intercom (General)";
- pixel_x = -28
- },
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 8
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
"ck" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
@@ -1004,12 +1025,12 @@ bW
aH
aN
ba
-bg
+bP
+bO
bP
bP
bP
ba
-ba
aT
ba
bR
@@ -1063,18 +1084,18 @@ bp
aX
ac
aH
-aH
aR
-ac
-aY
+av
+ba
+bQ
+bQ
+bQ
bQ
bQ
bQ
ba
ba
-ba
-ba
-aL
+bk
ba
ba
ba
@@ -1094,17 +1115,17 @@ bt
aq
cf
aH
-az
-ch
-az
-ac
+aR
+av
+ba
+bP
+bP
+bP
bP
bP
bP
ba
ba
-ba
-bZ
bR
bQ
ck
@@ -1123,26 +1144,26 @@ ar
ay
aD
aJ
+az
aH
-aH
-aH
-aH
-aH
-ac
+bg
+av
+bN
ba
ba
ba
ba
-bn
-br
-bR
-bs
+ba
+ba
+ba
+ca
+aZ
bY
cc
bR
bX
bY
-av
+aw
cH
cH
"}
@@ -1156,23 +1177,23 @@ av
aH
aG
aH
-aX
-bp
-aX
-ac
+aR
+av
+ba
+bQ
+bQ
+bQ
bQ
bQ
bQ
ba
ba
-bC
-by
-by
+bR
by
bL
by
by
-by
+bn
av
bu
bw
@@ -1188,23 +1209,23 @@ aW
bt
aW
ac
-aq
-ac
cf
+ba
+bP
+bP
+bP
bP
bP
bP
ba
ba
-aK
+bC
bz
bz
bz
bz
-bz
-bz
-bz
-ac
+br
+av
bu
bw
"}
@@ -1219,7 +1240,6 @@ an
aE
ba
ba
-bg
ba
ba
ba
@@ -1227,15 +1247,16 @@ ba
ba
ba
ba
-bR
-bA
-bA
-bA
-bM
-bA
-bA
-bA
-av
+ba
+ba
+ba
+cb
+bz
+bz
+bz
+bz
+br
+ac
cH
cH
"}
@@ -1252,21 +1273,21 @@ ba
ba
ba
ba
+aS
+aU
+aU
+aU
+aU
+aS
ba
ba
-ba
-ba
-ba
-bn
-aZ
bR
-bR
-bY
-cc
-bR
-bX
-bY
-aw
+bz
+bz
+bz
+bz
+br
+av
cH
cH
"}
@@ -1277,26 +1298,26 @@ ao
at
an
aD
-aF
-av
+aq
+bs
+aI
+ac
+aY
+ba
+aO
+aV
+aV
+aV
+aV
+aU
ba
ba
-bc
-ba
-ba
-bQ
-bQ
-bQ
-ba
-ba
-bF
-bB
-bB
-bB
-bN
-bB
-bB
-bB
+bR
+bA
+bM
+bA
+bA
+bn
av
bu
bw
@@ -1307,28 +1328,28 @@ ak
an
au
aB
+av
+bm
+cp
+cp
+cp
+bb
+bN
+aS
+aS
+aS
+aS
+aV
+aU
+ba
+ca
aZ
-aq
-bs
-aI
-ac
-aY
-aT
-ba
-bP
-bP
-bP
-ba
-ba
-aM
-bG
-bG
-bG
-bG
-bG
-bG
-bG
-ac
+bY
+cc
+bR
+bX
+bY
+aw
bu
bw
"}
@@ -1340,25 +1361,25 @@ ax
aC
aD
bm
-bE
cp
-cE
-bb
-aS
-aS
-aS
-aS
-aS
-aS
+cp
+cp
+aI
+ba
aS
+bd
+be
+bi
+aV
+aU
+ba
+ba
bR
-bH
-bH
-bH
-bO
-bH
-bH
-bH
+bI
+bS
+bI
+bI
+bB
av
cH
cH
@@ -1370,27 +1391,27 @@ ac
bt
aq
aQ
-bm
+bc
cp
cp
-cp
-aI
-aS
-aU
-aU
-aU
-aU
-aS
bx
aZ
-bR
-bR
-bY
-cc
-bR
-bX
-bY
-aw
+aq
+aq
+aq
+aq
+aq
+aq
+aY
+ba
+ba
+bU
+bJ
+bJ
+bJ
+bJ
+bE
+av
cH
cH
"}
@@ -1399,29 +1420,29 @@ aa
aa
aa
av
+cz
+cD
+cw
cp
cp
cp
-cp
-cp
-cE
ac
-aS
-aV
-aV
-aV
-aV
-aU
-aS
-bU
-bI
-bI
-bI
-bS
-bI
-bI
-bI
-av
+bF
+bF
+aM
+bF
+bF
+cp
+aL
+ba
+ba
+cd
+bJ
+bJ
+bJ
+bJ
+bE
+ac
bu
bw
"}
@@ -1430,29 +1451,29 @@ aa
aa
aa
ac
+cG
cp
cp
cp
cp
cp
-cw
-ac
-aS
-aS
-aS
-aS
-aV
-aU
-aS
-bk
+aL
+cp
+cp
+cp
+cp
+cp
+cp
+av
+ba
+ba
+bR
bJ
bJ
bJ
bJ
-bJ
-bJ
-bJ
-ac
+bE
+av
bu
bw
"}
@@ -1462,27 +1483,27 @@ aa
aa
av
cx
-cz
-cD
-bf
cx
-cG
+aK
+cw
+cE
+bf
+ac
+aF
+aF
+bH
+aF
+aF
+bG
av
-aS
-bd
-be
-bi
-aV
-aU
-aO
+bZ
+bZ
bR
bK
-bK
-bK
bT
bK
bK
-bK
+bB
av
cH
cH
@@ -1506,10 +1527,10 @@ ac
ac
ac
ac
+ac
+ac
bs
ac
-ac
-ac
aq
ac
ac
From 8e7b490a298f195a0ec57c105a00be4d44793722 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 02:09:11 -0700
Subject: [PATCH 31/94] tweak south medical door
---
_maps/map_files/shuttles/emergency_dept.dmm | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 3257194c720..45cc6be1ead 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -658,13 +658,6 @@
icon_state = "cmo"
},
/area/shuttle/escape)
-"bG" = (
-/obj/item/twohanded/required/kirbyplants,
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/shuttle/escape)
"bH" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
@@ -1432,8 +1425,8 @@ bF
aM
bF
bF
-cp
-aL
+bF
+av
ba
ba
cd
@@ -1464,7 +1457,7 @@ cp
cp
cp
cp
-av
+aL
ba
ba
bR
@@ -1494,7 +1487,7 @@ aF
bH
aF
aF
-bG
+aF
av
bZ
bZ
From 7c32fd3268fd0a0b5023af6efeefe9742b3ef76f Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 02:18:53 -0700
Subject: [PATCH 32/94] symmetry
---
_maps/map_files/shuttles/emergency_dept.dmm | 40 ++++++++++++---------
1 file changed, 24 insertions(+), 16 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 45cc6be1ead..8724f5992e4 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -408,8 +408,8 @@
"bb" = (
/obj/structure/sign/greencross,
/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
+ dir = 2;
+ icon_state = "swallc3"
},
/area/shuttle/escape)
"bc" = (
@@ -658,6 +658,14 @@
icon_state = "cmo"
},
/area/shuttle/escape)
+"bG" = (
+/obj/machinery/status_display,
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall14";
+ icon_state = "swall14";
+ dir = 2
+ },
+/area/shuttle/escape)
"bH" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
@@ -1198,8 +1206,8 @@ ao
an
bh
aZ
-aW
-bt
+aq
+aq
aW
ac
cf
@@ -1230,6 +1238,9 @@ an
an
aE
an
+an
+an
+an
aE
ba
ba
@@ -1240,9 +1251,6 @@ ba
ba
ba
ba
-ba
-ba
-ba
cb
bz
bz
@@ -1261,11 +1269,11 @@ an
an
aE
an
+an
+an
+an
aE
ba
-ba
-ba
-ba
aS
aU
aU
@@ -1290,12 +1298,12 @@ aj
ao
at
an
-aD
+bG
aq
-bs
-aI
+aq
+aL
ac
-aY
+bb
ba
aO
aV
@@ -1326,8 +1334,8 @@ bm
cp
cp
cp
-bb
-bN
+aI
+ba
aS
aS
aS
From d25c5487b09f56d8eb7c7e163f451b652668d5ab Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 02:23:36 -0700
Subject: [PATCH 33/94] more symmetry
---
_maps/map_files/shuttles/emergency_dept.dmm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 8724f5992e4..ad9701362b0 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -1085,8 +1085,8 @@ bp
aX
ac
aH
-aR
-av
+aH
+aW
ba
bQ
bQ
From ce9945885bacd0264753a520c76845cea9363fde Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 17:08:26 -0700
Subject: [PATCH 34/94] use isobj helper
---
code/game/machinery/cryopod.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 3c33035f2c9..e102ba73221 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -772,7 +772,7 @@
/proc/cryo_ssd(var/mob/living/carbon/person_to_cryo)
if(istype(person_to_cryo.loc, /obj/machinery/cryopod))
return 0
- if(istype(person_to_cryo.loc, /obj))
+ if(isobj(person_to_cryo.loc))
var/obj/O = person_to_cryo.loc
O.force_eject_occupant()
var/list/free_cryopods = list()
From 53bb067ff5a7af822fe77d9d2a4107c243eb5839 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 19:18:37 -0700
Subject: [PATCH 35/94] Steel
---
code/modules/admin/verbs/adminjump.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index 980e5a60e25..8ba64859da1 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -112,7 +112,7 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
- if(istype(M.loc, /obj))
+ if(isobj(M.loc))
var/obj/O = M.loc
O.force_eject_occupant()
admin_forcemove(M, get_turf(usr))
@@ -139,7 +139,7 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1)
if(M)
- if(istype(M.loc, /obj))
+ if(isobj(M.loc))
var/obj/O = M.loc
O.force_eject_occupant()
admin_forcemove(M, get_turf(usr))
From 716091557d5ac4c5864627c5ab6153a699de822d Mon Sep 17 00:00:00 2001
From: Kyep
Date: Wed, 22 Jul 2020 19:45:41 -0700
Subject: [PATCH 36/94] right tile
---
_maps/map_files/shuttles/emergency_dept.dmm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index ad9701362b0..1ba450b5040 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -1527,7 +1527,7 @@ ac
ac
ac
ac
-ac
+bs
ac
ac
bs
From 0adaaf1445791f5b018b88f0b6a9c30d427e657f Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sun, 26 Jul 2020 15:25:45 -0700
Subject: [PATCH 37/94] affected midsection
---
_maps/map_files/shuttles/emergency_dept.dmm | 447 ++++++++++++--------
1 file changed, 264 insertions(+), 183 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 1ba450b5040..28a9d158662 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -269,21 +269,9 @@
"aJ" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
-/obj/machinery/light{
- dir = 1;
- on = 1
- },
/obj/item/restraints/handcuffs,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
-"aK" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/firstaid/adv,
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/shuttle/escape)
"aL" = (
/obj/machinery/door/airlock/medical/glass{
id_tag = null;
@@ -333,12 +321,6 @@
dir = 2
},
/area/shuttle/escape)
-"aQ" = (
-/obj/machinery/defibrillator_mount/loaded,
-/turf/simulated/shuttle/wall{
- icon_state = "swallc4"
- },
-/area/shuttle/escape)
"aR" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
@@ -386,12 +368,6 @@
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
-"aY" = (
-/turf/simulated/shuttle/wall{
- dir = 2;
- icon_state = "swallc3"
- },
-/area/shuttle/escape)
"aZ" = (
/turf/simulated/shuttle/wall{
tag = "icon-swall14";
@@ -446,10 +422,19 @@
/area/shuttle/escape)
"bf" = (
/obj/structure/table/reinforced,
-/obj/item/storage/firstaid/machine,
+/obj/item/storage/firstaid/o2{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/firstaid/toxin{
+ pixel_x = 5;
+ pixel_y = 5
+ },
/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
+ tag = "icon-whiteblue (NORTHEAST)";
+ icon_state = "whiteblue";
+ dir = 5
},
/area/shuttle/escape)
"bg" = (
@@ -585,10 +570,13 @@
/turf/simulated/shuttle/plating,
/area/shuttle/escape)
"bx" = (
+/obj/structure/bed/roller,
+/obj/machinery/iv_drip,
/obj/machinery/light,
/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
},
/area/shuttle/escape)
"by" = (
@@ -724,16 +712,6 @@
icon_state = "floor2"
},
/area/shuttle/escape)
-"bN" = (
-/obj/machinery/light{
- dir = 1;
- on = 1
- },
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "neutralfull"
- },
-/area/shuttle/escape)
"bO" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
@@ -910,34 +888,6 @@
dir = 4
},
/area/shuttle/escape)
-"cx" = (
-/obj/structure/table/reinforced,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/turf/simulated/floor/plasteel{
- tag = "icon-whiteblue (EAST)";
- icon_state = "whiteblue";
- dir = 4
- },
-/area/shuttle/escape)
-"cz" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/firstaid/o2{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/item/storage/firstaid/regular,
-/obj/item/storage/firstaid/regular{
- pixel_x = 3;
- pixel_y = 3
- },
-/turf/simulated/floor/plasteel{
- tag = "icon-whiteblue (NORTHEAST)";
- icon_state = "whiteblue";
- dir = 5
- },
-/area/shuttle/escape)
"cA" = (
/obj/machinery/light{
icon_state = "tube1";
@@ -981,17 +931,148 @@
icon_state = "wall3"
},
/area/shuttle/escape)
+"cS" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/space)
+"dI" = (
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f10";
+ dir = 2
+ },
+/area/space)
+"eJ" = (
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/space)
+"ir" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor4,
+/area/space)
+"lz" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor4,
+/area/space)
+"mp" = (
+/obj/machinery/defibrillator_mount/loaded,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/escape)
+"sD" = (
+/obj/structure/chair/comfy/shuttle,
+/obj/machinery/light{
+ dir = 1;
+ on = 1
+ },
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"sX" = (
+/obj/machinery/door/airlock/medical/glass{
+ id_tag = null;
+ name = "Escape Shuttle Medical Seating";
+ normalspeed = 0;
+ req_access_txt = "5"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"xB" = (
+/turf/simulated/shuttle/floor4,
+/area/space)
+"yd" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/firstaid/machine{
+ pixel_x = -5;
+ pixel_y = -5
+ },
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/firstaid/adv{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/shuttle/escape)
+"Ex" = (
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f6";
+ dir = 2
+ },
+/area/space)
+"Fu" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall3";
+ dir = 2
+ },
+/area/space)
+"Jk" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/space)
+"Qt" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "cmo"
+ },
+/area/space)
+"Qu" = (
+/obj/structure/grille,
+/obj/structure/window/full/shuttle,
+/turf/simulated/floor/plating,
+/area/space)
+"Wi" = (
+/obj/structure/chair/comfy/shuttle,
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
+"XD" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/turf/simulated/floor/plasteel{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
(1,1,1) = {"
aa
-aa
-aa
-ab
-aq
-aq
+Ex
+Fu
+ac
aq
aP
aq
+aq
+aq
bo
aP
bD
@@ -1015,14 +1096,14 @@ aa
"}
(2,1,1) = {"
aa
-aa
-aa
-av
-az
+cS
+ir
bl
az
ac
+az
bW
+az
aH
aN
ba
@@ -1046,15 +1127,15 @@ cH
"}
(3,1,1) = {"
aa
-aa
-aa
-ac
-aH
+Qu
+xB
aH
aH
bj
aH
aH
+aH
+aH
aW
ba
ba
@@ -1077,15 +1158,15 @@ bw
"}
(4,1,1) = {"
aa
-aa
-aa
-av
-aX
+cS
+lz
bp
aX
ac
aH
aH
+aH
+aH
aW
ba
bQ
@@ -1108,15 +1189,15 @@ bw
"}
(5,1,1) = {"
ab
-aq
-ac
bs
aq
-bt
aq
-cf
+aq
+aw
+sD
aH
-aR
+aH
+bg
av
ba
bP
@@ -1145,11 +1226,11 @@ ar
ay
aD
aJ
-az
aH
-bg
-av
-bN
+aH
+aR
+aD
+ba
ba
ba
ba
@@ -1158,7 +1239,7 @@ ba
ba
ba
ca
-aZ
+bG
bY
cc
bR
@@ -1175,7 +1256,7 @@ an
as
aA
av
-aH
+Wi
aG
aH
aR
@@ -1274,12 +1355,12 @@ an
an
aE
ba
-aS
-aU
-aU
-aU
-aU
-aS
+ba
+ba
+ba
+ba
+ba
+ba
ba
ba
bR
@@ -1298,19 +1379,19 @@ aj
ao
at
an
-bG
+aZ
aq
aq
aL
ac
bb
ba
-aO
-aV
-aV
-aV
-aV
-aU
+bQ
+bQ
+bQ
+bQ
+bQ
+bQ
ba
ba
bR
@@ -1336,15 +1417,15 @@ cp
cp
aI
ba
-aS
-aS
-aS
-aS
-aV
-aU
+bP
+bP
+bP
+bP
+bP
+bP
ba
ca
-aZ
+bG
bY
cc
bR
@@ -1367,12 +1448,12 @@ cp
cp
aI
ba
-aS
-bd
-be
-bi
-aV
-aU
+ba
+ba
+ba
+ba
+ba
+ba
ba
ba
bR
@@ -1387,23 +1468,23 @@ cH
"}
(14,1,1) = {"
ad
-aq
-ac
bt
aq
-aQ
+aq
+aq
+aw
bc
cp
cp
bx
-aZ
-aq
-aq
-aq
-aq
-aq
-aq
-aY
+av
+ba
+aS
+aU
+aU
+aU
+aU
+aS
ba
ba
bU
@@ -1418,24 +1499,24 @@ cH
"}
(15,1,1) = {"
aa
-aa
-aa
-av
-cz
-cD
-cw
-cp
-cp
-cp
-ac
-bF
-bF
+cS
+Qt
aM
bF
-bF
-bF
+mp
+cE
+cp
+cp
+cw
av
ba
+aO
+aV
+aV
+aV
+aV
+aU
+ba
ba
cd
bJ
@@ -1449,23 +1530,23 @@ bw
"}
(16,1,1) = {"
aa
-aa
-aa
-ac
-cG
+Qu
+eJ
+cp
+cp
+sX
cp
cp
cp
-cp
-cp
-aL
-cp
-cp
-cp
-cp
-cp
-cp
-aL
+XD
+av
+ba
+aS
+aS
+aS
+aS
+aV
+aU
ba
ba
bR
@@ -1480,23 +1561,23 @@ bw
"}
(17,1,1) = {"
aa
-aa
-aa
-av
-cx
-cx
-aK
-cw
-cE
-bf
-ac
-aF
-aF
+cS
+Jk
bH
aF
-aF
-aF
av
+cG
+yd
+cD
+bf
+av
+aT
+aS
+bd
+be
+bi
+aV
+aU
bZ
bZ
bR
@@ -1511,15 +1592,15 @@ cH
"}
(18,1,1) = {"
aa
-aa
-aa
-ad
-aq
-aq
-aq
-aq
-aq
+dI
+Fu
ac
+aq
+bs
+aq
+aq
+aq
+aq
bs
ac
ac
@@ -1527,7 +1608,7 @@ ac
ac
ac
ac
-bs
+aq
ac
ac
bs
From 217ee6d358ab244e6025b91edcf3aa303767ad6c Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sun, 26 Jul 2020 15:59:22 -0700
Subject: [PATCH 38/94] symmetry for doors
---
_maps/map_files/shuttles/emergency_dept.dmm | 186 ++++++--------------
1 file changed, 58 insertions(+), 128 deletions(-)
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 28a9d158662..12227bfb1bb 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -931,53 +931,7 @@
icon_state = "wall3"
},
/area/shuttle/escape)
-"cS" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
- },
-/area/space)
-"dI" = (
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f10";
- dir = 2
- },
-/area/space)
-"eJ" = (
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/space)
-"ir" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/shuttle/floor4,
-/area/space)
-"lz" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/shuttle/floor4,
-/area/space)
-"mp" = (
-/obj/machinery/defibrillator_mount/loaded,
-/turf/simulated/shuttle/wall{
- icon_state = "swall12";
- dir = 2
- },
-/area/shuttle/escape)
-"sD" = (
-/obj/structure/chair/comfy/shuttle,
-/obj/machinery/light{
- dir = 1;
- on = 1
- },
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
-"sX" = (
+"sc" = (
/obj/machinery/door/airlock/medical/glass{
id_tag = null;
name = "Escape Shuttle Medical Seating";
@@ -989,10 +943,21 @@
icon_state = "cmo"
},
/area/shuttle/escape)
-"xB" = (
-/turf/simulated/shuttle/floor4,
-/area/space)
-"yd" = (
+"xD" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/obj/item/reagent_containers/iv_bag/blood/random,
+/turf/simulated/floor/plasteel{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"PY" = (
/obj/structure/table/reinforced,
/obj/item/storage/firstaid/machine{
pixel_x = -5;
@@ -1008,65 +973,30 @@
icon_state = "cmo"
},
/area/shuttle/escape)
-"Ex" = (
-/turf/space,
+"Qf" = (
+/obj/machinery/defibrillator_mount/loaded,
/turf/simulated/shuttle/wall{
- icon_state = "swall_f6";
+ icon_state = "swall12";
dir = 2
},
-/area/space)
-"Fu" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swall3";
- dir = 2
- },
-/area/space)
-"Jk" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/space)
-"Qt" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "cmo"
- },
-/area/space)
-"Qu" = (
-/obj/structure/grille,
-/obj/structure/window/full/shuttle,
-/turf/simulated/floor/plating,
-/area/space)
-"Wi" = (
+/area/shuttle/escape)
+"UN" = (
/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
-"XD" = (
-/obj/structure/table/reinforced,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/obj/item/reagent_containers/iv_bag/blood/random,
-/turf/simulated/floor/plasteel{
- tag = "icon-whiteblue (EAST)";
- icon_state = "whiteblue";
- dir = 4
+"Wy" = (
+/obj/structure/chair/comfy/shuttle,
+/obj/machinery/light{
+ dir = 1;
+ on = 1
},
+/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
(1,1,1) = {"
aa
-Ex
-Fu
+ab
+aq
ac
aq
aP
@@ -1096,8 +1026,8 @@ aa
"}
(2,1,1) = {"
aa
-cS
-ir
+av
+az
bl
az
ac
@@ -1127,8 +1057,8 @@ cH
"}
(3,1,1) = {"
aa
-Qu
-xB
+ac
+aH
aH
aH
bj
@@ -1136,7 +1066,7 @@ aH
aH
aH
aH
-aW
+av
ba
ba
ba
@@ -1158,16 +1088,16 @@ bw
"}
(4,1,1) = {"
aa
-cS
-lz
+av
+aX
bp
aX
ac
aH
aH
aH
-aH
-aW
+aR
+av
ba
bQ
bQ
@@ -1194,7 +1124,7 @@ aq
aq
aq
aw
-sD
+Wy
aH
aH
bg
@@ -1228,8 +1158,8 @@ aD
aJ
aH
aH
-aR
-aD
+aH
+aW
ba
ba
ba
@@ -1256,11 +1186,11 @@ an
as
aA
av
-Wi
+UN
aG
aH
-aR
-av
+aH
+aW
ba
bQ
bQ
@@ -1499,11 +1429,11 @@ cH
"}
(15,1,1) = {"
aa
-cS
-Qt
+av
+bF
aM
bF
-mp
+Qf
cE
cp
cp
@@ -1530,15 +1460,15 @@ bw
"}
(16,1,1) = {"
aa
-Qu
-eJ
-cp
-cp
-sX
+ac
cp
cp
cp
-XD
+sc
+cp
+cp
+cp
+xD
av
ba
aS
@@ -1561,13 +1491,13 @@ bw
"}
(17,1,1) = {"
aa
-cS
-Jk
+av
+aF
bH
aF
av
cG
-yd
+PY
cD
bf
av
@@ -1592,8 +1522,8 @@ cH
"}
(18,1,1) = {"
aa
-dI
-Fu
+ad
+aq
ac
aq
bs
From 1d918c36588db0ff935b0a5e9d88702da0c91584 Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sun, 26 Jul 2020 17:00:59 -0700
Subject: [PATCH 39/94] convert all medical jobs
---
icons/mob/hud.dmi | Bin 15257 -> 15244 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index df6b8f4de1f4c2009297501a43172eb18511a5cb..0f737f9c5424666fe1935e6c2db144729bf00dd3 100644
GIT binary patch
delta 12962
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%0DK~MJF#VtSltUbo!e0
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
CNexE;
From e6d6c92a208d2aee8f06675f1a780e9af24fe1be Mon Sep 17 00:00:00 2001
From: Kyep
Date: Sun, 26 Jul 2020 17:10:17 -0700
Subject: [PATCH 40/94] cargo, sec, hop, science
---
icons/mob/hud.dmi | Bin 15244 -> 15609 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 0f737f9c5424666fe1935e6c2db144729bf00dd3..560b5a60a8f7ba1242be5bd172d17b8d8c47236d 100644
GIT binary patch
delta 13372
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