From 47cd4cb12752ef5e07e35664c6c39007f2b766da Mon Sep 17 00:00:00 2001 From: tigercat2000 Date: Fri, 2 Mar 2018 21:12:49 -0800 Subject: [PATCH 01/32] StonedMC This commit ports the StonedMC from /tg/station, intended to replace the Process Scheduler from goon. Currently, they exist simultaneously, as it's very difficult to port our 22 processes to the SMC all at once. Instead, we can make them work together until everything is converted over at a later point, and then take the old PS out back and put a couple of rounds into it's deformed skull. Primary benefits of this new process controller include: Other people that can actually maintain it, unlike the PS, pre-world-init initialization for subsystems, ease of ports from /tg/station13, and potential performance improvement (to be seen). --- code/__DEFINES/MC.dm | 78 +++ code/__DEFINES/_globals.dm | 38 + code/__DEFINES/flags.dm | 2 + code/__DEFINES/math.dm | 18 +- code/__DEFINES/subsystems.dm | 119 ++++ code/__DEFINES/tick.dm | 9 +- code/__HELPERS/cmp.dm | 38 + code/__HELPERS/lists.dm | 82 ++- code/__HELPERS/sorts/InsertSort.dm | 19 + code/__HELPERS/sorts/MergeSort.dm | 19 + code/__HELPERS/sorts/TimSort.dm | 20 + code/__HELPERS/sorts/__main.dm | 647 ++++++++++++++++++ code/__HELPERS/time.dm | 9 +- code/__HELPERS/unsorted.dm | 7 + .../ProcessScheduler/core/process.dm | 4 +- .../ProcessScheduler/core/processScheduler.dm | 2 +- code/controllers/configuration.dm | 10 + code/controllers/controller.dm | 19 + code/controllers/failsafe.dm | 112 ++- code/controllers/globals.dm | 69 ++ code/controllers/master.dm | 611 +++++++++++++++++ code/controllers/master_controller.dm | 18 +- code/controllers/subsystem.dm | 215 ++++++ code/controllers/verbs.dm | 16 +- code/datums/statclick.dm | 35 +- code/game/gamemodes/gameticker.dm | 6 + code/modules/mob/mob.dm | 19 + code/world.dm | 6 +- paradise.dme | 12 + 29 files changed, 2181 insertions(+), 78 deletions(-) create mode 100644 code/__DEFINES/MC.dm create mode 100644 code/__DEFINES/_globals.dm create mode 100644 code/__DEFINES/subsystems.dm create mode 100644 code/__HELPERS/cmp.dm create mode 100644 code/__HELPERS/sorts/InsertSort.dm create mode 100644 code/__HELPERS/sorts/MergeSort.dm create mode 100644 code/__HELPERS/sorts/TimSort.dm create mode 100644 code/__HELPERS/sorts/__main.dm create mode 100644 code/controllers/controller.dm create mode 100644 code/controllers/globals.dm create mode 100644 code/controllers/master.dm create mode 100644 code/controllers/subsystem.dm diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm new file mode 100644 index 00000000000..cbcf2c1dd90 --- /dev/null +++ b/code/__DEFINES/MC.dm @@ -0,0 +1,78 @@ +#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 ) + +#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count +#define MC_SPLIT_TICK \ + if(split_tick_phases > 1){\ + Master.current_ticklimit = ((original_tick_limit - TICK_USAGE) / split_tick_phases) + TICK_USAGE;\ + --split_tick_phases;\ + } else {\ + Master.current_ticklimit = original_tick_limit;\ + } + +// Used to smooth out costs to try and avoid oscillation. +#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) +#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) +#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current)) + +#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) +#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) + +#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} + +#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing += Datum} +#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = FALSE;Processor.processing -= Datum + +//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) + +//subsystem does not initialize. +#define SS_NO_INIT 1 + +//subsystem does not fire. +// (like can_fire = 0, but keeps it from getting added to the processing subsystems list) +// (Requires a MC restart to change) +#define SS_NO_FIRE 2 + +//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) +// SS_BACKGROUND has its own priority bracket +#define SS_BACKGROUND 4 + +//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) +#define SS_NO_TICK_CHECK 8 + +//Treat wait as a tick count, not DS, run every wait ticks. +// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) +// (implies all runlevels because of how it works) +// (overrides SS_BACKGROUND) +// This is designed for basically anything that works as a mini-mc (like SStimer) +#define SS_TICKER 16 + +//keep the subsystem's timing on point by firing early if it fired late last fire because of lag +// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. +#define SS_KEEP_TIMING 32 + +//Calculate its next fire after its fired. +// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) +// This flag overrides SS_KEEP_TIMING +#define SS_POST_FIRE_TIMING 64 + +//SUBSYSTEM STATES +#define SS_IDLE 0 //aint doing shit. +#define SS_QUEUED 1 //queued to run +#define SS_RUNNING 2 //actively running +#define SS_PAUSED 3 //paused by mc_tick_check +#define SS_SLEEPING 4 //fire() slept. +#define SS_PAUSING 5 //in the middle of pausing + +#define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\ +/datum/controller/subsystem/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/##X + +#define PROCESSING_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/processing/##X);\ +/datum/controller/subsystem/processing/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/processing/##X diff --git a/code/__DEFINES/_globals.dm b/code/__DEFINES/_globals.dm new file mode 100644 index 00000000000..7e7aa3158f3 --- /dev/null +++ b/code/__DEFINES/_globals.dm @@ -0,0 +1,38 @@ +//See controllers/globals.dm +#define GLOBAL_MANAGED(X, InitValue)\ +/datum/controller/global_vars/proc/InitGlobal##X(){\ + ##X = ##InitValue;\ + gvars_datum_init_order += #X;\ +} +#define GLOBAL_UNMANAGED(X) /datum/controller/global_vars/proc/InitGlobal##X() { return; } + +#ifndef TESTING +#define GLOBAL_PROTECT(X)\ +/datum/controller/global_vars/InitGlobal##X(){\ + ..();\ + gvars_datum_protected_varlist[#X] = TRUE;\ +} +#else +#define GLOBAL_PROTECT(X) +#endif + +#define GLOBAL_REAL_VAR(X) var/global/##X +#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X + +#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X + +#define GLOBAL_VAR_INIT(X, InitValue) GLOBAL_RAW(/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR_CONST(X, InitValue) GLOBAL_RAW(/const/##X) = InitValue; GLOBAL_UNMANAGED(X) + +#define GLOBAL_LIST_INIT(X, InitValue) GLOBAL_RAW(/list/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) + +#define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) + +#define GLOBAL_VAR(X) GLOBAL_RAW(/##X); GLOBAL_UNMANAGED(X) + +#define GLOBAL_LIST(X) GLOBAL_RAW(/list/##X); GLOBAL_UNMANAGED(X) + +#define GLOBAL_DATUM(X, Typepath) GLOBAL_RAW(Typepath/##X); GLOBAL_UNMANAGED(X) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index a03ba7c9d4c..b140ca4d627 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -89,3 +89,5 @@ #define AFFECT_ROBOTIC_ORGAN 1 #define AFFECT_ORGANIC_ORGAN 2 #define AFFECT_ALL_ORGANS 3 + +GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)) \ No newline at end of file diff --git a/code/__DEFINES/math.dm b/code/__DEFINES/math.dm index d71047fe3d3..c6ffc61495e 100644 --- a/code/__DEFINES/math.dm +++ b/code/__DEFINES/math.dm @@ -30,4 +30,20 @@ #define Lcm(a, b) (abs(a) / Gcd((a), (b)) * abs(b)) #define Root(n, x) ((x) ** (1 / (n))) #define ToDegrees(radians) ((radians) * 57.2957795) // 180 / Pi -#define ToRadians(degrees) ((degrees) * 0.0174532925) // Pi / 180 \ No newline at end of file +#define ToRadians(degrees) ((degrees) * 0.0174532925) // Pi / 180 + +//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks +//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio) +//collapsed to percent_of_tick_used * tick_lag +#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag) +#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage)) + +//time of day but automatically adjusts to the server going into the next day within the same round. +//for when you need a reliable time number that doesn't depend on byond time. +#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) +#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers ) + +#define CEILING(x, y) ( -round(-(x) / (y)) * (y) ) + +// round() acts like floor(x, 1) by default but can't handle other values +#define FLOOR(x, y) ( round((x) / (y)) * (y) ) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm new file mode 100644 index 00000000000..a0ea6b60777 --- /dev/null +++ b/code/__DEFINES/subsystems.dm @@ -0,0 +1,119 @@ +//Update this whenever the db schema changes +//make sure you add an update to the schema_version stable in the db changelog +#define DB_MAJOR_VERSION 4 +#define DB_MINOR_VERSION 1 + +//Timing subsystem +//Don't run if there is an identical unique timer active +//if the arguments to addtimer are the same as an existing timer, it doesn't create a new timer, and returns the id of the existing timer +#define TIMER_UNIQUE 0x1 +//For unique timers: Replace the old timer rather then not start this one +#define TIMER_OVERRIDE 0x2 +//Timing should be based on how timing progresses on clients, not the sever. +// tracking this is more expensive, +// should only be used in conjuction with things that have to progress client side, such as animate() or sound() +#define TIMER_CLIENT_TIME 0x4 +//Timer can be stopped using deltimer() +#define TIMER_STOPPABLE 0x8 +//To be used with TIMER_UNIQUE +//prevents distinguishing identical timers with the wait variable +#define TIMER_NO_HASH_WAIT 0x10 + +#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something + +#define TIMER_ID_NULL -1 + +//For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing. +#define FLIGHTSUIT_PROCESSING_NONE 0 +#define FLIGHTSUIT_PROCESSING_FULL 1 + +#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize +#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE) +#define INITIALIZATION_INNEW_REGULAR 1 //New should call Initialize(FALSE) + +#define INITIALIZE_HINT_NORMAL 0 //Nothing happens +#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize +#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom + +//type and all subtypes should always call Initialize in New() +#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\ + ..();\ + if(!initialized) {\ + args[1] = TRUE;\ + SSatoms.InitAtom(src, args);\ + }\ +} + +// Subsystem init_order, from highest priority to lowest priority +// 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_DBCORE 18 +#define INIT_ORDER_BLACKBOX 17 +#define INIT_ORDER_SERVER_MAINT 16 +#define INIT_ORDER_INPUT 15 +#define INIT_ORDER_RESEARCH 14 +#define INIT_ORDER_EVENTS 13 +#define INIT_ORDER_JOBS 12 +#define INIT_ORDER_TRAITS 11 +#define INIT_ORDER_TICKER 10 +#define INIT_ORDER_MAPPING 9 +#define INIT_ORDER_ATOMS 8 +#define INIT_ORDER_NETWORKS 7 +#define INIT_ORDER_LANGUAGE 6 +#define INIT_ORDER_MACHINES 5 +#define INIT_ORDER_CIRCUIT 4 +#define INIT_ORDER_TIMER 1 +#define INIT_ORDER_DEFAULT 0 +#define INIT_ORDER_AIR -1 +#define INIT_ORDER_MINIMAP -3 +#define INIT_ORDER_ASSETS -4 +#define INIT_ORDER_ICON_SMOOTHING -5 +#define INIT_ORDER_OVERLAY -6 +#define INIT_ORDER_XKEYSCORE -10 +#define INIT_ORDER_STICKY_BAN -10 +#define INIT_ORDER_LIGHTING -20 +#define INIT_ORDER_SHUTTLE -21 +#define INIT_ORDER_SQUEAK -40 +#define INIT_ORDER_PATH -50 +#define INIT_ORDER_PERSISTENCE -100 + +// Subsystem fire priority, from lowest to highest priority +// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) + +#define FIRE_PRIORITY_IDLE_NPC 10 +#define FIRE_PRIORITY_SERVER_MAINT 10 +#define FIRE_PRIORITY_GARBAGE 15 +#define FIRE_PRIORITY_RESEARCH 15 +#define FIRE_PRIORITY_AIR 20 +#define FIRE_PRIORITY_NPC 20 +#define FIRE_PRIORITY_PROCESS 25 +#define FIRE_PRIORITY_THROWING 25 +#define FIRE_PRIORITY_FLIGHTPACKS 30 +#define FIRE_PRIORITY_SPACEDRIFT 30 +#define FIRE_PRIOTITY_SMOOTHING 35 +#define FIRE_PRIORITY_ORBIT 35 +#define FIRE_PRIORITY_OBJ 40 +#define FIRE_PRIORUTY_FIELDS 40 +#define FIRE_PRIORITY_ACID 40 +#define FIRE_PRIOTITY_BURNING 40 +#define FIRE_PRIORITY_INBOUNDS 40 +#define FIRE_PRIORITY_DEFAULT 50 +#define FIRE_PRIORITY_PARALLAX 65 +#define FIRE_PRIORITY_NETWORKS 80 +#define FIRE_PRIORITY_MOBS 100 +#define FIRE_PRIORITY_TGUI 110 +#define FIRE_PRIORITY_TICKER 200 +#define FIRE_PRIORITY_OVERLAYS 500 +#define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost. + +// SS runlevels + +#define RUNLEVEL_INIT 0 +#define RUNLEVEL_LOBBY 1 +#define RUNLEVEL_SETUP 2 +#define RUNLEVEL_GAME 4 +#define RUNLEVEL_POSTGAME 8 + +#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) diff --git a/code/__DEFINES/tick.dm b/code/__DEFINES/tick.dm index 71a63af6289..80550ab5e7a 100644 --- a/code/__DEFINES/tick.dm +++ b/code/__DEFINES/tick.dm @@ -1,5 +1,10 @@ -#define TICK_LIMIT_RUNNING 90 -#define TICK_LIMIT_TO_RUN 85 +#define TICK_LIMIT_RUNNING 80 +#define TICK_LIMIT_TO_RUN 70 +#define TICK_LIMIT_MC 70 +#define TICK_LIMIT_MC_INIT_DEFAULT 98 + +#define TICK_USAGE world.tick_usage //for general usage +#define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked #define TICK_CHECK ( world.tick_usage > TICK_LIMIT_RUNNING ? stoplag() : 0 ) #define CHECK_TICK if(world.tick_usage > TICK_LIMIT_RUNNING) stoplag() \ No newline at end of file diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm new file mode 100644 index 00000000000..2b02c212659 --- /dev/null +++ b/code/__HELPERS/cmp.dm @@ -0,0 +1,38 @@ +/proc/cmp_numeric_dsc(a,b) + return b - a + +/proc/cmp_numeric_asc(a,b) + return a - b + +/proc/cmp_text_asc(a,b) + return sorttext(b,a) + +/proc/cmp_text_dsc(a,b) + return sorttext(a,b) + +/proc/cmp_name_asc(atom/a, atom/b) + return sorttext(b.name, a.name) + +/proc/cmp_name_dsc(atom/a, atom/b) + return sorttext(a.name, b.name) + +/proc/cmp_ckey_asc(client/a, client/b) + return sorttext(b.ckey, a.ckey) + +/proc/cmp_ckey_dsc(client/a, client/b) + return sorttext(a.ckey, b.ckey) + +/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) + return initial(b.init_order) - initial(a.init_order) //uses initial() so it can be used on types + +/proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b) + return sorttext(b.name, a.name) + +/proc/cmp_subsystem_priority(datum/controller/subsystem/a, datum/controller/subsystem/b) + return a.priority - b.priority + +/proc/cmp_atom_layer_asc(atom/A,atom/B) + if(A.plane != B.plane) + return A.plane - B.plane + else + return A.layer - B.layer \ No newline at end of file diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 6ee5097a76e..5627a355557 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -678,4 +678,84 @@ proc/dd_sortedObjectList(list/incoming) if(isnum(key)) L |= key else - L[key] = temp[key] \ No newline at end of file + L[key] = temp[key] + +//Move a single element from position fromIndex within a list, to position toIndex +//All elements in the range [1,toIndex) before the move will be before the pivot afterwards +//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards +//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages. +//fromIndex and toIndex must be in the range [1,L.len+1] +//This will preserve associations ~Carnie +/proc/moveElement(list/L, fromIndex, toIndex) + if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move + return + if(fromIndex > toIndex) + ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one + + L.Insert(toIndex, null) + L.Swap(fromIndex, toIndex) + L.Cut(fromIndex, fromIndex+1) + + +//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) +//Same as moveElement but for ranges of elements +//This will preserve associations ~Carnie +/proc/moveRange(list/L, fromIndex, toIndex, len=1) + var/distance = abs(toIndex - fromIndex) + if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements + if(fromIndex <= toIndex) + return //no need to move + fromIndex += len //we want to shift left instead of right + + for(var/i=0, i toIndex) + fromIndex += len + + for(var/i=0, i distance) //there is an overlap, therefore swapping each element will require more swaps than inserting new elements + if(fromIndex < toIndex) + toIndex += len + else + fromIndex += len + + for(var/i=0, i fromIndex) + var/a = toIndex + toIndex = fromIndex + fromIndex = a + + for(var/i=0, i= 2) + fromIndex = fromIndex % L.len + toIndex = toIndex % (L.len+1) + if(fromIndex <= 0) + fromIndex += L.len + if(toIndex <= 0) + toIndex += L.len + 1 + + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new + SI.L = L + SI.cmp = cmp + SI.associative = associative + + SI.binarySort(fromIndex, toIndex, fromIndex) + return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/MergeSort.dm b/code/__HELPERS/sorts/MergeSort.dm new file mode 100644 index 00000000000..39d37997255 --- /dev/null +++ b/code/__HELPERS/sorts/MergeSort.dm @@ -0,0 +1,19 @@ +//merge-sort - gernerally faster than insert sort, for runs of 7 or larger +/proc/sortMerge(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex) + if(L && L.len >= 2) + fromIndex = fromIndex % L.len + toIndex = toIndex % (L.len+1) + if(fromIndex <= 0) + fromIndex += L.len + if(toIndex <= 0) + toIndex += L.len + 1 + + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new + SI.L = L + SI.cmp = cmp + SI.associative = associative + + SI.mergeSort(fromIndex, toIndex) + return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm new file mode 100644 index 00000000000..d709044dc05 --- /dev/null +++ b/code/__HELPERS/sorts/TimSort.dm @@ -0,0 +1,20 @@ +//TimSort interface +/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) + if(L && L.len >= 2) + fromIndex = fromIndex % L.len + toIndex = toIndex % (L.len+1) + if(fromIndex <= 0) + fromIndex += L.len + if(toIndex <= 0) + toIndex += L.len + 1 + + var/datum/sortInstance/SI = GLOB.sortInstance + if(!SI) + SI = new + + SI.L = L + SI.cmp = cmp + SI.associative = associative + + SI.timSort(fromIndex, toIndex) + return L \ No newline at end of file diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm new file mode 100644 index 00000000000..768622818ff --- /dev/null +++ b/code/__HELPERS/sorts/__main.dm @@ -0,0 +1,647 @@ + //These are macros used to reduce on proc calls +#define fetchElement(L, i) (associative) ? L[L[i]] : L[i] + + //Minimum sized sequence that will be merged. Anything smaller than this will use binary-insertion sort. + //Should be a power of 2 +#define MIN_MERGE 32 + + //When we get into galloping mode, we stay there until both runs win less often than MIN_GALLOP consecutive times. +#define MIN_GALLOP 7 + + //This is a global instance to allow much of this code to be reused. The interfaces are kept separately +GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) +/datum/sortInstance + //The array being sorted. + var/list/L + + //The comparator proc-reference + var/cmp = /proc/cmp_numeric_asc + + //whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]]) + var/associative = 0 + + //This controls when we get *into* galloping mode. It is initialized to MIN_GALLOP. + //The mergeLo and mergeHi methods nudge it higher for random data, and lower for highly structured data. + var/minGallop = MIN_GALLOP + + //Stores information regarding runs yet to be merged. + //Run i starts at runBase[i] and extends for runLen[i] elements. + //runBase[i] + runLen[i] == runBase[i+1] + var/list/runBases = list() + var/list/runLens = list() + + + proc/timSort(start, end) + runBases.Cut() + runLens.Cut() + + var/remaining = end - start + + //If array is small, do a 'mini-TimSort' with no merges + if(remaining < MIN_MERGE) + var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start+initRunLen) + return + + //March over the array finding natural runs + //Extend any short natural runs to runs of length minRun + var/minRun = minRunLength(remaining) + + do + //identify next run + var/runLen = countRunAndMakeAscending(start, end) + + //if run is short, extend to min(minRun, remaining) + if(runLen < minRun) + var/force = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+force, start+runLen) + runLen = force + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //maybe merge + mergeCollapse() + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + + //Merge all remaining runs to complete sort + //ASSERT(start == end) + mergeForceCollapse(); + //ASSERT(runBases.len == 1) + + //reset minGallop, for successive calls + minGallop = MIN_GALLOP + + return L + + /* + Sorts the specified portion of the specified array using a binary + insertion sort. This is the best method for sorting small numbers + of elements. It requires O(n log n) compares, but O(n^2) data + movement (worst case). + + If the initial part of the specified range is already sorted, + this method can take advantage of it: the method assumes that the + elements in range [lo,start) are already sorted + + lo the index of the first element in the range to be sorted + hi the index after the last element in the range to be sorted + start the index of the first element in the range that is not already known to be sorted + */ + proc/binarySort(lo, hi, start) + //ASSERT(lo <= start && start <= hi) + if(start <= lo) + start = lo + 1 + + for(,start < hi, ++start) + var/pivot = fetchElement(L,start) + + //set left and right to the index where pivot belongs + var/left = lo + var/right = start + //ASSERT(left <= right) + + //[lo, left) elements <= pivot < [right, start) elements + //in other words, find where the pivot element should go using bisection search + while(left < right) + var/mid = (left + right) >> 1 //round((left+right)/2) + if(call(cmp)(fetchElement(L,mid), pivot) > 0) + right = mid + else + left = mid+1 + + //ASSERT(left == right) + moveElement(L, start, left) //move pivot element to correct location in the sorted range + + /* + Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front + + A run is the longest ascending sequence with: + a[lo] <= a[lo + 1] <= a[lo + 2] <= ... + or the longest descending sequence with: + a[lo] > a[lo + 1] > a[lo + 2] > ... + + For its intended use in a stable mergesort, the strictness of the + definition of "descending" is needed so that the call can safely + reverse a descending sequence without violating stability. + */ + proc/countRunAndMakeAscending(lo, hi) + //ASSERT(lo < hi) + + var/runHi = lo + 1 + if(runHi >= hi) + return 1 + + var/last = fetchElement(L,lo) + var/current = fetchElement(L,runHi++) + + if(call(cmp)(current, last) < 0) + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) >= 0) + break + ++runHi + reverseRange(L, lo, runHi) + else + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) < 0) + break + ++runHi + + return runHi - lo + + //Returns the minimum acceptable run length for an array of the specified length. + //Natural runs shorter than this will be extended with binarySort + proc/minRunLength(n) + //ASSERT(n >= 0) + var/r = 0 //becomes 1 if any bits are shifted off + while(n >= MIN_MERGE) + r |= (n & 1) + n >>= 1 + return n + r + + //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: + // runLen[i-3] > runLen[i-2] + runLen[i-1] + // runLen[i-2] > runLen[i-1] + //This method is called each time a new run is pushed onto the stack. + //So the invariants are guaranteed to hold for i= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt(n) + else + break //Invariant is established + + + //Merges all runs on the stack until only one remains. + //Called only once, to finalise the sort + proc/mergeForceCollapse() + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + + + //Merges the two consecutive runs at stack indices i and i+1 + //Run i must be the penultimate or antepenultimate run on the stack + //In other words, i must be equal to stackSize-2 or stackSize-3 + proc/mergeAt(i) + //ASSERT(runBases.len >= 2) + //ASSERT(i >= 1) + //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) + + var/base1 = runBases[i] + var/base2 = runBases[i+1] + var/len1 = runLens[i] + var/len2 = runLens[i+1] + + //ASSERT(len1 > 0 && len2 > 0) + //ASSERT(base1 + len1 == base2) + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + + + //Find where the first element of run2 goes in run1. + //Prior elements in run1 can be ignored (because they're already in place) + var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) + //ASSERT(k >= 0) + base1 += k + len1 -= k + if(len1 == 0) + return + + //Find where the last element of run1 goes in run2. + //Subsequent elements in run2 can be ignored (because they're already in place) + len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) + //ASSERT(len2 >= 0) + if(len2 == 0) + return + + //Merge remaining runs, using tmp array with min(len1, len2) elements + if(len1 <= len2) + mergeLo(base1, len1, base2, len2) + else + mergeHi(base1, len1, base2, len2) + + + /* + Locates the position to insert key within the specified sorted range + If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements + + key the element to be inserted into the sorted range + base the index of the first element of the sorted range + len the length of the sorted range, must be greater than 0 + hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint + + Returns the index at which to insert element 'key' + */ + proc/gallopLeft(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/lastOffset = 0 + var/offset = 1 + if(call(cmp)(key, fetchElement(L,base+hint)) > 0) + var/maxOffset = len - hint + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + else + var/maxOffset = hint + 1 + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than + //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) > 0) + lastOffset = m + 1 + else + offset = m + + //ASSERT(lastOffset == offset) + return offset + + /** + * Like gallopLeft, except that if the range contains an element equal to + * key, gallopRight returns the index after the rightmost equal element. + * + * @param key the key whose insertion point to search for + * @param a the array in which to search + * @param base the index of the first element in the range + * @param len the length of the range; must be > 0 + * @param hint the index at which to begin the search, 0 <= hint < n. + * The closer hint is to the result, the faster this method will run. + * @param c the comparator used to order the range, and to search + * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] + */ + proc/gallopRight(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/offset = 1 + var/lastOffset = 0 + if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] + var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards + lastOffset = offset + offset = (offset << 1) + 1 //1 3 7 15 + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + else //key > L[base+hint] + var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] + offset = m + else //key > L[base+m] + lastOffset = m + 1 + + //ASSERT(lastOffset == offset) + + return offset + + + //Merges two adjacent runs in-place in a stable fashion. + //For performance this method should only be called when len1 <= len2! + proc/mergeLo(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + var/cursor2 = base2 + + //degenerate cases + if(len2 == 1) + moveElement(L, cursor2, cursor1) + return + + if(len1 == 1) + moveElement(L, cursor1, cursor2+len2) + return + + + //Move first element of second run + moveElement(L, cursor2++, cursor1++) + --len2 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thin until one run starts winning consistently + + do + //ASSERT(len1 > 1 && len2 > 0) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor2++, cursor1++) + --len2 + + ++count2 + count1 = 0 + + if(len2 == 0) + break outer + else + ++cursor1 + + ++count1 + count2 = 0 + + if(--len1 == 1) + break outer + + while((count1 | count2) < minGallop) + + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 1 && len2 > 0) + + count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) + if(count1) + cursor1 += count1 + len1 -= count1 + + if(len1 <= 1) + break outer + + moveElement(L, cursor2, cursor1) + ++cursor2 + ++cursor1 + if(--len2 == 0) + break outer + + count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) + if(count2) + moveRange(L, cursor2, cursor1, count2) + + cursor2 += count2 + cursor1 += count2 + len2 -= count2 + + if(len2 == 0) + break outer + + ++cursor1 + if(--len1 == 1) + break outer + + --minGallop + + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2; // Penalize for leaving gallop mode + + + if(len1 == 1) + //ASSERT(len2 > 0) + moveElement(L, cursor1, cursor2+len2) + + //else + //ASSERT(len2 == 0) + //ASSERT(len1 > 1) + + + proc/mergeHi(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + len1 - 1 //start at end of sublists + var/cursor2 = base2 + len2 - 1 + + //degenerate cases + if(len2 == 1) + moveElement(L, base2, base1) + return + + if(len1 == 1) + moveElement(L, base1, cursor2+1) + return + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thing until one run starts winning consistently + do + //ASSERT(len1 > 0 && len2 > 1) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + ++count1 + count2 = 0 + + if(len1 == 0) + break outer + else + --cursor2 + --len2 + + ++count2 + count1 = 0 + + if(len2 == 1) + break outer + while((count1 | count2) < minGallop) + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 0 && len2 > 1) + + count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? + if(count1) + cursor1 -= count1 + + moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition + + cursor2 -= count1 + len1 -= count1 + + if(len1 == 0) + break outer + + --cursor2 + + if(--len2 == 1) + break outer + + count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) + if(count2) + cursor2 -= count2 + len2 -= count2 + + if(len2 <= 1) + break outer + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + if(len1 == 0) + break outer + + --minGallop + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2 // Penalize for leaving gallop mode + + if(len2 == 1) + //ASSERT(len1 > 0) + + cursor1 -= len1 + moveRange(L, cursor1+1, cursor2+1, len1) + + //else + //ASSERT(len1 == 0) + //ASSERT(len2 > 0) + + + proc/mergeSort(start, end) + var/remaining = end - start + + //If array is small, do an insertion sort + if(remaining < MIN_MERGE) + binarySort(start, end, start/*+initRunLen*/) + return + + var/minRun = minRunLength(remaining) + + do + var/runLen = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+runLen, start) + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt2(n) + else + break //Invariant is established + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + + return L + + proc/mergeAt2(i) + var/cursor1 = runBases[i] + var/cursor2 = runBases[i+1] + + var/end1 = cursor1+runLens[i] + var/end2 = cursor2+runLens[i+1] + + var/val1 = fetchElement(L,cursor1) + var/val2 = fetchElement(L,cursor2) + + while(1) + if(call(cmp)(val1,val2) <= 0) + if(++cursor1 >= end1) + break + val1 = fetchElement(L,cursor1) + else + moveElement(L,cursor2,cursor1) + + if(++cursor2 >= end2) + break + ++end1 + ++cursor1 + + val2 = fetchElement(L,cursor2) + + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + +#undef MIN_GALLOP +#undef MIN_MERGE + +#undef fetchElement diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index e4d834a35a0..0fceedac3b0 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -165,4 +165,11 @@ proc/isDay(var/month, var/day) else day = "1 day" - return "[day][hour][minute][second]" \ No newline at end of file + return "[day][hour][minute][second]" + +GLOBAL_VAR_INIT(midnight_rollovers, 0) +GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) +/proc/update_midnight_rollover() + if (world.timeofday < GLOB.rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! + return GLOB.midnight_rollovers++ + return GLOB.midnight_rollovers \ No newline at end of file diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f106d579e94..f1ee4e5415f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1914,3 +1914,10 @@ var/mob/dview/dview_mob = new for(var/atom/thing in here) if(istype(thing, type) && (check_shift && thing.pixel_x == shift_x && thing.pixel_y == shift_y)) . += thing + +//gives us the stack trace from CRASH() without ending the current proc. +/proc/stack_trace(msg) + CRASH(msg) + +/datum/proc/stack_trace(msg) + CRASH(msg) \ No newline at end of file diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 5fe1663d7e8..4fc377e9e37 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -34,8 +34,6 @@ /** * Config vars */ - // Process name - var/name // Process schedule interval // This controls how often the process would run under ideal conditions. @@ -364,7 +362,7 @@ var/highestRunTime = round(highest_run_time, 0.001) var/deferTime = round(cpu_defer_count / 10 * world.tick_lag, 0.01) if(!statclick) - statclick = new (src) + statclick = new /obj/effect/statclick/debug(src) stat("[name]", statclick.update("T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [deferTime]")) /datum/controller/process/proc/catchException(var/exception/e, var/thrower) diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm index e8f723586d8..9fcf6d13759 100644 --- a/code/controllers/ProcessScheduler/core/processScheduler.dm +++ b/code/controllers/ProcessScheduler/core/processScheduler.dm @@ -232,7 +232,7 @@ var/global/datum/controller/processScheduler/processScheduler stat("Processes", "Scheduler not running") return if(!statclick) - statclick = new (src) + statclick = new /obj/effect/statclick/debug(src) stat("Processes", statclick.update("[processes.len] (R [running.len] / Q [queued.len] / I [idle.len])")) for(var/datum/controller/process/p in processes) p.statProcess() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 1e95c7b8977..cb363880fff 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -189,6 +189,16 @@ var/disable_karma = 0 // Disable all karma functions and unlock karma jobs by default + // StonedMC + var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling + + // Highpop tickrates + var/base_mc_tick_rate = 1 + var/high_pop_mc_tick_rate = 1.1 + + var/high_pop_mc_mode_amount = 65 + var/disable_high_pop_mc_mode_amount = 60 + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) for(var/T in L) diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm new file mode 100644 index 00000000000..06547d120d5 --- /dev/null +++ b/code/controllers/controller.dm @@ -0,0 +1,19 @@ +/datum/controller + var/name + // The object used for the clickable stat() button. + var/obj/effect/statclick/statclick + +/datum/controller/proc/Initialize() + +//cleanup actions +/datum/controller/proc/Shutdown() + +//when we enter dmm_suite.load_map +/datum/controller/proc/StartLoadingMap() + +//when we exit dmm_suite.load_map +/datum/controller/proc/StopLoadingMap() + +/datum/controller/proc/Recover() + +/datum/controller/proc/stat_entry() \ No newline at end of file diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index afb0e68d83f..232a6bd054b 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -1,39 +1,97 @@ -var/global/datum/controller/failsafe/failsafe +var/global/datum/controller/failsafe/Failsafe -/datum/controller/failsafe // This thing pretty much just keeps poking the controllers. - processing_interval = 100 // Poke the controllers every 10 seconds. - /* - * Controller alert level. - * For every poke that fails this is raised by 1. - * When it reaches 5 the MC is replaced with a new one - * (effectively killing any controller process() and starting a new one). - */ +/datum/controller/failsafe // This thing pretty much just keeps poking the master controller + name = "Failsafe" - // master - var/masterControllerIteration = 0 - var/masterControllerAlertLevel = 0 + // The length of time to check on the MC (in deciseconds). + // Set to 0 to disable. + var/processing_interval = 20 + // The alert level. For every failed poke, we drop a DEFCON level. Once we hit DEFCON 1, restart the MC. + var/defcon = 5 + //the world.time of the last check, so the mc can restart US if we hang. + // (Real friends look out for *eachother*) + var/lasttick = 0 + + // Track the MC iteration to make sure its still on track. + var/master_iteration = 0 + var/running = TRUE /datum/controller/failsafe/New() - . = ..() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + if(Failsafe != src) + if(istype(Failsafe)) + qdel(Failsafe) + Failsafe = src + Initialize() - // There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one). - if(failsafe != src) - if(istype(failsafe)) - recover() - qdel(failsafe) +/datum/controller/failsafe/Initialize() + set waitfor = 0 + Failsafe.Loop() + if(!qdeleted(src)) + qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us - failsafe = src +/datum/controller/failsafe/Destroy() + running = FALSE + ..() + return QDEL_HINT_HARDDEL_NOW - //failsafe.process() +/datum/controller/failsafe/proc/Loop() + while(running) + lasttick = world.time + if(!Master) + // Replace the missing Master! This should never, ever happen. + new /datum/controller/master() + // Only poke it if overrides are not in effect. + if(processing_interval > 0) + if(Master.processing && Master.iteration) + // Check if processing is done yet. + if(Master.iteration == master_iteration) + switch(defcon) + if(4,5) + --defcon + if(3) + message_admins("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + --defcon + if(2) + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + --defcon + if(1) -/datum/controller/failsafe/proc/process() - processing = 1 + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + --defcon + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + to_chat(admins, "MC restarted successfully") + else if(rtn < 0) + log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") + to_chat(admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") + //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again + //no need to handle that specially when defcon 0 can handle it + if(0) //DEFCON 0! (mc failed to restart) + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + to_chat(admins, "MC restarted successfully") + else + defcon = min(defcon + 1,5) + master_iteration = Master.iteration + if (defcon <= 1) + sleep(processing_interval*2) + else + sleep(processing_interval) + else + defcon = 5 + sleep(initial(processing_interval)) - spawn(0) - set background = BACKGROUND_ENABLED +/datum/controller/failsafe/proc/defcon_pretty() + return defcon - while(1) // More efficient than recursivly calling ourself over and over. background = 1 ensures we do not trigger an infinite loop. - iteration++ +/datum/controller/failsafe/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(src, "Initializing...") - sleep(processing_interval) + stat("Failsafe Controller:", statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])")) diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm new file mode 100644 index 00000000000..ab92ca49be7 --- /dev/null +++ b/code/controllers/globals.dm @@ -0,0 +1,69 @@ +GLOBAL_REAL(GLOB, /datum/controller/global_vars) + +/datum/controller/global_vars + name = "Global Variables" + + var/list/gvars_datum_protected_varlist + var/list/gvars_datum_in_built_vars + var/list/gvars_datum_init_order + +/datum/controller/global_vars/New() + if(GLOB) + CRASH("Multiple instances of global variable controller created") + GLOB = src + + var/datum/controller/exclude_these = new + gvars_datum_in_built_vars = exclude_these.vars + list("gvars_datum_protected_varlist", "gvars_datum_in_built_vars", "gvars_datum_init_order") + qdel(exclude_these) + + log_to_dd("[vars.len - gvars_datum_in_built_vars.len] global variables") + + Initialize() + +/datum/controller/global_vars/Destroy(force) + stack_trace("Some fucker qdel'd the global holder!") + if(!force) + return QDEL_HINT_LETMELIVE + + QDEL_NULL(statclick) + gvars_datum_protected_varlist.Cut() + gvars_datum_in_built_vars.Cut() + + GLOB = null + + return ..() + +/datum/controller/global_vars/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(src, "Initializing...") + + stat("Globals:", statclick.update("Edit")) + +/datum/controller/global_vars/can_vv_get(var_name) + if(gvars_datum_protected_varlist[var_name]) + return FALSE + return ..() + +/datum/controller/global_vars/vv_edit_var(var_name, var_value) + if(gvars_datum_protected_varlist[var_name]) + return FALSE + return ..() + +/datum/controller/global_vars/Initialize() + gvars_datum_init_order = list() + gvars_datum_protected_varlist = list("gvars_datum_protected_varlist" = TRUE) + var/list/global_procs = typesof(/datum/controller/global_vars/proc) + var/expected_len = vars.len - gvars_datum_in_built_vars.len + if(global_procs.len != expected_len) + warning("Unable to detect all global initialization procs! Expected [expected_len] got [global_procs.len]!") + if(global_procs.len) + var/list/expected_global_procs = vars - gvars_datum_in_built_vars + for(var/I in global_procs) + expected_global_procs -= replacetext("[I]", "InitGlobal", "") + log_to_dd("Missing procs: [expected_global_procs.Join(", ")]") + for(var/I in global_procs) + var/start_tick = world.time + call(src, I)() + var/end_tick = world.time + if(end_tick - start_tick) + warning("Global [replacetext("[I]", "InitGlobal", "")] slept during initialization!") \ No newline at end of file diff --git a/code/controllers/master.dm b/code/controllers/master.dm new file mode 100644 index 00000000000..6c094208926 --- /dev/null +++ b/code/controllers/master.dm @@ -0,0 +1,611 @@ + /** + * StonedMC + * + * Designed to properly split up a given tick among subsystems + * Note: if you read parts of this code and think "why is it doing it that way" + * Odds are, there is a reason + * + **/ + +//This is the ABSOLUTE ONLY THING that should init globally like this +GLOBAL_REAL(Master, /datum/controller/master) = new + +//THIS IS THE INIT ORDER +//Master -> SSPreInit -> GLOB -> world -> config -> SSInit -> Failsafe +//GOT IT MEMORIZED? + +/datum/controller/master + name = "Master" + + // Are we processing (higher values increase the processing delay by n ticks) + var/processing = TRUE + // How many times have we ran + var/iteration = 0 + + // world.time of last fire, for tracking lag outside of the mc + var/last_run + + // List of subsystems to process(). + var/list/subsystems + + // Vars for keeping track of tick drift. + var/init_timeofday + var/init_time + var/tickdrift = 0 + + var/sleep_delta = 1 + + var/make_runtime = 0 + + var/initializations_finished_with_no_players_logged_in //I wonder what this could be? + + // The type of the last subsystem to be process()'d. + var/last_type_processed + + var/datum/controller/subsystem/queue_head //Start of queue linked list + var/datum/controller/subsystem/queue_tail //End of queue linked list (used for appending to the list) + var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick + var/queue_priority_count_bg = 0 //Same, but for background subsystems + var/map_loading = FALSE //Are we loading in a new map? + + var/current_runlevel //for scheduling different subsystems for different stages of the round + var/sleep_offline_after_initializations = TRUE + + var/static/restart_clear = 0 + var/static/restart_timeout = 0 + var/static/restart_count = 0 + + var/static/random_seed + + //current tick limit, assigned before running a subsystem. + //used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits + var/static/current_ticklimit = TICK_LIMIT_RUNNING + +/datum/controller/master/New() + makeDatumRefLists() + load_configuration() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + + if(!random_seed) + random_seed = rand(1, 1e9) + rand_seed(random_seed) + + var/list/_subsystems = list() + subsystems = _subsystems + if (Master != src) + if (istype(Master)) + Recover() + qdel(Master) + else + var/list/subsytem_types = subtypesof(/datum/controller/subsystem) + sortTim(subsytem_types, /proc/cmp_subsystem_init) + for(var/I in subsytem_types) + _subsystems += new I + Master = src + + if(!GLOB) + new /datum/controller/global_vars + +/datum/controller/master/Destroy() + ..() + // Tell qdel() to Del() this object. + return QDEL_HINT_HARDDEL_NOW + +/datum/controller/master/Shutdown() + processing = FALSE + sortTim(subsystems, /proc/cmp_subsystem_init) + reverseRange(subsystems) + for(var/datum/controller/subsystem/ss in subsystems) + log_to_dd("Shutting down [ss.name] subsystem...") + ss.Shutdown() + log_to_dd("Shutdown complete") + +// Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart, +// -1 if we encountered a runtime trying to recreate it +/proc/Recreate_MC() + . = -1 //so if we runtime, things know we failed + if (world.time < Master.restart_timeout) + return 0 + if (world.time < Master.restart_clear) + Master.restart_count *= 0.5 + + var/delay = 50 * ++Master.restart_count + Master.restart_timeout = world.time + delay + Master.restart_clear = world.time + (delay * 2) + Master.processing = FALSE //stop ticking this one + try + new/datum/controller/master() + catch + return -1 + return 1 + + +/datum/controller/master/Recover() + var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" + for (var/varname in Master.vars) + switch (varname) + if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk. + continue + else + var/varval = Master.vars[varname] + if (istype(varval, /datum)) // Check if it has a type var. + var/datum/D = varval + msg += "\t [varname] = [D]([D.type])\n" + else + msg += "\t [varname] = [varval]\n" + log_to_dd(msg) + + var/datum/controller/subsystem/BadBoy = Master.last_type_processed + var/FireHim = FALSE + if(istype(BadBoy)) + msg = null + LAZYINITLIST(BadBoy.failure_strikes) + switch(++BadBoy.failure_strikes[BadBoy.type]) + if(2) + msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." + FireHim = TRUE + if(3) + msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + BadBoy.flags |= SS_NO_FIRE + if(msg) + to_chat(admins, "[msg]") + log_to_dd(msg) + + if (istype(Master.subsystems)) + if(FireHim) + Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one + subsystems = Master.subsystems + current_runlevel = Master.current_runlevel + StartProcessing(10) + else + to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") + Initialize(20, TRUE) + + +// Please don't stuff random bullshit here, +// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() +/datum/controller/master/Initialize(delay, init_sss) + set waitfor = 0 + + if(delay) + sleep(delay) + + if(init_sss) + init_subtypes(/datum/controller/subsystem, subsystems) + + to_chat(world, "Initializing subsystems...") + + // Sort subsystems by init_order, so they initialize in the correct order. + sortTim(subsystems, /proc/cmp_subsystem_init) + + var/start_timeofday = REALTIMEOFDAY + // Initialize subsystems. + current_ticklimit = config.tick_limit_mc_init + for (var/datum/controller/subsystem/SS in subsystems) + if (SS.flags & SS_NO_INIT) + continue + SS.Initialize(REALTIMEOFDAY) + CHECK_TICK + current_ticklimit = TICK_LIMIT_RUNNING + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + + var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" + to_chat(world, "[msg]") + log_to_dd(msg) + + if (!current_runlevel) + SetRunLevel(1) + + // Sort subsystems by display setting for easy access. + sortTim(subsystems, /proc/cmp_subsystem_display) + // Set world options. + if(sleep_offline_after_initializations) + world.sleep_offline = TRUE + // world.fps = CONFIG_GET(number/fps) // TIGER TODO + world.tick_lag = config.Ticklag + var/initialized_tod = REALTIMEOFDAY + sleep(1) + initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 + // Loop. + Master.StartProcessing(0) + +/datum/controller/master/proc/SetRunLevel(new_runlevel) + var/old_runlevel = current_runlevel + if(isnull(old_runlevel)) + old_runlevel = "NULL" + + testing("MC: Runlevel changed from [old_runlevel] to [new_runlevel]") + current_runlevel = log(2, new_runlevel) + 1 + if(current_runlevel < 1) + CRASH("Attempted to set invalid runlevel: [new_runlevel]") + +// Starts the mc, and sticks around to restart it if the loop ever ends. +/datum/controller/master/proc/StartProcessing(delay) + set waitfor = 0 + if(delay) + sleep(delay) + testing("Master starting processing") + var/rtn = Loop() + if (rtn > 0 || processing < 0) + return //this was suppose to happen. + //loop ended, restart the mc + log_game("MC crashed or runtimed, restarting") + message_admins("MC crashed or runtimed, restarting") + var/rtn2 = Recreate_MC() + if (rtn2 <= 0) + log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + Failsafe.defcon = 2 + +// Main loop. +/datum/controller/master/proc/Loop() + . = -1 + //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because + // local vars rock + + //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) + var/list/tickersubsystems = list() + var/list/runlevel_sorted_subsystems = list(list(), list(), list(), list(), list(), list(), list(), list()) //ensure we always have as many runlevels as we need to operate with no subsystems (8 currently) + var/timer = world.time + for (var/thing in subsystems) + var/datum/controller/subsystem/SS = thing + if (SS.flags & SS_NO_FIRE) + continue + SS.queued_time = 0 + SS.queue_next = null + SS.queue_prev = null + SS.state = SS_IDLE + if (SS.flags & SS_TICKER) + tickersubsystems += SS + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + continue + + var/ss_runlevels = SS.runlevels + var/added_to_any = FALSE + for(var/I in 1 to GLOB.bitflags.len) + if(ss_runlevels & GLOB.bitflags[I]) + while(runlevel_sorted_subsystems.len < I) + runlevel_sorted_subsystems += list(list()) + runlevel_sorted_subsystems[I] += SS + added_to_any = TRUE + if(!added_to_any) + WARNING("[SS.name] subsystem is not SS_NO_FIRE but also does not have any runlevels set!") + + queue_head = null + queue_tail = null + //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue + //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) + sortTim(tickersubsystems, /proc/cmp_subsystem_priority) + for(var/I in runlevel_sorted_subsystems) + sortTim(runlevel_sorted_subsystems, /proc/cmp_subsystem_priority) + I += tickersubsystems + + var/cached_runlevel = current_runlevel + var/list/current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] + + init_timeofday = REALTIMEOFDAY + init_time = world.time + + iteration = 1 + var/error_level = 0 + var/sleep_delta = 1 + var/list/subsystems_to_check + //the actual loop. + + while (1) + tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) + var/starting_tick_usage = TICK_USAGE + if (processing <= 0) + current_ticklimit = TICK_LIMIT_RUNNING + sleep(10) + continue + + //Anti-tick-contention heuristics: + //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later. + // (because sleeps are processed in the order received, longer sleeps are more likely to run first) + if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit. + sleep_delta *= 2 + current_ticklimit = TICK_LIMIT_RUNNING * 0.5 + sleep(world.tick_lag * (processing * sleep_delta)) + continue + + //Byond resumed us late. assume it might have to do the same next tick + if (last_run + CEILING(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time) + sleep_delta += 1 + + sleep_delta = MC_AVERAGE_FAST(sleep_delta, 1) //decay sleep_delta + + if (starting_tick_usage > (TICK_LIMIT_MC*0.75)) //we ran 3/4 of the way into the tick + sleep_delta += 1 + + //debug + if (make_runtime) + var/datum/controller/subsystem/SS + SS.can_fire = 0 + + if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) + new/datum/controller/failsafe() // (re)Start the failsafe. + + //now do the actual stuff + if (!queue_head || !(iteration % 3)) + var/checking_runlevel = current_runlevel + if(cached_runlevel != checking_runlevel) + //resechedule subsystems + cached_runlevel = checking_runlevel + current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] + var/stagger = world.time + for(var/I in current_runlevel_subsystems) + var/datum/controller/subsystem/SS = I + if(SS.next_fire <= world.time) + stagger += world.tick_lag * rand(1, 5) + SS.next_fire = stagger + + subsystems_to_check = current_runlevel_subsystems + else + subsystems_to_check = tickersubsystems + + if (CheckQueue(subsystems_to_check) <= 0) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) + log_to_dd("MC: SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + current_ticklimit = TICK_LIMIT_RUNNING + sleep(10) + continue + + if (queue_head) + if (RunQueue() <= 0) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) + log_to_dd("MC: SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + current_ticklimit = TICK_LIMIT_RUNNING + sleep(10) + continue + error_level-- + if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync + queue_priority_count = 0 + queue_priority_count_bg = 0 + + iteration++ + last_run = world.time + src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) + current_ticklimit = TICK_LIMIT_RUNNING + if (processing * sleep_delta <= world.tick_lag) + current_ticklimit -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick + sleep(world.tick_lag * (processing * sleep_delta)) + + + + +// This is what decides if something should run. +/datum/controller/master/proc/CheckQueue(list/subsystemstocheck) + . = 0 //so the mc knows if we runtimed + + //we create our variables outside of the loops to save on overhead + var/datum/controller/subsystem/SS + var/SS_flags + + for (var/thing in subsystemstocheck) + if (!thing) + subsystemstocheck -= thing + SS = thing + if (SS.state != SS_IDLE) + continue + if (SS.can_fire <= 0) + continue + if (SS.next_fire > world.time) + continue + SS_flags = SS.flags + if (SS_flags & SS_NO_FIRE) + subsystemstocheck -= SS + continue + if (!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time) + continue + SS.enqueue() + . = 1 + + +// Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage +/datum/controller/master/proc/RunQueue() + . = 0 + var/datum/controller/subsystem/queue_node + var/queue_node_flags + var/queue_node_priority + var/queue_node_paused + + var/current_tick_budget + var/tick_precentage + var/tick_remaining + var/ran = TRUE //this is right + var/ran_non_ticker = FALSE + var/bg_calc //have we swtiched current_tick_budget to background mode yet? + var/tick_usage + + //keep running while we have stuff to run and we haven't gone over a tick + // this is so subsystems paused eariler can use tick time that later subsystems never used + while (ran && queue_head && TICK_USAGE < TICK_LIMIT_MC) + ran = FALSE + bg_calc = FALSE + current_tick_budget = queue_priority_count + queue_node = queue_head + while (queue_node) + if (ran && TICK_USAGE > TICK_LIMIT_RUNNING) + break + + queue_node_flags = queue_node.flags + queue_node_priority = queue_node.queued_priority + + //super special case, subsystems where we can't make them pause mid way through + //if we can't run them this tick (without going over a tick) + //we bump up their priority and attempt to run them next tick + //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run + // in those cases, so we just let them run) + if (queue_node_flags & SS_NO_TICK_CHECK) + if (queue_node.tick_usage > TICK_LIMIT_RUNNING - TICK_USAGE && ran_non_ticker) + queue_node.queued_priority += queue_priority_count * 0.1 + queue_priority_count -= queue_node_priority + queue_priority_count += queue_node.queued_priority + current_tick_budget -= queue_node_priority + queue_node = queue_node.queue_next + continue + + if ((queue_node_flags & SS_BACKGROUND) && !bg_calc) + current_tick_budget = queue_priority_count_bg + bg_calc = TRUE + + tick_remaining = TICK_LIMIT_RUNNING - TICK_USAGE + + if (current_tick_budget > 0 && queue_node_priority > 0) + tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority) + else + tick_precentage = tick_remaining + + tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun) + + current_ticklimit = round(TICK_USAGE + tick_precentage) + + if (!(queue_node_flags & SS_TICKER)) + ran_non_ticker = TRUE + ran = TRUE + + queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING) + last_type_processed = queue_node + + queue_node.state = SS_RUNNING + + tick_usage = TICK_USAGE + var/state = queue_node.ignite(queue_node_paused) + tick_usage = TICK_USAGE - tick_usage + + if (state == SS_RUNNING) + state = SS_IDLE + current_tick_budget -= queue_node_priority + + + if (tick_usage < 0) + tick_usage = 0 + queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage-tick_precentage)) + queue_node.state = state + + if (state == SS_PAUSED) + queue_node.paused_ticks++ + queue_node.paused_tick_usage += tick_usage + queue_node = queue_node.queue_next + continue + + queue_node.ticks = MC_AVERAGE(queue_node.ticks, queue_node.paused_ticks) + tick_usage += queue_node.paused_tick_usage + + queue_node.tick_usage = MC_AVERAGE_FAST(queue_node.tick_usage, tick_usage) + + queue_node.cost = MC_AVERAGE_FAST(queue_node.cost, TICK_DELTA_TO_MS(tick_usage)) + queue_node.paused_ticks = 0 + queue_node.paused_tick_usage = 0 + + if (queue_node_flags & SS_BACKGROUND) //update our running total + queue_priority_count_bg -= queue_node_priority + else + queue_priority_count -= queue_node_priority + + queue_node.last_fire = world.time + queue_node.times_fired++ + + if (queue_node_flags & SS_TICKER) + queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) + else if (queue_node_flags & SS_POST_FIRE_TIMING) + queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) + else if (queue_node_flags & SS_KEEP_TIMING) + queue_node.next_fire += queue_node.wait + else + queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) + + queue_node.queued_time = 0 + + //remove from queue + queue_node.dequeue() + + queue_node = queue_node.queue_next + + . = 1 + +//resets the queue, and all subsystems, while filtering out the subsystem lists +// called if any mc's queue procs runtime or exit improperly. +/datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS) + . = 0 + log_to_dd("MC: SoftReset called, resetting MC queue state.") + if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) + log_to_dd("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'") + return + var/subsystemstocheck = subsystems + ticker_SS + for(var/I in runlevel_SS) + subsystemstocheck |= I + + for (var/thing in subsystemstocheck) + var/datum/controller/subsystem/SS = thing + if (!SS || !istype(SS)) + //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents + subsystems -= list(SS) + ticker_SS -= list(SS) + for(var/I in runlevel_SS) + I -= list(SS) + log_to_dd("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") + continue + if (SS.queue_next && !istype(SS.queue_next)) + log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'") + SS.queue_next = null + if (SS.queue_prev && !istype(SS.queue_prev)) + log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'") + SS.queue_prev = null + SS.queued_priority = 0 + SS.queued_time = 0 + SS.state = SS_IDLE + if (queue_head && !istype(queue_head)) + log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'") + queue_head = null + if (queue_tail && !istype(queue_tail)) + log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'") + queue_tail = null + queue_priority_count = 0 + queue_priority_count_bg = 0 + log_to_dd("MC: SoftReset: Finished.") + . = 1 + + + +/datum/controller/master/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(src, "Initializing...") + + stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))") + stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")) + +/datum/controller/master/StartLoadingMap() + //disallow more than one map to load at once, multithreading it will just cause race conditions + while(map_loading) + stoplag() + for(var/S in subsystems) + var/datum/controller/subsystem/SS = S + SS.StartLoadingMap() + map_loading = TRUE + +/datum/controller/master/StopLoadingMap(bounds = null) + map_loading = FALSE + for(var/S in subsystems) + var/datum/controller/subsystem/SS = S + SS.StopLoadingMap() + + +/datum/controller/master/proc/UpdateTickRate() + if (!processing) + return + var/client_count = length(clients) + if (client_count < config.disable_high_pop_mc_mode_amount) + processing = config.base_mc_tick_rate + else if (client_count > config.high_pop_mc_mode_amount) + processing = config.high_pop_mc_tick_rate diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 2dc0e38e66c..cfaa3f825e7 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -1,6 +1,6 @@ -//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one. -//It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) -//WIP, needs lots of work still +// old deprecated rusted piece of shit MC +// All this does now is misc. world init stuff because too lazy to put it somewhere else +// It used to run all of the repeating processes controlling the game but now the SMC and Process Scheduler do that var/global/datum/controller/game_controller/master_controller //Set in world.New() @@ -10,16 +10,6 @@ var/global/last_tick_duration = 0 var/global/air_processing_killed = 0 var/global/pipe_processing_killed = 0 -/datum/controller - var/processing = 0 - var/iteration = 0 - var/processing_interval = 0 - - // Dummy object to let us click it to debug while in the stat panel - var/obj/effect/statclick/debug/statclick - -/datum/controller/proc/recover() // If we are replacing an existing controller (due to a crash) we attempt to preserve as much as we can. - /datum/controller/game_controller var/list/shuttle_list // For debugging and VV @@ -46,8 +36,6 @@ var/global/pipe_processing_killed = 0 return QDEL_HINT_HARDDEL_NOW /datum/controller/game_controller/proc/setup() - world.tick_lag = config.Ticklag - preloadTemplates() if(!config.disable_away_missions) createRandomZlevel() diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm new file mode 100644 index 00000000000..0ffd9e09d35 --- /dev/null +++ b/code/controllers/subsystem.dm @@ -0,0 +1,215 @@ + +/datum/controller/subsystem + // Metadata; you should define these. + name = "fire coderbus" //name of the subsystem + var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. + var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. + var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + + var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) + + var/initialized = FALSE //set to TRUE after it has been initialized, will obviously never be set if the subsystem doesn't initialize + + //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later + // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list + var/can_fire = TRUE + + // Bookkeeping variables; probably shouldn't mess with these. + var/last_fire = 0 //last world.time we called fire() + var/next_fire = 0 //scheduled world.time for next fire() + var/cost = 0 //average time to execute + var/tick_usage = 0 //average tick usage + var/tick_overrun = 0 //average tick overrun + var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc. + var/paused_ticks = 0 //ticks this ss is taking to run right now. + var/paused_tick_usage //total tick_usage of all of our runs while pausing this run + var/ticks = 1 //how many ticks does this ss take to run on avg. + var/times_fired = 0 //number of times we have called fire() + var/queued_time = 0 //time we entered the queue, (for timing and priority reasons) + var/queued_priority //we keep a running total to make the math easier, if priority changes mid-fire that would break our running total, so we store it here + //linked list stuff for the queue + var/datum/controller/subsystem/queue_next + var/datum/controller/subsystem/queue_prev + + var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire + + var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! + +//Do not override +///datum/controller/subsystem/New() + +// Used to initialize the subsystem BEFORE the map has loaded +// Called AFTER Recover if that is called +// Prefer to use Initialize if possible +/datum/controller/subsystem/proc/PreInit() + return + +//This is used so the mc knows when the subsystem sleeps. do not override. +/datum/controller/subsystem/proc/ignite(resumed = 0) + set waitfor = 0 + . = SS_SLEEPING + fire(resumed) + . = state + if (state == SS_SLEEPING) + state = SS_IDLE + if (state == SS_PAUSING) + var/QT = queued_time + enqueue() + state = SS_PAUSED + queued_time = QT + +//previously, this would have been named 'process()' but that name is used everywhere for different things! +//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. +//Sleeping in here prevents future fires until returned. +/datum/controller/subsystem/proc/fire(resumed = 0) + flags |= SS_NO_FIRE + throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.") + +/datum/controller/subsystem/Destroy() + dequeue() + can_fire = 0 + flags |= SS_NO_FIRE + Master.subsystems -= src + return ..() + +//Queue it to run. +// (we loop thru a linked list until we get to the end or find the right point) +// (this lets us sort our run order correctly without having to re-sort the entire already sorted list) +/datum/controller/subsystem/proc/enqueue() + var/SS_priority = priority + var/SS_flags = flags + var/datum/controller/subsystem/queue_node + var/queue_node_priority + var/queue_node_flags + + for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) + queue_node_priority = queue_node.queued_priority + queue_node_flags = queue_node.flags + + if (queue_node_flags & SS_TICKER) + if (!(SS_flags & SS_TICKER)) + continue + if (queue_node_priority < SS_priority) + break + + else if (queue_node_flags & SS_BACKGROUND) + if (!(SS_flags & SS_BACKGROUND)) + break + if (queue_node_priority < SS_priority) + break + + else + if (SS_flags & SS_BACKGROUND) + continue + if (SS_flags & SS_TICKER) + break + if (queue_node_priority < SS_priority) + break + + queued_time = world.time + queued_priority = SS_priority + state = SS_QUEUED + if (SS_flags & SS_BACKGROUND) //update our running total + Master.queue_priority_count_bg += SS_priority + else + Master.queue_priority_count += SS_priority + + queue_next = queue_node + if (!queue_node)//we stopped at the end, add to tail + queue_prev = Master.queue_tail + if (Master.queue_tail) + Master.queue_tail.queue_next = src + else //empty queue, we also need to set the head + Master.queue_head = src + Master.queue_tail = src + + else if (queue_node == Master.queue_head)//insert at start of list + Master.queue_head.queue_prev = src + Master.queue_head = src + queue_prev = null + else + queue_node.queue_prev.queue_next = src + queue_prev = queue_node.queue_prev + queue_node.queue_prev = src + + +/datum/controller/subsystem/proc/dequeue() + if (queue_next) + queue_next.queue_prev = queue_prev + if (queue_prev) + queue_prev.queue_next = queue_next + if (src == Master.queue_tail) + Master.queue_tail = queue_prev + if (src == Master.queue_head) + Master.queue_head = queue_next + queued_time = 0 + if (state == SS_QUEUED) + state = SS_IDLE + + +/datum/controller/subsystem/proc/pause() + . = 1 + switch(state) + if(SS_RUNNING) + state = SS_PAUSED + if(SS_SLEEPING) + state = SS_PAUSING + + +//used to initialize the subsystem AFTER the map has loaded +/datum/controller/subsystem/Initialize(start_timeofday) + initialized = TRUE + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!" + to_chat(world, "[msg]") + log_to_dd(msg) + return time + +//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. +/datum/controller/subsystem/stat_entry(msg) + if(!statclick) + statclick = new/obj/effect/statclick/debug(src, "Initializing...") + + if(can_fire && !(SS_NO_FIRE & flags)) + msg = "[round(cost,1)]ms|[round(tick_usage,1)]%([round(tick_overrun,1)]%)|[round(ticks,0.1)]\t[msg]" + else + msg = "OFFLINE\t[msg]" + + var/title = name + if (can_fire) + title = "\[[state_letter()]][title]" + + stat(title, statclick.update(msg)) + +/datum/controller/subsystem/proc/state_letter() + switch (state) + if (SS_RUNNING) + . = "R" + if (SS_QUEUED) + . = "Q" + if (SS_PAUSED, SS_PAUSING) + . = "P" + if (SS_SLEEPING) + . = "S" + if (SS_IDLE) + . = " " + +//could be used to postpone a costly subsystem for (default one) var/cycles, cycles +//for instance, during cpu intensive operations like explosions +/datum/controller/subsystem/proc/postpone(cycles = 1) + if(next_fire - world.time < wait) + next_fire += (wait*cycles) + +//usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) +//should attempt to salvage what it can from the old instance of subsystem +/datum/controller/subsystem/Recover() + +/datum/controller/subsystem/vv_edit_var(var_name, var_value) + switch (var_name) + if ("can_fire") + //this is so the subsystem doesn't rapid fire to make up missed ticks causing more lag + if (var_value) + next_fire = world.time + wait + if ("queued_priority") //editing this breaks things. + return 0 + . = ..() diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 1cc9787420d..4ea43a02e08 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -17,7 +17,10 @@ message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Jobs","Sun","Radio","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Alarm","Scheduler","Nano","Vote","Diseases","Fires","Mob","NPC AI","Shuttle","Timer","Weather","Space","Mob Hunt Server")) +/client/proc/debug_controller(controller in list("Master", + "failsafe","Scheduler","StonedMaster","Ticker","Air","Jobs","Sun","Radio","Configuration","pAI", + "Cameras","Garbage", "Transfer Controller","Event","Alarm","Nano","Vote","Fires", + "Mob","NPC AI","Shuttle","Timer","Weather","Space","Mob Hunt Server")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -28,8 +31,14 @@ debug_variables(master_controller) feedback_add_details("admin_verb","DMC") if("failsafe") - debug_variables(failsafe) + debug_variables(Failsafe) feedback_add_details("admin_verb", "dfailsafe") + if("Scheduler") + debug_variables(processScheduler) + feedback_add_details("admin_verb","DprocessScheduler") + if("StonedMaster") + debug_variables(Master) + feedback_add_details("admin_verb","Dsmc") if("Ticker") debug_variables(ticker) feedback_add_details("admin_verb","DTicker") @@ -63,9 +72,6 @@ if("Garbage") debug_variables(garbageCollector) feedback_add_details("admin_verb","DGarbage") - if("Scheduler") - debug_variables(processScheduler) - feedback_add_details("admin_verb","DprocessScheduler") if("Nano") debug_variables(nanomanager) feedback_add_details("admin_verb","DNano") diff --git a/code/datums/statclick.dm b/code/datums/statclick.dm index e10a63b8356..c7273e4744b 100644 --- a/code/datums/statclick.dm +++ b/code/datums/statclick.dm @@ -5,8 +5,8 @@ var/target /obj/effect/statclick/New(ntarget, text) - name = text target = ntarget + name = text /obj/effect/statclick/proc/update(text) name = text @@ -15,25 +15,22 @@ /obj/effect/statclick/debug var/class -/obj/effect/statclick/debug/New(ntarget) - name = "Initializing..." - target = ntarget - if(istype(target, /datum/controller/process)) - class = "process" - else if(istype(target, /datum/controller/processScheduler)) - class = "scheduler" - else if(istype(target, /datum/controller)) - class = "controller" - else if(istype(target, /datum)) - class = "datum" - else - class = "unknown" - -// This bit is called when clicked in the stat panel /obj/effect/statclick/debug/Click() - if(!is_admin(usr)) + if(!is_admin(usr) || !target) return + if(!class) + if(istype(target, /datum/controller/process)) + class = "process" + else if(istype(target, /datum/controller/processScheduler)) + class = "scheduler" + if(istype(target, /datum/controller/subsystem)) + class = "subsystem" + else if(istype(target, /datum/controller)) + class = "controller" + else if(istype(target, /datum)) + class = "datum" + else + class = "unknown" usr.client.debug_variables(target) - - message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") + message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") \ No newline at end of file diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index fb4ba668bef..6612f1e7192 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -55,6 +55,7 @@ var/round_start_time = 0 if(pregame_timeleft <= 0) current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) while(!setup()) /datum/controller/gameticker/proc/votetimer() @@ -77,6 +78,7 @@ var/round_start_time = 0 runnable_modes = config.get_runnable_modes() if(runnable_modes.len==0) current_state = GAME_STATE_PREGAME + Master.SetRunLevel(RUNLEVEL_LOBBY) to_chat(world, "Unable to choose playable game mode. Reverting to pre-game lobby.") return 0 if(secret_force_mode != "secret") @@ -96,6 +98,7 @@ var/round_start_time = 0 mode = null current_state = GAME_STATE_PREGAME job_master.ResetOccupations() + Master.SetRunLevel(RUNLEVEL_LOBBY) return 0 //Configure mode and assign player to special mode stuff @@ -108,6 +111,7 @@ var/round_start_time = 0 current_state = GAME_STATE_PREGAME to_chat(world, "Error setting up [master_mode]. Reverting to pre-game lobby.") job_master.ResetOccupations() + Master.SetRunLevel(RUNLEVEL_LOBBY) return 0 if(hide_mode) @@ -125,6 +129,7 @@ var/round_start_time = 0 equip_characters() data_core.manifest() current_state = GAME_STATE_PLAYING + Master.SetRunLevel(RUNLEVEL_GAME) callHook("roundstart") @@ -385,6 +390,7 @@ var/round_start_time = 0 if((!mode.explosion_in_progress && game_finished) || force_ending) current_state = GAME_STATE_FINISHED + Master.SetRunLevel(RUNLEVEL_POSTGAME) auto_toggle_ooc(1) // Turn it on spawn declare_completion() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a98540b0a2d..06bd75f39e8 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -946,6 +946,25 @@ var/list/slot_equipment_priority = list( \ if(processScheduler) processScheduler.statProcesses() + if(statpanel("MC")) //looking at that panel + var/turf/T = get_turf(client.eye) + stat("Location:", COORD(T)) + stat("CPU:", "[world.cpu]") + stat("Instances:", "[num2text(world.contents.len, 10)]") + GLOB.stat_entry() + stat(null) + if(Master) + Master.stat_entry() + else + stat("Master Controller:", "ERROR") + if(Failsafe) + Failsafe.stat_entry() + else + stat("Failsafe Controller:", "ERROR") + if(Master) + stat(null) + for(var/datum/controller/subsystem/SS in Master.subsystems) + SS.stat_entry() statpanel("Status") // Switch to the Status panel again, for the sake of the lazy Stat procs diff --git a/code/world.dm b/code/world.dm index b9063683763..9614373c901 100644 --- a/code/world.dm +++ b/code/world.dm @@ -4,9 +4,6 @@ var/global/datum/global_init/init = new () Pre-map initialization stuff should go here. */ /datum/global_init/New() - - makeDatumRefLists() - load_configuration() setLog() del(src) @@ -37,6 +34,7 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG timezoneOffset = text2num(time2text(0,"hh")) * 36000 + callHook("startup") src.update_status() @@ -48,6 +46,8 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG space_manager.initialize() //Before the MC starts up + Master.Initialize(10, FALSE) + processScheduler = new master_controller = new /datum/controller/game_controller() spawn(1) diff --git a/paradise.dme b/paradise.dme index fe4daedb1ee..b46d43f0b7e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -15,6 +15,7 @@ #include "code\_compile_options.dm" #include "code\hub.dm" #include "code\world.dm" +#include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_readme.dm" #include "code\__DEFINES\admin.dm" #include "code\__DEFINES\atmospherics.dm" @@ -38,6 +39,7 @@ #include "code\__DEFINES\lighting.dm" #include "code\__DEFINES\machines.dm" #include "code\__DEFINES\math.dm" +#include "code\__DEFINES\MC.dm" #include "code\__DEFINES\misc.dm" #include "code\__DEFINES\mob.dm" #include "code\__DEFINES\pda.dm" @@ -52,12 +54,14 @@ #include "code\__DEFINES\sound.dm" #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\status_effects.dm" +#include "code\__DEFINES\subsystems.dm" #include "code\__DEFINES\tick.dm" #include "code\__DEFINES\typeids.dm" #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\zlevel.dm" #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\AnimationLibrary.dm" +#include "code\__HELPERS\cmp.dm" #include "code\__HELPERS\constants.dm" #include "code\__HELPERS\experimental.dm" #include "code\__HELPERS\files.dm" @@ -78,6 +82,10 @@ #include "code\__HELPERS\type2type.dm" #include "code\__HELPERS\unique_ids.dm" #include "code\__HELPERS\unsorted.dm" +#include "code\__HELPERS\sorts\__main.dm" +#include "code\__HELPERS\sorts\InsertSort.dm" +#include "code\__HELPERS\sorts\MergeSort.dm" +#include "code\__HELPERS\sorts\TimSort.dm" #include "code\_DATASTRUCTURES\heap.dm" #include "code\_DATASTRUCTURES\linked_lists.dm" #include "code\_DATASTRUCTURES\priority_queue.dm" @@ -169,10 +177,14 @@ #include "code\ATMOSPHERICS\pipes\simple\pipe_simple_visible.dm" #include "code\controllers\communications.dm" #include "code\controllers\configuration.dm" +#include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\globals.dm" #include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" +#include "code\controllers\master.dm" #include "code\controllers\master_controller.dm" +#include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" #include "code\controllers\Processes\air.dm" From dca16e60cfe55424b15009059c72b52bbd18de03 Mon Sep 17 00:00:00 2001 From: tigercat2000 Date: Fri, 2 Mar 2018 23:58:57 -0800 Subject: [PATCH 02/32] PS -> SMC Ports: LINDA, Spacedrift, Throwing This commit ports LINDA, spacedrifting, and throwing to the SMC. --- code/ATMOSPHERICS/atmospherics.dm | 4 +- .../unary_devices/heat_exchanger.dm | 6 +- code/ATMOSPHERICS/datum_pipeline.dm | 5 +- code/LINDA/LINDA_fire.dm | 8 +- code/LINDA/LINDA_system.dm | 6 +- code/LINDA/LINDA_turf_tile.dm | 65 ++- code/__HELPERS/unsorted.dm | 10 +- code/_globalvars/lists/objects.dm | 1 - code/controllers/master_controller.dm | 22 - code/controllers/subsystem/air.dm | 398 ++++++++++++++++++ code/controllers/subsystem/spacedrift.dm | 59 +++ code/controllers/subsystem/throwing.dm | 149 +++++++ code/controllers/verbs.dm | 2 +- code/game/atoms_movable.dm | 7 +- code/game/machinery/atmo_control.dm | 4 +- code/game/machinery/atmoalter/meter.dm | 4 +- .../atmoalter/portable_atmospherics.dm | 4 +- code/game/machinery/atmoalter/zvent.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 2 +- code/game/turfs/turf.dm | 20 +- code/modules/awaymissions/zlevel.dm | 4 +- .../mapGeneratorModules/helpers.dm | 4 +- code/modules/shuttle/shuttle.dm | 8 +- code/world.dm | 1 - paradise.dme | 6 +- 25 files changed, 703 insertions(+), 100 deletions(-) create mode 100644 code/controllers/subsystem/air.dm create mode 100644 code/controllers/subsystem/spacedrift.dm create mode 100644 code/controllers/subsystem/throwing.dm diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index b2f58691818..23eead0c4bf 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -33,7 +33,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/New() ..() - atmos_machinery += src + SSair.atmos_machinery += src if(!icon_manager) icon_manager = new() @@ -54,7 +54,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/Destroy() QDEL_NULL(stored) - atmos_machinery -= src + SSair.atmos_machinery -= src for(var/mob/living/L in src) //ventcrawling is serious business L.remove_ventcrawl() L.forceMove(get_turf(src)) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm index 1b726a6c066..496413c881c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm @@ -37,11 +37,11 @@ if(!partner) return 0 - if(!air_master || air_master.current_cycle <= update_cycle) + if(!SSair || SSair.times_fired <= update_cycle) return 0 - update_cycle = air_master.current_cycle - partner.update_cycle = air_master.current_cycle + update_cycle = SSair.times_fired + partner.update_cycle = SSair.times_fired var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner.air_contents.heat_capacity() diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 156d6ffa851..cd3cdfffb53 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -1,4 +1,3 @@ -var/global/list/pipe_networks = list() var/global/list/deferred_pipenet_rebuilds = list() /datum/pipeline @@ -13,10 +12,10 @@ var/global/list/deferred_pipenet_rebuilds = list() var/alert_pressure = 0 /datum/pipeline/New() - pipe_networks += src + SSair.networks += src /datum/pipeline/Destroy() - pipe_networks -= src + SSair.networks -= src if(air && air.volume) temporarily_store_air() for(var/obj/machinery/atmospherics/pipe/P in members) diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index d5ab43d4ab3..11ecc8f10e3 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -34,9 +34,9 @@ active_hotspot.temperature = exposed_temperature active_hotspot.volume = exposed_volume - active_hotspot.just_spawned = (current_cycle < air_master.current_cycle) + active_hotspot.just_spawned = (current_cycle < SSair.times_fired) //remove just_spawned protection if no longer processing this cell - air_master.add_to_active(src, 0) + SSair.add_to_active(src, 0) return igniting //This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile @@ -58,7 +58,7 @@ /obj/effect/hotspot/New() ..() - air_master.hotspots += src + SSair.hotspots += src perform_exposure() dir = pick(cardinal) air_update_turf() @@ -154,7 +154,7 @@ /obj/effect/hotspot/Destroy() set_light(0) - air_master.hotspots -= src + SSair.hotspots -= src DestroyTurf() if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index cbb3c546990..c9d168a0159 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -126,8 +126,8 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5) /turf/proc/air_update_turf(var/command = 0) if(command) CalculateAdjacentTurfs() - if(air_master) - air_master.add_to_active(src,command) + if(SSair) + SSair.add_to_active(src,command) /atom/movable/proc/move_update_air(var/turf/T) if(istype(T,/turf)) @@ -184,4 +184,4 @@ var/const/SPAWN_AIR = 256 G.nitrogen += MOLES_N2STANDARD * amount air.merge(G) - air_master.add_to_active(src, 0) + SSair.add_to_active(src, 0) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index a2414d9cac3..e10e53859d7 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -141,9 +141,9 @@ /turf/simulated/proc/process_cell() - if(archived_cycle < air_master.current_cycle) //archive self if not already done + if(archived_cycle < SSair.times_fired) //archive self if not already done archive() - current_cycle = air_master.current_cycle + current_cycle = SSair.times_fired var/remove = 1 //set by non simulated turfs who are sharing with this turf @@ -184,7 +184,7 @@ share_air(enemy_simulated) //share else if(!air.compare(enemy_simulated.air)) //compare if - air_master.add_to_active(enemy_simulated) //excite enemy + SSair.add_to_active(enemy_simulated) //excite enemy if(excited_group) excited_group.add_turf(enemy_simulated) //add enemy to group else @@ -227,14 +227,14 @@ update_visuals() if(!excited_group && remove == 1) - air_master.remove_from_active(src) + SSair.remove_from_active(src) /turf/simulated/proc/archive() if(air) //For open space like floors air.archive() temperature_archived = temperature - archived_cycle = air_master.current_cycle + archived_cycle = SSair.times_fired /turf/simulated/proc/update_visuals() if(icy && !icyoverlay) @@ -288,7 +288,7 @@ last_share_check() /turf/proc/consider_pressure_difference(var/turf/simulated/T, var/difference) - air_master.high_pressure_delta |= src + SSair.high_pressure_delta |= src if(difference > pressure_difference) pressure_direction = get_dir(src, T) pressure_difference = difference @@ -309,24 +309,24 @@ /atom/movable/var/last_forced_movement = 0 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction) - if(last_forced_movement >= air_master.current_cycle) + if(last_forced_movement >= SSair.times_fired) return 0 else if(!anchored && !pulledby) if(pressure_difference >= throw_pressure_limit) var/general_direction = get_edge_target_turf(src, direction) - if(last_forced_movement + 10 < air_master.current_cycle && is_valid_tochat_target(src)) //the first check prevents spamming throw to_chat + if(last_forced_movement + 10 < SSair.times_fired && is_valid_tochat_target(src)) //the first check prevents spamming throw to_chat to_chat(src, "The pressure sends you flying!") if(ishuman(src)) var/mob/living/carbon/human/H = src H.Weaken(min(pressure_difference / 50, 2)) spawn() throw_at(general_direction, pressure_difference / 10, pressure_difference / 200, null, 0, 0, null) - last_forced_movement = air_master.current_cycle + last_forced_movement = SSair.times_fired return 1 else if(pressure_difference > pressure_resistance) spawn() step(src, direction) - last_forced_movement = air_master.current_cycle + last_forced_movement = SSair.times_fired return 1 return 0 @@ -337,8 +337,8 @@ var/breakdown_cooldown = 0 /datum/excited_group/New() - if(air_master) - air_master.excited_groups += src + if(SSair) + SSair.excited_groups += src /datum/excited_group/proc/add_turf(var/turf/simulated/T) turf_list += T @@ -348,13 +348,13 @@ /datum/excited_group/proc/merge_groups(var/datum/excited_group/E) if(turf_list.len > E.turf_list.len) - air_master.excited_groups -= E + SSair.excited_groups -= E for(var/turf/simulated/T in E.turf_list) T.excited_group = src turf_list += T reset_cooldowns() else - air_master.excited_groups -= src + SSair.excited_groups -= src for(var/turf/simulated/T in turf_list) T.excited_group = E E.turf_list += T @@ -400,14 +400,14 @@ T.excited = 0 T.recently_active = 0 T.excited_group = null - air_master.active_turfs -= T + SSair.active_turfs -= T garbage_collect() /datum/excited_group/proc/garbage_collect() for(var/turf/simulated/T in turf_list) T.excited_group = null turf_list.Cut() - air_master.excited_groups -= src + SSair.excited_groups -= src @@ -424,7 +424,7 @@ turf/simulated/proc/super_conduct() //Does not participate in air exchange, so will conduct heat across all four borders at this time conductivity_directions = NORTH|SOUTH|EAST|WEST - if(archived_cycle < air_master.current_cycle) + if(archived_cycle < SSair.times_fired) archive() else //Does particate in air exchange so only consider directions not considered during process_cell() @@ -444,7 +444,7 @@ turf/simulated/proc/super_conduct() if(istype(neighbor, /turf/simulated)) //anything under this subtype will share in the exchange var/turf/simulated/T = neighbor - if(T.archived_cycle < air_master.current_cycle) + if(T.archived_cycle < SSair.times_fired) T.archive() if(T.air) @@ -452,7 +452,7 @@ turf/simulated/proc/super_conduct() air.temperature_share(T.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) else //Solid but neighbor is open T.air.temperature_turf_share(src, T.thermal_conductivity) - air_master.add_to_active(T, 0) + SSair.add_to_active(T, 0) else if(air) //Open but neighbor is solid air.temperature_turf_share(T, T.thermal_conductivity) @@ -476,12 +476,12 @@ turf/simulated/proc/super_conduct() //Make sure still hot enough to continue conducting heat if(air.temperature < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION) - air_master.active_super_conductivity -= src + SSair.active_super_conductivity -= src return 0 else if(temperature < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION) - air_master.active_super_conductivity -= src + SSair.active_super_conductivity -= src return 0 turf/simulated/proc/consider_superconductivity(starting) @@ -497,7 +497,7 @@ turf/simulated/proc/consider_superconductivity(starting) if(temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)) return 0 - air_master.active_super_conductivity |= src + SSair.active_super_conductivity |= src return 1 turf/simulated/proc/radiate_to_spess() //Radiate excess tile heat to space @@ -508,3 +508,24 @@ turf/simulated/proc/radiate_to_spess() //Radiate excess tile heat to space var/heat = thermal_conductivity*delta_temperature* \ (heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here temperature -= heat/heat_capacity + +/turf/proc/Initialize_Atmos(times_fired) + CalculateAdjacentTurfs() + +/turf/simulated/Initialize_Atmos(times_fired) + ..() + update_visuals() + for(var/direction in cardinal) + if(!(atmos_adjacent_turfs & direction)) + continue + var/turf/enemy_tile = get_step(src, direction) + if(istype(enemy_tile, /turf/simulated)) + var/turf/simulated/enemy_simulated = enemy_tile + if(!air.compare(enemy_simulated.air)) + excited = 1 + SSair.active_turfs |= src + break + else + if(!air.check_turf_total(enemy_tile)) + excited = 1 + SSair.active_turfs |= src \ No newline at end of file diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f1ee4e5415f..852f656705c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -777,15 +777,15 @@ proc/GaussRandRound(var/sigma,var/roundto) if(toupdate.len) for(var/turf/simulated/T1 in toupdate) - air_master.remove_from_active(T1) + SSair.remove_from_active(T1) T1.CalculateAdjacentTurfs() - air_master.add_to_active(T1,1) + SSair.add_to_active(T1,1) if(fromupdate.len) for(var/turf/simulated/T2 in fromupdate) - air_master.remove_from_active(T2) + SSair.remove_from_active(T2) T2.CalculateAdjacentTurfs() - air_master.add_to_active(T2,1) + SSair.add_to_active(T2,1) @@ -941,7 +941,7 @@ proc/GaussRandRound(var/sigma,var/roundto) if(toupdate.len) for(var/turf/simulated/T1 in toupdate) T1.CalculateAdjacentTurfs() - air_master.add_to_active(T1,1) + SSair.add_to_active(T1,1) return copiedobjs diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index cb1ce8f10a7..0cc712799c7 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -19,7 +19,6 @@ var/global/list/all_areas = list() var/global/list/machines = list() var/global/list/machine_processing = list() var/global/list/fast_processing = list() -var/global/list/atmos_machinery = list() var/global/list/processing_power_items = list() //items that ask to be called every cycle var/global/list/rcd_list = list() //list of Rapid Construction Devices. diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index cfaa3f825e7..11cd37343fe 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -82,26 +82,4 @@ var/global/pipe_processing_killed = 0 count++ log_startup_progress(" Initialized [count] objects in [stop_watch(watch)]s.") - watch = start_watch() - count = 0 - log_startup_progress("Initializing atmospherics machinery...") - for(var/obj/machinery/atmospherics/unary/U in machines) - if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) - var/obj/machinery/atmospherics/unary/vent_pump/T = U - T.broadcast_status() - count++ - else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) - var/obj/machinery/atmospherics/unary/vent_scrubber/T = U - T.broadcast_status() - count++ - log_startup_progress(" Initialized [count] atmospherics machines in [stop_watch(watch)]s.") - - watch = start_watch() - count = 0 - log_startup_progress("Initializing pipe networks...") - for(var/obj/machinery/atmospherics/machine in machines) - machine.build_network() - count++ - log_startup_progress(" Initialized [count] pipes in [stop_watch(watch)]s.") - log_startup_progress("Finished object initializations in [stop_watch(overwatch)]s.") diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm new file mode 100644 index 00000000000..732863cfc13 --- /dev/null +++ b/code/controllers/subsystem/air.dm @@ -0,0 +1,398 @@ +#define SSAIR_DEFERREDPIPENETS 1 +#define SSAIR_PIPENETS 2 +#define SSAIR_ATMOSMACHINERY 3 +#define SSAIR_ACTIVETURFS 4 +#define SSAIR_EXCITEDGROUPS 5 +#define SSAIR_HIGHPRESSURE 6 +#define SSAIR_HOTSPOTS 7 +#define SSAIR_SUPERCONDUCTIVITY 8 + +SUBSYSTEM_DEF(air) + name = "Atmospherics" + init_order = INIT_ORDER_AIR + priority = FIRE_PRIORITY_AIR + wait = 5 + flags = SS_BACKGROUND + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/cost_turfs = 0 + var/cost_groups = 0 + var/cost_highpressure = 0 + var/cost_hotspots = 0 + var/cost_superconductivity = 0 + var/cost_pipenets = 0 + var/cost_deferred_pipenets = 0 + var/cost_atmos_machinery = 0 + + var/list/excited_groups = list() + var/list/active_turfs = list() + var/list/hotspots = list() + var/list/networks = list() + var/list/atmos_machinery = list() + var/list/pipe_init_dirs_cache = list() + + + + //Special functions lists + var/list/active_super_conductivity = list() + var/list/high_pressure_delta = list() + + + var/list/currentrun = list() + var/currentpart = SSAIR_PIPENETS + +/datum/controller/subsystem/air/stat_entry(msg) + msg += "C:{" + msg += "AT:[round(cost_turfs,1)]|" + msg += "EG:[round(cost_groups,1)]|" + msg += "HP:[round(cost_highpressure,1)]|" + msg += "HS:[round(cost_hotspots,1)]|" + msg += "SC:[round(cost_superconductivity,1)]|" + msg += "PN:[round(cost_pipenets,1)]|" + msg += "DPN:[round(cost_deferred_pipenets,1)]|" + msg += "AM:[round(cost_atmos_machinery,1)]" + msg += "} " + msg += "AT:[active_turfs.len]|" + msg += "EG:[excited_groups.len]|" + msg += "HS:[hotspots.len]|" + msg += "PN:[networks.len]|" + msg += "HP:[high_pressure_delta.len]|" + msg += "AS:[active_super_conductivity.len]|" + msg += "AT/MS:[round((cost ? active_turfs.len/cost : 0),0.1)]" + ..(msg) + + +/datum/controller/subsystem/air/Initialize(timeofday) + setup_overlays() // Assign icons and such for gas-turf-overlays + setup_allturfs() + setup_atmos_machinery() + setup_pipenets() + ..() + + +/datum/controller/subsystem/air/fire(resumed = 0) + var/timer = TICK_USAGE_REAL + + if(currentpart == SSAIR_DEFERREDPIPENETS || !resumed) + process_deferred_pipenets(resumed) + cost_deferred_pipenets = MC_AVERAGE(cost_deferred_pipenets, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_PIPENETS + + if(currentpart == SSAIR_PIPENETS || !resumed) + process_pipenets(resumed) + cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_ATMOSMACHINERY + + if(currentpart == SSAIR_ATMOSMACHINERY) + timer = TICK_USAGE_REAL + process_atmos_machinery(resumed) + cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_ACTIVETURFS + + if(currentpart == SSAIR_ACTIVETURFS) + timer = TICK_USAGE_REAL + process_active_turfs(resumed) + cost_turfs = MC_AVERAGE(cost_turfs, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_EXCITEDGROUPS + + if(currentpart == SSAIR_EXCITEDGROUPS) + timer = TICK_USAGE_REAL + process_excited_groups(resumed) + cost_groups = MC_AVERAGE(cost_groups, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_HIGHPRESSURE + + if(currentpart == SSAIR_HIGHPRESSURE) + timer = TICK_USAGE_REAL + process_high_pressure_delta(resumed) + cost_highpressure = MC_AVERAGE(cost_highpressure, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_HOTSPOTS + + if(currentpart == SSAIR_HOTSPOTS) + timer = TICK_USAGE_REAL + process_hotspots(resumed) + cost_hotspots = MC_AVERAGE(cost_hotspots, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_SUPERCONDUCTIVITY + + if(currentpart == SSAIR_SUPERCONDUCTIVITY) + timer = TICK_USAGE_REAL + process_super_conductivity(resumed) + cost_superconductivity = MC_AVERAGE(cost_superconductivity, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + currentpart = SSAIR_PIPENETS + +/datum/controller/subsystem/air/proc/process_deferred_pipenets(resumed = 0) + if (!resumed) + src.currentrun = deferred_pipenet_rebuilds.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/machinery/atmospherics/A = currentrun[currentrun.len] + currentrun.len-- + if(A) + A.build_network() + else + deferred_pipenet_rebuilds.Remove(A) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_pipenets(resumed = 0) + if (!resumed) + src.currentrun = networks.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/pipeline/thing = currentrun[currentrun.len] + currentrun.len-- + if(thing) + thing.process() + else + networks.Remove(thing) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = 0) + var/seconds = wait * 0.1 + if (!resumed) + src.currentrun = atmos_machinery.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/machinery/M = currentrun[currentrun.len] + currentrun.len-- + if(!M || (M.process_atmos(seconds) == PROCESS_KILL)) + atmos_machinery.Remove(M) + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_super_conductivity(resumed = 0) + if (!resumed) + src.currentrun = active_super_conductivity.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/turf/simulated/T = currentrun[currentrun.len] + currentrun.len-- + T.super_conduct() + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_hotspots(resumed = 0) + if (!resumed) + src.currentrun = hotspots.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/obj/effect/hotspot/H = currentrun[currentrun.len] + currentrun.len-- + if (H) + H.process() + else + hotspots -= H + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_high_pressure_delta(resumed = 0) + while (high_pressure_delta.len) + var/turf/simulated/T = high_pressure_delta[high_pressure_delta.len] + high_pressure_delta.len-- + T.high_pressure_movements() + T.pressure_difference = 0 + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_active_turfs(resumed = 0) + //cache for sanic speed + var/fire_count = times_fired + if (!resumed) + src.currentrun = active_turfs.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/turf/simulated/T = currentrun[currentrun.len] + currentrun.len-- + if (T) + T.process_cell(fire_count) + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/process_excited_groups(resumed = 0) + if (!resumed) + src.currentrun = excited_groups.Copy() + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/excited_group/EG = currentrun[currentrun.len] + currentrun.len-- + EG.breakdown_cooldown++ + if(EG.breakdown_cooldown == 10) + EG.self_breakdown() + else if(EG.breakdown_cooldown >= 20) + EG.dismantle() + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/air/proc/remove_from_active(turf/simulated/T) + active_turfs -= T + if(currentpart == SSAIR_ACTIVETURFS) + currentrun -= T + if(istype(T)) + T.excited = 0 + if(T.excited_group) + T.excited_group.garbage_collect() + +/datum/controller/subsystem/air/proc/add_to_active(turf/simulated/T, blockchanges = 1) + if(istype(T) && T.air) + T.excited = 1 + active_turfs |= T + if(currentpart == SSAIR_ACTIVETURFS) + currentrun |= T + if(blockchanges && T.excited_group) + T.excited_group.garbage_collect() + else + for(var/direction in cardinal) + if(!(T.atmos_adjacent_turfs & direction)) + continue + var/turf/simulated/S = get_step(T, direction) + if(istype(S)) + add_to_active(S) + +/datum/controller/subsystem/air/proc/setup_allturfs(var/list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz))) + var/list/active_turfs = src.active_turfs + + for(var/thing in turfs_to_init) + var/turf/T = thing + active_turfs -= T + if(T.blocks_air) + continue + T.Initialize_Atmos(times_fired) + CHECK_TICK + + if(active_turfs.len) + var/starting_ats = active_turfs.len + sleep(world.tick_lag) + var/timer = world.timeofday + warning("There are [starting_ats] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") + + //now lets clear out these active turfs + var/list/turfs_to_check = active_turfs.Copy() + do + var/list/new_turfs_to_check = list() + for(var/turf/simulated/T in turfs_to_check) + new_turfs_to_check += T.resolve_active_graph() + CHECK_TICK + + active_turfs += new_turfs_to_check + turfs_to_check = new_turfs_to_check + + while (turfs_to_check.len) + var/ending_ats = active_turfs.len + for(var/thing in excited_groups) + var/datum/excited_group/EG = thing + EG.self_breakdown() + EG.dismantle() + CHECK_TICK + + var/msg = "HEY! LISTEN! [DisplayTimeText(world.timeofday - timer)] were wasted processing [starting_ats] turf(s) (connected to [ending_ats] other turfs) with atmos differences at round start." + to_chat(world, "[msg]") + warning(msg) + +/turf/simulated/proc/resolve_active_graph() + . = list() + var/datum/excited_group/EG = excited_group + if (blocks_air || !air) + return + if (!EG) + EG = new + EG.add_turf(src) + + for (var/turf/simulated/ET in atmos_adjacent_turfs) + if ( ET.blocks_air || !ET.air) + continue + + var/ET_EG = ET.excited_group + if (ET_EG) + if (ET_EG != EG) + EG.merge_groups(ET_EG) + EG = excited_group //merge_groups() may decide to replace our current EG + else + EG.add_turf(ET) + if (!ET.excited) + ET.excited = 1 + . += ET + +/datum/controller/subsystem/air/proc/setup_atmos_machinery() + var/watch = start_watch() + var/count = 0 + log_startup_progress("Initializing atmospherics machinery...") + for(var/obj/machinery/atmospherics/unary/U in machines) + if(istype(U, /obj/machinery/atmospherics/unary/vent_pump)) + var/obj/machinery/atmospherics/unary/vent_pump/T = U + T.broadcast_status() + count++ + else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber)) + var/obj/machinery/atmospherics/unary/vent_scrubber/T = U + T.broadcast_status() + count++ + log_startup_progress(" Initialized [count] atmospherics machines in [stop_watch(watch)]s.") + +//this can't be done with setup_atmos_machinery() because +// all atmos machinery has to initalize before the first +// pipenet can be built. +/datum/controller/subsystem/air/proc/setup_pipenets() + var/watch = start_watch() + var/count = 0 + log_startup_progress("Initializing pipe networks...") + for(var/obj/machinery/atmospherics/machine in machines) + machine.build_network() + count++ + log_startup_progress(" Initialized [count] pipes in [stop_watch(watch)]s.") + +/datum/controller/subsystem/air/proc/setup_overlays() + plmaster = new /obj/effect/overlay() + plmaster.icon = 'icons/effects/tile_effects.dmi' + plmaster.icon_state = "plasma" + plmaster.layer = FLY_LAYER + plmaster.mouse_opacity = 0 + + slmaster = new /obj/effect/overlay() + slmaster.icon = 'icons/effects/tile_effects.dmi' + slmaster.icon_state = "sleeping_agent" + slmaster.layer = FLY_LAYER + slmaster.mouse_opacity = 0 + + icemaster = new /obj/effect/overlay() + icemaster.icon = 'icons/turf/overlays.dmi' + icemaster.icon_state = "snowfloor" + icemaster.layer = TURF_LAYER+0.1 + icemaster.mouse_opacity = 0 + +#undef SSAIR_PIPENETS +#undef SSAIR_ATMOSMACHINERY +#undef SSAIR_ACTIVETURFS +#undef SSAIR_EXCITEDGROUPS +#undef SSAIR_HIGHPRESSURE +#undef SSAIR_HOTSPOT +#undef SSAIR_SUPERCONDUCTIVITY diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm new file mode 100644 index 00000000000..c251492227a --- /dev/null +++ b/code/controllers/subsystem/spacedrift.dm @@ -0,0 +1,59 @@ +SUBSYSTEM_DEF(spacedrift) + name = "Space Drift" + priority = FIRE_PRIORITY_SPACEDRIFT + wait = 5 + flags = SS_NO_INIT|SS_KEEP_TIMING + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/spacedrift/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/spacedrift/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/atom/movable/AM = currentrun[currentrun.len] + currentrun.len-- + if (!AM) + processing -= AM + if (MC_TICK_CHECK) + return + continue + + if (AM.inertia_next_move > world.time) + if (MC_TICK_CHECK) + return + continue + + if (!AM.loc || AM.loc != AM.inertia_last_loc || AM.Process_Spacemove(0)) + AM.inertia_dir = 0 + + if (!AM.inertia_dir) + AM.inertia_last_loc = null + processing -= AM + if (MC_TICK_CHECK) + return + continue + + var/old_dir = AM.dir + var/old_loc = AM.loc + AM.inertia_moving = TRUE + step(AM, AM.inertia_dir) + AM.inertia_moving = FALSE + AM.inertia_next_move = world.time + AM.inertia_move_delay + if (AM.loc == old_loc) + AM.inertia_dir = 0 + + AM.setDir(old_dir) + AM.inertia_last_loc = AM.loc + if (MC_TICK_CHECK) + return + diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm new file mode 100644 index 00000000000..c32b5a707ae --- /dev/null +++ b/code/controllers/subsystem/throwing.dm @@ -0,0 +1,149 @@ +#define MAX_THROWING_DIST 512 // 2 z-levels on default width +#define MAX_TICKS_TO_MAKE_UP 3 //how many missed ticks will we attempt to make up for this run. + +SUBSYSTEM_DEF(throwing) + name = "Throwing" + priority = FIRE_PRIORITY_THROWING + wait = 1 + flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/currentrun + var/list/processing = list() + +/datum/controller/subsystem/throwing/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/throwing/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(length(currentrun)) + var/atom/movable/AM = currentrun[currentrun.len] + var/datum/thrownthing/TT = currentrun[AM] + currentrun.len-- + if (!AM || !TT) + processing -= AM + if (MC_TICK_CHECK) + return + continue + + TT.tick() + + if (MC_TICK_CHECK) + return + + currentrun = null + +/datum/thrownthing + var/atom/movable/thrownthing + var/atom/target + var/turf/target_turf + var/init_dir + var/maxrange + var/speed + var/mob/thrower + var/diagonals_first + var/dist_travelled = 0 + var/start_time + var/dist_x + var/dist_y + var/dx + var/dy + var/pure_diagonal + var/diagonal_error + var/datum/callback/callback + var/paused = FALSE + var/delayed_time = 0 + var/last_move = 0 + +/datum/thrownthing/proc/tick() + var/atom/movable/AM = thrownthing + if (!isturf(AM.loc) || !AM.throwing) + finalize() + return + + if(paused) + delayed_time += world.time - last_move + return + + if (dist_travelled && hitcheck()) //to catch sneaky things moving on our tile while we slept + finalize() + return + + var/atom/step + + last_move = world.time + + //calculate how many tiles to move, making up for any missed ticks. + var/tilestomove = CEILING(min(((((world.time+world.tick_lag) - start_time + delayed_time) * speed) - (dist_travelled ? dist_travelled : -1)), speed*MAX_TICKS_TO_MAKE_UP) * (world.tick_lag * SSthrowing.wait), 1) + while (tilestomove-- > 0) + if ((dist_travelled >= maxrange || AM.loc == target_turf) && has_gravity(AM, AM.loc)) + finalize() + return + + if (dist_travelled <= max(dist_x, dist_y)) //if we haven't reached the target yet we home in on it, otherwise we use the initial direction + step = get_step(AM, get_dir(AM, target_turf)) + else + step = get_step(AM, init_dir) + + if (!pure_diagonal && !diagonals_first) // not a purely diagonal trajectory and we don't want all diagonal moves to be done first + if (diagonal_error >= 0 && max(dist_x,dist_y) - dist_travelled != 1) //we do a step forward unless we're right before the target + step = get_step(AM, dx) + diagonal_error += (diagonal_error < 0) ? dist_x/2 : -dist_y + + if (!step) // going off the edge of the map makes get_step return null, don't let things go off the edge + finalize() + return + + AM.Move(step, get_dir(AM, step)) + + if (!AM.throwing) // we hit something during our move + finalize(hit = TRUE) + return + + dist_travelled++ + + if (dist_travelled > MAX_THROWING_DIST) + finalize() + return + +/datum/thrownthing/proc/finalize(hit = FALSE, target=null) + set waitfor = 0 + SSthrowing.processing -= thrownthing + //done throwing, either because it hit something or it finished moving + thrownthing.throwing = null + if (!hit) + for (var/thing in get_turf(thrownthing)) //looking for our target on the turf we land on. + var/atom/A = thing + if (A == target) + hit = 1 + thrownthing.throw_impact(A, src) + break + if (!hit) + thrownthing.throw_impact(get_turf(thrownthing), src) // we haven't hit something yet and we still must, let's hit the ground. + thrownthing.newtonian_move(init_dir) + else + thrownthing.newtonian_move(init_dir) + + if(target) + thrownthing.throw_impact(target, src) + + if (callback) + callback.Invoke() + +/datum/thrownthing/proc/hit_atom(atom/A) + finalize(hit=TRUE, target=A) + +/datum/thrownthing/proc/hitcheck() + for (var/thing in get_turf(thrownthing)) + var/atom/movable/AM = thing + if (AM == thrownthing) + continue + if(AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags & ON_BORDER)) + finalize(hit=TRUE, target=AM) + return TRUE diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 4ea43a02e08..efbe9502e7c 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -43,7 +43,7 @@ debug_variables(ticker) feedback_add_details("admin_verb","DTicker") if("Air") - debug_variables(air_master) + debug_variables(SSair) feedback_add_details("admin_verb","DAir") if("Jobs") debug_variables(job_master) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0e982a27288..27bc98e2b42 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -217,14 +217,15 @@ return 1 inertia_last_loc = loc - drift_master.processing_list[src] = src + SSspacedrift.processing[src] = src return 1 //called when src is thrown into hit_atom /atom/movable/proc/throw_impact(atom/hit_atom, throwingdatum) set waitfor = 0 - return hit_atom.hitby(src) + if(!qdeleted(hit_atom)) + return hit_atom.hitby(src) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked) if(!anchored && hitpush) @@ -301,7 +302,7 @@ if(spin && !no_spin && !no_spin_thrown) SpinAnimation(5, 1) - throw_master.processing_list[src] = TT + SSthrowing.processing[src] = TT TT.tick() diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 62996473291..fcb9bd0d28e 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -129,11 +129,11 @@ obj/machinery/air_sensor initialize() ..() - atmos_machinery += src + SSair.atmos_machinery += src set_frequency(frequency) Destroy() - atmos_machinery -= src + SSair.atmos_machinery -= src if(radio_controller) radio_controller.remove_object(src,frequency) return ..() diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index d3f1f25a52d..7365ca39271 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -18,14 +18,14 @@ /obj/machinery/meter/New() ..() - atmos_machinery += src + SSair.atmos_machinery += src target = locate(/obj/machinery/atmospherics/pipe) in loc if(id && !id_tag)//i'm not dealing with further merge conflicts, fuck it id_tag = id return 1 /obj/machinery/meter/Destroy() - atmos_machinery -= src + SSair.atmos_machinery -= src target = null return ..() diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 45dcb5f7880..4a9eb2fa05d 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -13,7 +13,7 @@ /obj/machinery/portable_atmospherics/New() ..() - atmos_machinery += src + SSair.atmos_machinery += src air_contents.volume = volume air_contents.temperature = T20C @@ -36,7 +36,7 @@ update_icon() /obj/machinery/portable_atmospherics/Destroy() - atmos_machinery -= src + SSair.atmos_machinery -= src disconnect() QDEL_NULL(air_contents) QDEL_NULL(holding) diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm index a9d288fe37e..18af424c4d6 100644 --- a/code/game/machinery/atmoalter/zvent.dm +++ b/code/game/machinery/atmoalter/zvent.dm @@ -11,10 +11,10 @@ /obj/machinery/zvent/New() ..() - atmos_machinery += src + SSair.atmos_machinery += src /obj/machinery/zvent/Destroy() - atmos_machinery -= src + SSair.atmos_machinery -= src return ..() /obj/machinery/zvent/process_atmos() diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 9601b86beec..ee0a5510240 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -193,7 +193,7 @@ //Burn it based on transfered gas target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE //location.hotspot_expose(1000,500,1) - air_master.add_to_active(target, 0) + SSair.add_to_active(target, 0) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 2f05b738385..514d145810d 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -56,12 +56,12 @@ /turf/Destroy() // Adds the adjacent turfs to the current atmos processing - if(air_master) + if(SSair) for(var/direction in cardinal) if(atmos_adjacent_turfs & direction) var/turf/simulated/T = get_step(src, direction) if(istype(T)) - air_master.add_to_active(T) + SSair.add_to_active(T) ..() return QDEL_HINT_HARDDEL_NOW @@ -167,8 +167,8 @@ var/old_corners = corners BeforeChange() - if(air_master) - air_master.remove_from_active(src) + if(SSair) + SSair.remove_from_active(src) var/turf/W = new path(src) if(!defer_change) W.AfterChange() @@ -204,8 +204,8 @@ levelupdate() CalculateAdjacentTurfs() - if(air_master && !ignore_air) - air_master.add_to_active(src) + if(SSair && !ignore_air) + SSair.add_to_active(src) if(!keep_cabling && !can_have_cabling()) for(var/obj/structure/cable/C in contents) @@ -246,8 +246,8 @@ air.carbon_dioxide = (aco/max(turf_count,1)) air.toxins = (atox/max(turf_count,1)) air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant - if(air_master) - air_master.add_to_active(src) + if(SSair) + SSair.add_to_active(src) /turf/proc/ReplaceWithLattice() src.ChangeTurf(/turf/space) @@ -457,6 +457,6 @@ T0.ChangeTurf(turf_type) - air_master.remove_from_active(T0) + SSair.remove_from_active(T0) T0.CalculateAdjacentTurfs() - air_master.add_to_active(T0,1) + SSair.add_to_active(T0,1) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 50b09d72788..bdb8bc01bc4 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -9,8 +9,8 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away smoothTurfs = turfs log_debug("Setting up atmos") - if(air_master) - air_master.setup_allturfs(turfs) + if(SSair) + SSair.setup_allturfs(turfs) log_debug("\tTook [stop_watch(subtimer)]s") subtimer = start_watch() diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index a392105513a..11873b5acdf 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -11,7 +11,7 @@ return var/list/map = mother.map for(var/turf/simulated/T in map) - air_master.remove_from_active(T) + SSair.remove_from_active(T) for(var/turf/simulated/T in map) if(T.air) T.air.oxygen = T.oxygen @@ -19,7 +19,7 @@ T.air.carbon_dioxide = T.carbon_dioxide T.air.toxins = T.toxins T.air.temperature = T.temperature - air_master.add_to_active(T) + SSair.add_to_active(T) //Only places atoms/turfs on area borders /datum/mapGeneratorModule/border diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index d3406556e27..3cd9bb49432 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -490,15 +490,15 @@ T1.shuttleRotate(rotation) //lighting stuff - air_master.remove_from_active(T1) + SSair.remove_from_active(T1) T1.CalculateAdjacentTurfs() - air_master.add_to_active(T1,1) + SSair.add_to_active(T1,1) T0.ChangeTurf(turf_type) - air_master.remove_from_active(T0) + SSair.remove_from_active(T0) T0.CalculateAdjacentTurfs() - air_master.add_to_active(T0,1) + SSair.add_to_active(T0,1) for(var/A1 in L1) var/turf/T1 = A1 diff --git a/code/world.dm b/code/world.dm index 9614373c901..df7fc20437c 100644 --- a/code/world.dm +++ b/code/world.dm @@ -55,7 +55,6 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG processScheduler.setup() master_controller.setup() - sleep_offline = 1 if(using_map && using_map.name) map_name = "[using_map.name]" diff --git a/paradise.dme b/paradise.dme index b46d43f0b7e..923f7a2740c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -187,7 +187,6 @@ #include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" -#include "code\controllers\Processes\air.dm" #include "code\controllers\Processes\alarm.dm" #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\fast_process.dm" @@ -203,14 +202,15 @@ #include "code\controllers\Processes\npcpool.dm" #include "code\controllers\Processes\obj.dm" #include "code\controllers\Processes\shuttles.dm" -#include "code\controllers\Processes\spacedrift.dm" #include "code\controllers\Processes\sun.dm" -#include "code\controllers\Processes\throwing.dm" #include "code\controllers\Processes\ticker.dm" #include "code\controllers\Processes\timer.dm" #include "code\controllers\Processes\weather.dm" #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" +#include "code\controllers\subsystem\air.dm" +#include "code\controllers\subsystem\spacedrift.dm" +#include "code\controllers\subsystem\throwing.dm" #include "code\datums\action.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" From c609f25a09ac35eba5b11ed328e523db22b35c09 Mon Sep 17 00:00:00 2001 From: tigercat2000 Date: Sat, 3 Mar 2018 00:10:49 -0800 Subject: [PATCH 03/32] Styling fixes --- code/controllers/configuration.dm | 11 +++ code/controllers/failsafe.dm | 10 +-- code/controllers/master.dm | 141 +++++++++++++++--------------- code/controllers/subsystem.dm | 66 +++++++------- config/example/config.txt | 24 +++++ 5 files changed, 144 insertions(+), 108 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index cb363880fff..c76e04fc9d8 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -607,6 +607,17 @@ if("disable_karma") disable_karma = 1 + if("tick_limit_mc_init") + tick_limit_mc_init = text2num(value) + if("base_mc_tick_rate") + base_mc_tick_rate = text2num(value) + if("high_pop_mc_tick_rate") + high_pop_mc_tick_rate = text2num(value) + if("high_pop_mc_mode_amount") + high_pop_mc_mode_amount = text2num(value) + if("disable_high_pop_mc_mode_amount") + disable_high_pop_mc_mode_amount = text2num(value) + else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 232a6bd054b..b3a47e3ce22 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -51,14 +51,14 @@ var/global/datum/controller/failsafe/Failsafe if(4,5) --defcon if(3) - message_admins("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + message_admins("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5 - defcon) * processing_interval] ticks.") --defcon if(2) - to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5 - defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") --defcon if(1) - to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5 - defcon) * processing_interval] ticks. Killing and restarting...") --defcon var/rtn = Recreate_MC() if(rtn > 0) @@ -79,8 +79,8 @@ var/global/datum/controller/failsafe/Failsafe else defcon = min(defcon + 1,5) master_iteration = Master.iteration - if (defcon <= 1) - sleep(processing_interval*2) + if(defcon <= 1) + sleep(processing_interval * 2) else sleep(processing_interval) else diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 6c094208926..8aa1f1b0873 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -72,8 +72,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/list/_subsystems = list() subsystems = _subsystems - if (Master != src) - if (istype(Master)) + if(Master != src) + if(istype(Master)) Recover() qdel(Master) else @@ -104,9 +104,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new // -1 if we encountered a runtime trying to recreate it /proc/Recreate_MC() . = -1 //so if we runtime, things know we failed - if (world.time < Master.restart_timeout) + if(world.time < Master.restart_timeout) return 0 - if (world.time < Master.restart_clear) + if(world.time < Master.restart_clear) Master.restart_count *= 0.5 var/delay = 50 * ++Master.restart_count @@ -122,13 +122,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /datum/controller/master/Recover() var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" - for (var/varname in Master.vars) + for(var/varname in Master.vars) switch (varname) if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk. continue else var/varval = Master.vars[varname] - if (istype(varval, /datum)) // Check if it has a type var. + if(istype(varval, /datum)) // Check if it has a type var. var/datum/D = varval msg += "\t [varname] = [D]([D.type])\n" else @@ -151,7 +151,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new to_chat(admins, "[msg]") log_to_dd(msg) - if (istype(Master.subsystems)) + if(istype(Master.subsystems)) if(FireHim) Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one subsystems = Master.subsystems @@ -181,8 +181,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/start_timeofday = REALTIMEOFDAY // Initialize subsystems. current_ticklimit = config.tick_limit_mc_init - for (var/datum/controller/subsystem/SS in subsystems) - if (SS.flags & SS_NO_INIT) + for(var/datum/controller/subsystem/SS in subsystems) + if(SS.flags & SS_NO_INIT) continue SS.Initialize(REALTIMEOFDAY) CHECK_TICK @@ -193,7 +193,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new to_chat(world, "[msg]") log_to_dd(msg) - if (!current_runlevel) + if(!current_runlevel) SetRunLevel(1) // Sort subsystems by display setting for easy access. @@ -226,13 +226,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new sleep(delay) testing("Master starting processing") var/rtn = Loop() - if (rtn > 0 || processing < 0) + if(rtn > 0 || processing < 0) return //this was suppose to happen. //loop ended, restart the mc log_game("MC crashed or runtimed, restarting") message_admins("MC crashed or runtimed, restarting") var/rtn2 = Recreate_MC() - if (rtn2 <= 0) + if(rtn2 <= 0) log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") Failsafe.defcon = 2 @@ -247,15 +247,15 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/list/tickersubsystems = list() var/list/runlevel_sorted_subsystems = list(list(), list(), list(), list(), list(), list(), list(), list()) //ensure we always have as many runlevels as we need to operate with no subsystems (8 currently) var/timer = world.time - for (var/thing in subsystems) + for(var/thing in subsystems) var/datum/controller/subsystem/SS = thing - if (SS.flags & SS_NO_FIRE) + if(SS.flags & SS_NO_FIRE) continue SS.queued_time = 0 SS.queue_next = null SS.queue_prev = null SS.state = SS_IDLE - if (SS.flags & SS_TICKER) + if(SS.flags & SS_TICKER) tickersubsystems += SS timer += world.tick_lag * rand(1, 5) SS.next_fire = timer @@ -293,10 +293,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/list/subsystems_to_check //the actual loop. - while (1) + while(1) tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) var/starting_tick_usage = TICK_USAGE - if (processing <= 0) + if(processing <= 0) current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue @@ -304,31 +304,31 @@ GLOBAL_REAL(Master, /datum/controller/master) = new //Anti-tick-contention heuristics: //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later. // (because sleeps are processed in the order received, longer sleeps are more likely to run first) - if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit. + if(starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit. sleep_delta *= 2 current_ticklimit = TICK_LIMIT_RUNNING * 0.5 sleep(world.tick_lag * (processing * sleep_delta)) continue //Byond resumed us late. assume it might have to do the same next tick - if (last_run + CEILING(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time) + if(last_run + CEILING(world.tick_lag * (processing * sleep_delta), world.tick_lag) < world.time) sleep_delta += 1 sleep_delta = MC_AVERAGE_FAST(sleep_delta, 1) //decay sleep_delta - if (starting_tick_usage > (TICK_LIMIT_MC*0.75)) //we ran 3/4 of the way into the tick + if(starting_tick_usage > (TICK_LIMIT_MC * 0.75)) //we ran 3/4 of the way into the tick sleep_delta += 1 //debug - if (make_runtime) + if(make_runtime) var/datum/controller/subsystem/SS SS.can_fire = 0 - if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) + if(!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick + (Failsafe.processing_interval * 5)) < world.time)) new/datum/controller/failsafe() // (re)Start the failsafe. //now do the actual stuff - if (!queue_head || !(iteration % 3)) + if(!queue_head || !(iteration % 3)) var/checking_runlevel = current_runlevel if(cached_runlevel != checking_runlevel) //resechedule subsystems @@ -345,30 +345,30 @@ GLOBAL_REAL(Master, /datum/controller/master) = new else subsystems_to_check = tickersubsystems - if (CheckQueue(subsystems_to_check) <= 0) - if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) + if(CheckQueue(subsystems_to_check) <= 0) + if(!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_to_dd("MC: SoftReset() failed, crashing") return - if (!error_level) + if(!error_level) iteration++ error_level++ current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue - if (queue_head) - if (RunQueue() <= 0) - if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) + if(queue_head) + if(RunQueue() <= 0) + if(!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_to_dd("MC: SoftReset() failed, crashing") return - if (!error_level) + if(!error_level) iteration++ error_level++ current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue error_level-- - if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync + if(!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync queue_priority_count = 0 queue_priority_count_bg = 0 @@ -376,7 +376,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new last_run = world.time src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) current_ticklimit = TICK_LIMIT_RUNNING - if (processing * sleep_delta <= world.tick_lag) + if(processing * sleep_delta <= world.tick_lag) current_ticklimit -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick sleep(world.tick_lag * (processing * sleep_delta)) @@ -391,21 +391,21 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/datum/controller/subsystem/SS var/SS_flags - for (var/thing in subsystemstocheck) - if (!thing) + for(var/thing in subsystemstocheck) + if(!thing) subsystemstocheck -= thing SS = thing - if (SS.state != SS_IDLE) + if(SS.state != SS_IDLE) continue - if (SS.can_fire <= 0) + if(SS.can_fire <= 0) continue - if (SS.next_fire > world.time) + if(SS.next_fire > world.time) continue SS_flags = SS.flags - if (SS_flags & SS_NO_FIRE) + if(SS_flags & SS_NO_FIRE) subsystemstocheck -= SS continue - if (!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time) + if(!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time) continue SS.enqueue() . = 1 @@ -429,13 +429,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new //keep running while we have stuff to run and we haven't gone over a tick // this is so subsystems paused eariler can use tick time that later subsystems never used - while (ran && queue_head && TICK_USAGE < TICK_LIMIT_MC) + while(ran && queue_head && TICK_USAGE < TICK_LIMIT_MC) ran = FALSE bg_calc = FALSE current_tick_budget = queue_priority_count queue_node = queue_head - while (queue_node) - if (ran && TICK_USAGE > TICK_LIMIT_RUNNING) + while(queue_node) + if(ran && TICK_USAGE > TICK_LIMIT_RUNNING) break queue_node_flags = queue_node.flags @@ -446,8 +446,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new //we bump up their priority and attempt to run them next tick //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run // in those cases, so we just let them run) - if (queue_node_flags & SS_NO_TICK_CHECK) - if (queue_node.tick_usage > TICK_LIMIT_RUNNING - TICK_USAGE && ran_non_ticker) + if(queue_node_flags & SS_NO_TICK_CHECK) + if(queue_node.tick_usage > TICK_LIMIT_RUNNING - TICK_USAGE && ran_non_ticker) queue_node.queued_priority += queue_priority_count * 0.1 queue_priority_count -= queue_node_priority queue_priority_count += queue_node.queued_priority @@ -455,22 +455,22 @@ GLOBAL_REAL(Master, /datum/controller/master) = new queue_node = queue_node.queue_next continue - if ((queue_node_flags & SS_BACKGROUND) && !bg_calc) + if((queue_node_flags & SS_BACKGROUND) && !bg_calc) current_tick_budget = queue_priority_count_bg bg_calc = TRUE tick_remaining = TICK_LIMIT_RUNNING - TICK_USAGE - if (current_tick_budget > 0 && queue_node_priority > 0) + if(current_tick_budget > 0 && queue_node_priority > 0) tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority) else tick_precentage = tick_remaining - tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun) + tick_precentage = max(tick_precentage*0.5, tick_precentage - queue_node.tick_overrun) current_ticklimit = round(TICK_USAGE + tick_precentage) - if (!(queue_node_flags & SS_TICKER)) + if(!(queue_node_flags & SS_TICKER)) ran_non_ticker = TRUE ran = TRUE @@ -483,17 +483,17 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/state = queue_node.ignite(queue_node_paused) tick_usage = TICK_USAGE - tick_usage - if (state == SS_RUNNING) + if(state == SS_RUNNING) state = SS_IDLE current_tick_budget -= queue_node_priority - if (tick_usage < 0) + if(tick_usage < 0) tick_usage = 0 - queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage-tick_precentage)) + queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage - tick_precentage)) queue_node.state = state - if (state == SS_PAUSED) + if(state == SS_PAUSED) queue_node.paused_ticks++ queue_node.paused_tick_usage += tick_usage queue_node = queue_node.queue_next @@ -508,7 +508,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new queue_node.paused_ticks = 0 queue_node.paused_tick_usage = 0 - if (queue_node_flags & SS_BACKGROUND) //update our running total + if(queue_node_flags & SS_BACKGROUND) //update our running total queue_priority_count_bg -= queue_node_priority else queue_priority_count -= queue_node_priority @@ -516,14 +516,14 @@ GLOBAL_REAL(Master, /datum/controller/master) = new queue_node.last_fire = world.time queue_node.times_fired++ - if (queue_node_flags & SS_TICKER) + if(queue_node_flags & SS_TICKER) queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) - else if (queue_node_flags & SS_POST_FIRE_TIMING) - queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) - else if (queue_node_flags & SS_KEEP_TIMING) + else if(queue_node_flags & SS_POST_FIRE_TIMING) + queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun / 100)) + else if(queue_node_flags & SS_KEEP_TIMING) queue_node.next_fire += queue_node.wait else - queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) + queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun / 100)) queue_node.queued_time = 0 @@ -539,16 +539,16 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS) . = 0 log_to_dd("MC: SoftReset called, resetting MC queue state.") - if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) + if(!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) log_to_dd("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'") return var/subsystemstocheck = subsystems + ticker_SS for(var/I in runlevel_SS) subsystemstocheck |= I - for (var/thing in subsystemstocheck) + for(var/thing in subsystemstocheck) var/datum/controller/subsystem/SS = thing - if (!SS || !istype(SS)) + if(!SS || !istype(SS)) //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents subsystems -= list(SS) ticker_SS -= list(SS) @@ -556,19 +556,19 @@ GLOBAL_REAL(Master, /datum/controller/master) = new I -= list(SS) log_to_dd("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") continue - if (SS.queue_next && !istype(SS.queue_next)) + if(SS.queue_next && !istype(SS.queue_next)) log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'") SS.queue_next = null - if (SS.queue_prev && !istype(SS.queue_prev)) + if(SS.queue_prev && !istype(SS.queue_prev)) log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'") SS.queue_prev = null SS.queued_priority = 0 SS.queued_time = 0 SS.state = SS_IDLE - if (queue_head && !istype(queue_head)) + if(queue_head && !istype(queue_head)) log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'") queue_head = null - if (queue_tail && !istype(queue_tail)) + if(queue_tail && !istype(queue_tail)) log_to_dd("MC: SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'") queue_tail = null queue_priority_count = 0 @@ -582,9 +582,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new if(!statclick) statclick = new/obj/effect/statclick/debug(src, "Initializing...") - stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))") - stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")) + stat("Byond", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))") + stat("Master Controller", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")) +// Currently unimplemented /datum/controller/master/StartLoadingMap() //disallow more than one map to load at once, multithreading it will just cause race conditions while(map_loading) @@ -602,10 +603,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /datum/controller/master/proc/UpdateTickRate() - if (!processing) + if(!processing) return var/client_count = length(clients) - if (client_count < config.disable_high_pop_mc_mode_amount) + if(client_count < config.disable_high_pop_mc_mode_amount) processing = config.base_mc_tick_rate - else if (client_count > config.high_pop_mc_mode_amount) + else if(client_count > config.high_pop_mc_mode_amount) processing = config.high_pop_mc_tick_rate diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 0ffd9e09d35..a78750bf8d0 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -50,9 +50,9 @@ . = SS_SLEEPING fire(resumed) . = state - if (state == SS_SLEEPING) + if(state == SS_SLEEPING) state = SS_IDLE - if (state == SS_PAUSING) + if(state == SS_PAUSING) var/QT = queued_time enqueue() state = SS_PAUSED @@ -82,48 +82,48 @@ var/queue_node_priority var/queue_node_flags - for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) + for(queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) queue_node_priority = queue_node.queued_priority queue_node_flags = queue_node.flags - if (queue_node_flags & SS_TICKER) - if (!(SS_flags & SS_TICKER)) + if(queue_node_flags & SS_TICKER) + if(!(SS_flags & SS_TICKER)) continue - if (queue_node_priority < SS_priority) + if(queue_node_priority < SS_priority) break - else if (queue_node_flags & SS_BACKGROUND) - if (!(SS_flags & SS_BACKGROUND)) + else if(queue_node_flags & SS_BACKGROUND) + if(!(SS_flags & SS_BACKGROUND)) break - if (queue_node_priority < SS_priority) + if(queue_node_priority < SS_priority) break else - if (SS_flags & SS_BACKGROUND) + if(SS_flags & SS_BACKGROUND) continue - if (SS_flags & SS_TICKER) + if(SS_flags & SS_TICKER) break - if (queue_node_priority < SS_priority) + if(queue_node_priority < SS_priority) break queued_time = world.time queued_priority = SS_priority state = SS_QUEUED - if (SS_flags & SS_BACKGROUND) //update our running total + if(SS_flags & SS_BACKGROUND) //update our running total Master.queue_priority_count_bg += SS_priority else Master.queue_priority_count += SS_priority queue_next = queue_node - if (!queue_node)//we stopped at the end, add to tail + if(!queue_node)//we stopped at the end, add to tail queue_prev = Master.queue_tail - if (Master.queue_tail) + if(Master.queue_tail) Master.queue_tail.queue_next = src else //empty queue, we also need to set the head Master.queue_head = src Master.queue_tail = src - else if (queue_node == Master.queue_head)//insert at start of list + else if(queue_node == Master.queue_head)//insert at start of list Master.queue_head.queue_prev = src Master.queue_head = src queue_prev = null @@ -134,16 +134,16 @@ /datum/controller/subsystem/proc/dequeue() - if (queue_next) + if(queue_next) queue_next.queue_prev = queue_prev - if (queue_prev) + if(queue_prev) queue_prev.queue_next = queue_next - if (src == Master.queue_tail) + if(src == Master.queue_tail) Master.queue_tail = queue_prev - if (src == Master.queue_head) + if(src == Master.queue_head) Master.queue_head = queue_next queued_time = 0 - if (state == SS_QUEUED) + if(state == SS_QUEUED) state = SS_IDLE @@ -171,27 +171,27 @@ statclick = new/obj/effect/statclick/debug(src, "Initializing...") if(can_fire && !(SS_NO_FIRE & flags)) - msg = "[round(cost,1)]ms|[round(tick_usage,1)]%([round(tick_overrun,1)]%)|[round(ticks,0.1)]\t[msg]" + msg = "[round(cost, 1)]ms|[round(tick_usage, 1)]%([round(tick_overrun, 1)]%)|[round(ticks, 0.1)]\t[msg]" else msg = "OFFLINE\t[msg]" var/title = name - if (can_fire) + if(can_fire) title = "\[[state_letter()]][title]" stat(title, statclick.update(msg)) /datum/controller/subsystem/proc/state_letter() - switch (state) - if (SS_RUNNING) + switch(state) + if(SS_RUNNING) . = "R" - if (SS_QUEUED) + if(SS_QUEUED) . = "Q" - if (SS_PAUSED, SS_PAUSING) + if(SS_PAUSED, SS_PAUSING) . = "P" - if (SS_SLEEPING) + if(SS_SLEEPING) . = "S" - if (SS_IDLE) + if(SS_IDLE) . = " " //could be used to postpone a costly subsystem for (default one) var/cycles, cycles @@ -205,11 +205,11 @@ /datum/controller/subsystem/Recover() /datum/controller/subsystem/vv_edit_var(var_name, var_value) - switch (var_name) - if ("can_fire") + switch(var_name) + if("can_fire") //this is so the subsystem doesn't rapid fire to make up missed ticks causing more lag - if (var_value) + if(var_value) next_fire = world.time + wait - if ("queued_priority") //editing this breaks things. + if("queued_priority") //editing this breaks things. return 0 . = ..() diff --git a/config/example/config.txt b/config/example/config.txt index 2dcd5da6573..0f0b1eb57f2 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -347,3 +347,27 @@ DISABLE_SPACE_RUINS ## Uncomment this to disable karma and unlock all karma purchases for players by default #DISABLE_KARMA + +## Defines the ticklimit for subsystem initialization (In percents of a byond tick). Lower makes world start smoother. Higher makes it faster. +##This is currently a testing optimized setting. A good value for production would be 98. +TICK_LIMIT_MC_INIT 500 + +###Master Controller High Pop Mode### + +##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc) +##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc) +## Setting this to 0 will prevent the Master Controller from ticking +BASE_MC_TICK_RATE 1 + +##High population MC tick rate +## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2 +## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like +## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%. +## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5) +HIGH_POP_MC_TICK_RATE 1.1 + +##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count) +HIGH_POP_MC_MODE_AMOUNT 65 + +##Disengage high pop mode if player count drops below this +DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 \ No newline at end of file From e6ded64e4a742d2386ed532a72a724d59f17b6e2 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Thu, 8 Feb 2018 02:03:49 +0500 Subject: [PATCH 04/32] adds /mob/living/proc/attacked_by() updates attack and defense code adds missing sounds to some items, code cleanup, lowered volume for some sounds (from /tg/) hitsound and attack_verb updates, weapons given hitsound on New() according to damage type --- code/_onclick/item_attack.dm | 158 ++++-------------- .../machinery/computer/HolodeckControl.dm | 4 +- code/game/objects/items/toys.dm | 10 +- code/game/objects/items/weapons/cigs.dm | 9 +- code/game/objects/items/weapons/lighters.dm | 22 ++- .../objects/items/weapons/melee/energy.dm | 4 +- .../objects/items/weapons/storage/boxes.dm | 30 ++-- .../objects/items/weapons/swords_axes_etc.dm | 3 +- code/game/objects/weapons.dm | 9 +- .../mob/living/carbon/human/human_defense.dm | 50 +++--- 10 files changed, 126 insertions(+), 173 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 8d132ed2586..841b82f8530 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -19,6 +19,28 @@ return I.attack(src, user) +/mob/living/proc/attacked_by(obj/item/I, mob/living/user, def_zone) + apply_damage(I.force, I.damtype) + if(I.damtype == "brute") + if(prob(33) && I.force) + add_splatter_floor() + + var/showname = "." + if(user) + showname = " by [user]!" + user.do_attack_animation(src) + if(!(user in viewers(I, null))) + showname = "." + + if(I.attack_verb && I.attack_verb.len) + visible_message("[src] has been [pick(I.attack_verb)] with [I][showname]", + "[src] has been [pick(I.attack_verb)] with [I][showname]") + else if(I.force) + visible_message("[src] has been attacked with [I][showname]", + "[src] has been attacked with [I][showname]") + if(!showname && user) + if(user.client) + to_chat(user, "You attack [M] with [src]. ") // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. @@ -26,11 +48,10 @@ return -/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) +/obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) if(!istype(M)) // not sure if this is the right thing... return 0 - var/messagesource = M if(can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(src,/obj/item/robot_parts))//popup override for direct attach @@ -46,7 +67,7 @@ else return 1 - if(istype(src,/obj/item/weapon/screwdriver) && M.get_species() == "Machine") + if(isscrewdriver(src) && M.get_species() == "Machine") if(!attempt_initiate_surgery(src, M, user)) return 0 else @@ -57,11 +78,10 @@ else return 1 - if(istype(M,/mob/living/carbon/brain)) - var/mob/living/carbon/brain/B = M - messagesource = B.container - if(hitsound && force > 0) - playsound(loc, hitsound, 50, 1, -1) + if(hitsound && force > 0) //If an item's hitsound is defined and the item's force is greater than zero... + playsound(loc, hitsound, get_clamped_volume(), 1, -1) //...play the item's hitsound at get_clamped_volume() with varying frequency and -1 extra range. + else if(force == 0)//Otherwise, if the item's force is zero... + playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1)//...play tap.ogg at get_clamped_volume() ///////////////////////// user.lastattacked = M M.lastattacker = user @@ -74,119 +94,13 @@ ///////////////////////// - if(isanimal(M)) - var/mob/living/simple_animal/S = M - S.attacked_by(src, user) - return 0 // No sanic-speed double-attacks for you - simple mobs will handle being attacked on their own - var/power = force - - if(!istype(M, /mob/living/carbon/human)) - if(istype(M, /mob/living/carbon/slime)) - var/mob/living/carbon/slime/slime = M - if(prob(25)) - to_chat(user, "[src] passes right through [M]!") - return - - if(power > 0) - slime.attacked += 10 - - if(slime.Discipline && prob(50)) // wow, buddy, why am I getting attacked?? - slime.Discipline = 0 - - if(power >= 3) - if(slime.is_adult) - if(prob(5 + round(power/2))) - - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - slime.Victim = null - slime.anchored = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - spawn(0) - if(slime) - slime.canmove = 0 - step_away(slime, user) - if(prob(25 + power)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - else - if(prob(10 + power*2)) - if(slime) - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - - if(slime.Discipline == 1) - slime.attacked = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - slime.Victim = null - slime.anchored = 0 - - - spawn(0) - if(slime && user) - step_away(slime, user) - slime.canmove = 0 - if(prob(25 + power*4)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - - var/showname = "." - if(user) - showname = " by [user]." - user.do_attack_animation(src) - if(!(user in viewers(M, null))) - showname = "." - - for(var/mob/O in viewers(messagesource, null)) - if(attack_verb.len) - O.show_message("[M] has been [pick(attack_verb)] with [src][showname] ", 1) - else - O.show_message("[M] has been attacked with [src][showname] ", 1) - - if(!showname && user) - if(user.client) - to_chat(user, "You attack [M] with [src]. ") - - - - if(istype(M, /mob/living/carbon/human)) - return M:attacked_by(src, user, def_zone) //make sure to return whether we have hit or miss - else - switch(damtype) - if("brute") - if(istype(src, /mob/living/carbon/slime)) - M.adjustBrainLoss(power) - - else - - M.take_organ_damage(power) - if(prob(33)) // Added blood for whacking non-humans too - M.add_splatter_floor() - if("fire") - M.take_organ_damage(0, power) - to_chat(M, "Aargh it burns!") - M.updatehealth() + M.attacked_by(src, user, def_zone) add_fingerprint(user) return 1 + +/obj/item/proc/get_clamped_volume() + if(w_class) + if(force) + return Clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 + else + return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 \ No newline at end of file diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 1447be96d4f..8b55d22274f 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -441,14 +441,14 @@ icon_state = "sword[item_color]" hitsound = "sound/weapons/blade1.ogg" w_class = WEIGHT_CLASS_BULKY - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) + playsound(user, 'sound/weapons/saberon.ogg', 20, 1) to_chat(user, "[src] is now active.") else force = 3 icon_state = "sword0" hitsound = "swing_hit" w_class = WEIGHT_CLASS_SMALL - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) + playsound(user, 'sound/weapons/saberoff.ogg', 20, 1) to_chat(user, "[src] can now be concealed.") if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4979b94eb92..5d4104f57ac 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -151,21 +151,21 @@ icon = 'icons/obj/weapons.dmi' icon_state = "sword0" item_state = "sword0" - var/active = 0.0 + var/active = FALSE w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "struck", "hit") -/obj/item/toy/sword/attack_self(mob/user as mob) - active = !(active) +/obj/item/toy/sword/attack_self(mob/user) + active = !active if(active) to_chat(user, "You extend the plastic blade with a quick flick of your wrist.") - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) + playsound(user, 'sound/weapons/saberon.ogg', 20, 1) icon_state = "swordblue" item_state = "swordblue" w_class = WEIGHT_CLASS_BULKY else to_chat(user, "You push the plastic blade back down into the handle.") - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) + playsound(user, 'sound/weapons/saberoff.ogg', 20, 1) icon_state = "sword0" item_state = "sword0" w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index fde8461e2ec..303c6057962 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -22,7 +22,7 @@ LIGHTERS ARE IN LIGHTERS.DM slot_flags = SLOT_EARS|SLOT_MASK w_class = WEIGHT_CLASS_TINY body_parts_covered = null - attack_verb = list("burnt", "singed") + attack_verb = null var/lit = 0 var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi var/icon_off = "cigoff" @@ -128,7 +128,12 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/proc/light(flavor_text = null) if(!src.lit) src.lit = 1 - damtype = "fire" + name = "lit [name]" + if(!istype(src, /obj/item/clothing/mask/cigarette/pipe)) //can't burn people with pipes + attack_verb = list("burnt", "singed") + hitsound = 'sound/items/welder.ogg' + damtype = "fire" + force = 4 if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire var/datum/effect_system/reagents_explosion/e = new() e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index fb863582b83..f8e725fb04d 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -13,7 +13,7 @@ throwforce = 4 flags = CONDUCT slot_flags = SLOT_BELT - attack_verb = list("burnt", "singed") + attack_verb = null var/lit = 0 /obj/item/weapon/lighter/zippo @@ -38,6 +38,10 @@ w_class = WEIGHT_CLASS_BULKY icon_state = icon_on item_state = icon_on + force = 5 + damtype = "fire" + hitsound = 'sound/items/welder.ogg' + attack_verb = list("burnt", "singed") if(istype(src, /obj/item/weapon/lighter/zippo) ) user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") playsound(src.loc, 'sound/items/ZippoLight.ogg', 25, 1) @@ -62,6 +66,9 @@ w_class = WEIGHT_CLASS_TINY icon_state = icon_off item_state = icon_off + hitsound = "swing_hit" + force = 0 + attack_verb = null //human_defense.dm takes care of it if(istype(src, /obj/item/weapon/lighter/zippo) ) user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. Wow.") playsound(src.loc, 'sound/items/ZippoClose.ogg', 25, 1) @@ -149,21 +156,27 @@ var/smoketime = 5 w_class = WEIGHT_CLASS_TINY origin_tech = "materials=1" - attack_verb = list("burnt", "singed") + attack_verb = null /obj/item/weapon/match/process() var/turf/location = get_turf(src) smoketime-- if(smoketime < 1) - icon_state = "match_burnt" lit = -1 + damtype = "brute" + force = 0 + icon_state = "match_burnt" + item_state = "cigoff" + name = "burnt match" + desc = "A match. This one has seen better days." + attack_verb = null processing_objects.Remove(src) return if(location) location.hotspot_expose(700, 5) return -/obj/item/weapon/match/dropped(mob/user as mob) +/obj/item/weapon/match/dropped(mob/user) if(lit == 1) lit = -1 damtype = "brute" @@ -171,6 +184,7 @@ item_state = "cigoff" name = "burnt match" desc = "A match. This one has seen better days." + attack_verb = null processing_objects.Remove(src) return ..() diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 16b8d302c7f..7decbea5e66 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -12,7 +12,7 @@ light_power = 2 var/brightness_on = 2 var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE) - + /obj/item/weapon/melee/energy/suicide_act(mob/user) user.visible_message(pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.")) @@ -70,7 +70,7 @@ throw_range = 5 w_class = WEIGHT_CLASS_NORMAL w_class_on = WEIGHT_CLASS_HUGE - hitsound = "swing_hit" + hitsound = 'sound/weapons/bladeslice.ogg' flags = CONDUCT armour_penetration = 100 origin_tech = "combat=4;magnets=3" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 594028e4f1f..2191e3cb499 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -639,19 +639,25 @@ slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/match) - New() - ..() - for(var/i=1; i <= storage_slots; i++) - new /obj/item/weapon/match(src) +/obj/item/weapon/storage/box/matches/New() + ..() + for(var/i in 1 to storage_slots) + new /obj/item/weapon/match(src) - attackby(obj/item/weapon/match/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weapon/match) && W.lit == 0) - W.lit = 1 - W.icon_state = "match_lit" - processing_objects.Add(W) - playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) - W.update_icon() - return +/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W, mob/user, params) + if(istype(W, /obj/item/weapon/match) && W.lit == 0) + W.lit = 1 + W.icon_state = "match_lit" + W.damtype = "fire" + W.force = 3 + W.item_state = "cigon" + W.name = "lit match" + W.desc = "A match. This one is lit." + W.attack_verb = list("burnt","singed") + processing_objects.Add(W) + playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) + W.update_icon() + return /obj/item/weapon/storage/box/autoinjectors name = "box of injectors" diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 7666e9f9851..a3fd0b992f5 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -7,9 +7,10 @@ /* * Banhammer */ -/obj/item/weapon/banhammer/attack(mob/M as mob, mob/user as mob) +/obj/item/weapon/banhammer/attack(mob/M, mob/user) to_chat(M, " You have been banned FOR NO REISIN by [user]") to_chat(user, " You have BANNED [M]") + playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much /* * Classic Baton diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index f35fa65b3c7..bc64a4ab8f3 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -1,4 +1,11 @@ /obj/item/weapon name = "weapon" icon = 'icons/obj/weapons.dmi' - hitsound = "swing_hit" + +/obj/item/weapon/New() + ..() + if(!hitsound) + if(damtype == "fire") + hitsound = 'sound/items/welder.ogg' + if(damtype == "brute") + hitsound = "swing_hit" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6f6bb6ade48..2401cb2a21b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -176,21 +176,22 @@ emp_act return 1 //Returns 1 if the attack hit, 0 if it missed. -/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) - if(!I || !user) return 0 +/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user, def_zone) + if(!I || !user) + return 0 - if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == INTENT_HARM) - var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc)) - newmeat.name = src.real_name + newmeat.name - newmeat.subjectname = src.real_name - newmeat.subjectjob = src.job - newmeat.reagents.add_reagent ("nutriment", (src.nutrition / 15) / 3) - src.reagents.trans_to (newmeat, round ((src.reagents.total_volume) / 3, 1)) + if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && stat == DEAD && user.a_intent == INTENT_HARM) + var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(loc)) + newmeat.name = real_name + newmeat.name + newmeat.subjectname = real_name + newmeat.subjectjob = job + newmeat.reagents.add_reagent("nutriment", (nutrition / 15) / 3) + reagents.trans_to(newmeat, round((reagents.total_volume) / 3, 1)) add_mob_blood(src) - --src.meatleft - to_chat(user, "You hack off a chunk of meat from [src.name]") - if(!src.meatleft) - src.create_attack_log("Was chopped up into meat by [key_name(user)]") + --meatleft + to_chat(user, "You hack off a chunk of meat from [name]") + if(!meatleft) + create_attack_log("Was chopped up into meat by [key_name(user)]") user.create_attack_log("Chopped up [key_name(src)] into meat") msg_admin_attack("[key_name_admin(user)] chopped up [key_name_admin(src)] into meat") if(!iscarbon(user)) @@ -214,19 +215,26 @@ emp_act if(istype(I,/obj/item/weapon/card/emag)) emag_act(user, affecting) - if(! I.discrete) - if(I.attack_verb.len) - visible_message("[src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") + if(!I.discrete) + if(I.attack_verb && I.attack_verb.len) + visible_message("[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!", + "[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!")) + else if(I.force == 0) + visible_message("[src] has been [pick("tapped","patted")] on the [hit_area] with [I] by [user]!", \ + "[src] has been [pick("tapped","patted")] on the [hit_area] with [I] by [user]!") else - visible_message("[src] has been attacked in the [hit_area] with [I.name] by [user]!") + visible_message("[src] has been attacked in the [hit_area] with [I] by [user]!", + "[src] has been attacked in the [hit_area] with [I] by [user]!")) - var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) + if(!I.force) + return 0 + var/armor = run_armor_check(affecting, "melee", "Your armour has protected your [hit_area].", "Your armour has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) var/weapon_sharp = is_sharp(I) if(weapon_sharp && prob(getarmor(user.zone_sel.selecting, "melee"))) weapon_sharp = 0 - if(armor >= 100) return 0 - if(!I.force) return 0 + if(armor >= 100) + return 0 var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) apply_damage(I.force, I.damtype, affecting, armor, sharp = weapon_sharp, used_weapon = I) @@ -234,8 +242,6 @@ emp_act var/bloody = 0 if(I.damtype == BRUTE && I.force && prob(25 + I.force * 2)) I.add_mob_blood(src) //Make the weapon bloody, not the person. -// if(user.hand) user.update_inv_l_hand() //updates the attacker's overlay for the (now bloodied) weapon -// else user.update_inv_r_hand() //removed because weapons don't have on-mob blood overlays if(prob(I.force * 2)) //blood spatter! bloody = 1 var/turf/location = loc From 01551ec2488dac81eac587eeadce8b2fe00e8eb6 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Thu, 8 Feb 2018 17:43:49 +0500 Subject: [PATCH 05/32] refactor match and lighter code to use procs, some code cleanup lighting mobs on fire with a match is now logged --- code/game/objects/items/weapons/cigs.dm | 11 ++- code/game/objects/items/weapons/lighters.dm | 68 ++++++++++++------- .../objects/items/weapons/storage/boxes.dm | 13 +--- 3 files changed, 51 insertions(+), 41 deletions(-) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 303c6057962..6db5dd0997f 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -23,7 +23,7 @@ LIGHTERS ARE IN LIGHTERS.DM w_class = WEIGHT_CLASS_TINY body_parts_covered = null attack_verb = null - var/lit = 0 + var/lit = FALSE var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi var/icon_off = "cigoff" var/type_butt = /obj/item/weapon/cigbutt @@ -129,11 +129,10 @@ LIGHTERS ARE IN LIGHTERS.DM if(!src.lit) src.lit = 1 name = "lit [name]" - if(!istype(src, /obj/item/clothing/mask/cigarette/pipe)) //can't burn people with pipes - attack_verb = list("burnt", "singed") - hitsound = 'sound/items/welder.ogg' - damtype = "fire" - force = 4 + attack_verb = list("burnt", "singed") + hitsound = 'sound/items/welder.ogg' + damtype = "fire" + force = 4 if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire var/datum/effect_system/reagents_explosion/e = new() e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index f8e725fb04d..3f165060b5d 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -152,7 +152,8 @@ desc = "A simple match stick, used for lighting fine smokables." icon = 'icons/obj/cigarettes.dmi' icon_state = "match_unlit" - var/lit = 0 + var/lit = FALSE + var/burnt = FALSE var/smoketime = 5 w_class = WEIGHT_CLASS_TINY origin_tech = "materials=1" @@ -162,44 +163,63 @@ var/turf/location = get_turf(src) smoketime-- if(smoketime < 1) - lit = -1 - damtype = "brute" - force = 0 - icon_state = "match_burnt" - item_state = "cigoff" - name = "burnt match" - desc = "A match. This one has seen better days." - attack_verb = null - processing_objects.Remove(src) - return + matchburnout() if(location) location.hotspot_expose(700, 5) return -/obj/item/weapon/match/dropped(mob/user) - if(lit == 1) - lit = -1 +/obj/item/match/fire_act() + matchignite() + +/obj/item/match/proc/matchignite() + if(!lit && !burnt) + lit = TRUE + icon_state = "match_lit" + damtype = "fire" + force = 3 + hitsound = 'sound/items/welder.ogg' + item_state = "cigon" + name = "lit match" + desc = "A match. This one is lit." + attack_verb = list("burnt","singed") + processing_objects.Add(src) + update_icon() + +/obj/item/match/proc/matchburnout() + if(lit) + lit = FALSE + burnt = TRUE damtype = "brute" + force = initial(force) icon_state = "match_burnt" item_state = "cigoff" name = "burnt match" desc = "A match. This one has seen better days." - attack_verb = null + attack_verb = list("flicked") processing_objects.Remove(src) - return ..() -/obj/item/weapon/match/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) +/obj/item/match/dropped(mob/user) + matchburnout() + . = ..() + +/obj/item/weapon/match/attack(mob/living/carbon/M, mob/living/carbon/user) if(!isliving(M)) return ..() - if(lit == 1) M.IgniteMob() - if(!istype(M, /mob)) - return ..() - - if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit == 1) - var/obj/item/clothing/mask/cigarette/cig = M.wear_mask + if(lit && M.IgniteMob()) + message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire") + log_game("[key_name(user)] set [key_name(M)] on fire") + var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M) + if(lit && cig && user.a_intent == INTENT_HELP) + if(cig.lit) + to_chat(user, "[cig] is already lit.") if(M == user) cig.attackby(src, user) else - cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") + cig.light("[user] holds [src] out for [M], and lights [cig].") else ..() + +/obj/item/proc/help_light_cig(mob/living/M) + var/mask_item = M.get_item_by_slot(slot_wear_mask) + if(istype(mask_item, /obj/item/clothing/mask/cigarette)) + return mask_item diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 2191e3cb499..23dbff92d33 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -645,18 +645,9 @@ new /obj/item/weapon/match(src) /obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/match/W, mob/user, params) - if(istype(W, /obj/item/weapon/match) && W.lit == 0) - W.lit = 1 - W.icon_state = "match_lit" - W.damtype = "fire" - W.force = 3 - W.item_state = "cigon" - W.name = "lit match" - W.desc = "A match. This one is lit." - W.attack_verb = list("burnt","singed") - processing_objects.Add(W) + if(istype(W, /obj/item/weapon/match) && !W.lit) + W.matchignite() playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) - W.update_icon() return /obj/item/weapon/storage/box/autoinjectors From d6a277a22410fde06bfd6b0cdca228ff61f1aa28 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Thu, 8 Feb 2018 19:27:50 +0500 Subject: [PATCH 06/32] fix incorrect match path can butcher with any sharp item on harm intent simple_animal/attacked_by() moved var/foldable to box level some fixes with attack code updated slime code, can now mousedrop as a slime to feed on mobs adds sound to simple_animal/attackby --- code/_onclick/item_attack.dm | 19 ++++-- code/game/objects/items/weapons/lighters.dm | 8 +-- .../objects/items/weapons/storage/boxes.dm | 32 +++++++++- .../objects/items/weapons/storage/storage.dm | 30 +-------- .../mob/living/carbon/human/human_defense.dm | 9 +-- code/modules/mob/living/carbon/slime/slime.dm | 62 ++++++++----------- code/modules/mob/living/living.dm | 7 ++- .../mob/living/silicon/damage_procs.dm | 13 ++++ .../mob/living/simple_animal/simple_animal.dm | 4 +- 9 files changed, 96 insertions(+), 88 deletions(-) create mode 100644 code/modules/mob/living/silicon/damage_procs.dm diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 841b82f8530..968582443ae 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -20,7 +20,7 @@ I.attack(src, user) /mob/living/proc/attacked_by(obj/item/I, mob/living/user, def_zone) - apply_damage(I.force, I.damtype) + apply_damage(I.force, I.damtype, def_zone) if(I.damtype == "brute") if(prob(33) && I.force) add_splatter_floor() @@ -29,7 +29,7 @@ if(user) showname = " by [user]!" user.do_attack_animation(src) - if(!(user in viewers(I, null))) + if(!(user in viewers(src, null))) showname = "." if(I.attack_verb && I.attack_verb.len) @@ -38,9 +38,16 @@ else if(I.force) visible_message("[src] has been attacked with [I][showname]", "[src] has been attacked with [I][showname]") - if(!showname && user) - if(user.client) - to_chat(user, "You attack [M] with [src]. ") + +/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) + if(!I.force) + user.visible_message("[user] gently taps [src] with [I].",\ + "This weapon is ineffective, it does no damage.") + else if(I.force >= force_threshold && I.damtype != STAMINA) + ..() + else + visible_message("[I] bounces harmlessly off of [src].",\ + "[I] bounces harmlessly off of [src].") // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. @@ -85,7 +92,7 @@ ///////////////////////// user.lastattacked = M M.lastattacker = user - add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])", print_attack_log = (force > 0))//print it if stuff deals damage + add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])", print_attack_log = (force > 0))//print it if stuff deals damage if(!iscarbon(user)) M.LAssailant = null diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index 3f165060b5d..f269542d5c8 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -168,10 +168,10 @@ location.hotspot_expose(700, 5) return -/obj/item/match/fire_act() +/obj/item/weapon/match/fire_act() matchignite() -/obj/item/match/proc/matchignite() +/obj/item/weapon/match/proc/matchignite() if(!lit && !burnt) lit = TRUE icon_state = "match_lit" @@ -185,7 +185,7 @@ processing_objects.Add(src) update_icon() -/obj/item/match/proc/matchburnout() +/obj/item/weapon/match/proc/matchburnout() if(lit) lit = FALSE burnt = TRUE @@ -198,7 +198,7 @@ attack_verb = list("flicked") processing_objects.Remove(src) -/obj/item/match/dropped(mob/user) +/obj/item/weapon/match/dropped(mob/user) matchburnout() . = ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 23dbff92d33..302fa1bd0bc 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,14 +25,40 @@ icon_state = "box" item_state = "syringe_kit" burn_state = FLAMMABLE - foldable = /obj/item/stack/sheet/cardboard //BubbleWrap + var/foldable = /obj/item/stack/sheet/cardboard + +/obj/item/weapon/storage/box/attack_self(mob/user) + ..() + + if(!foldable) + return + if(contents.len) + to_chat(user, "You can't fold this box with items still inside!") + return + if(!ispath(foldable)) + return + + // Close any open UI windows first + var/found = 0 + for(var/mob/M in range(1)) + if(M.s_active == src) + close(M) + if(M == user) + found = 1 + if(!found) // User is too far away + return + + to_chat(user, "You fold [src] flat.") + var/obj/item/I = new foldable(get_turf(src)) + user.put_in_hands(I) + qdel(src) /obj/item/weapon/storage/box/large name = "large box" desc = "You could build a fort with this." icon_state = "largebox" w_class = 42 // Big, bulky. - foldable = /obj/item/stack/sheet/cardboard //BubbleWrap + foldable = /obj/item/stack/sheet/cardboard storage_slots = 21 max_combined_w_class = 42 // 21*2 @@ -678,7 +704,7 @@ icon_state = "light" desc = "This box is shaped on the inside so that only light tubes and bulbs fit." item_state = "syringe_kit" - foldable = /obj/item/stack/sheet/cardboard //BubbleWrap + foldable = /obj/item/stack/sheet/cardboard storage_slots=21 can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb) max_combined_w_class = 21 diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index f08fc81aaa5..fb888dfeefa 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -22,7 +22,6 @@ var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/foldable = null // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard var/use_sound = "rustle" //sound played when used. null for no sound. /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) @@ -474,35 +473,12 @@ for(var/obj/O in contents) O.hear_message(M, msg) -// BubbleWrap - A box can be folded up to make card -/obj/item/weapon/storage/attack_self(mob/user as mob) +/obj/item/weapon/storage/attack_self(mob/user) //Clicking on itself will empty it, if it has the verb to do that. if(user.is_in_active_hand(src)) - if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) - src.quick_empty() - return - - //Otherwise we'll try to fold it. - if( contents.len ) - return - - if( !ispath(src.foldable) ) - return - var/found = 0 - // Close any open UI windows first - for(var/mob/M in range(1)) - if(M.s_active == src) - src.close(M) - if( M == user ) - found = 1 - if( !found ) // User is too far away - return - // Now make the cardboard - to_chat(user, "You fold [src] flat.") - new src.foldable(get_turf(src)) - qdel(src) -//BubbleWrap END + if(verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) + quick_empty() //Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). //Returns -1 if the atom was not found on container. diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2401cb2a21b..3e73b1ca5c0 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -219,15 +219,12 @@ emp_act if(I.attack_verb && I.attack_verb.len) visible_message("[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!", "[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!")) - else if(I.force == 0) - visible_message("[src] has been [pick("tapped","patted")] on the [hit_area] with [I] by [user]!", \ - "[src] has been [pick("tapped","patted")] on the [hit_area] with [I] by [user]!") - else + else if(I.force) visible_message("[src] has been attacked in the [hit_area] with [I] by [user]!", "[src] has been attacked in the [hit_area] with [I] by [user]!")) + else + return 0 - if(!I.force) - return 0 var/armor = run_armor_check(affecting, "melee", "Your armour has protected your [hit_area].", "Your armour has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) var/weapon_sharp = is_sharp(I) if(weapon_sharp && prob(getarmor(user.zone_sel.selecting, "melee"))) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index d1bcb196c0e..f7e22f60b35 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -193,6 +193,12 @@ updatehealth() return +/mob/living/carbon/slime/MouseDrop(atom/movable/A) + if(isliving(A) && A != usr) + var/mob/living/Food = A + if(Food.Adjacent(usr) && !stat && Food.stat != DEAD) //messy + Feedon(Food) + ..() /mob/living/carbon/slime/unEquip(obj/item/W as obj) return @@ -200,28 +206,25 @@ /mob/living/carbon/slime/attack_ui(slot) return -/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob) +/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M) if(!ticker) to_chat(M, "You cannot attack people before the game has started.") return - if(Victim) return // can't attack while eating! + if(Victim) + return // can't attack while eating! + M.do_attack_animation(src) + visible_message(" The [M.name] has glomped [src]!", \ + " The [M.name] has glomped [src]!") + var/damage = rand(1, 3) + attacked += 5 + if(M.is_adult) + damage = rand(1, 6) + else + damage = rand(1, 3) if(health > -100) - - M.do_attack_animation(src) - visible_message(" The [M.name] has glomped [src]!", \ - " The [M.name] has glomped [src]!") - var/damage = rand(1, 3) - attacked += 5 - - if(M.is_adult) - damage = rand(1, 6) - else - damage = rand(1, 3) - adjustBruteLoss(damage) - updatehealth() return @@ -327,20 +330,6 @@ if(S.next_step(M, src)) return 1 -/* - if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = M.gloves - if(G.cell) - if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien. - if(G.cell.charge >= 2500) - G.cell.use(2500) - visible_message("[src] has been touched with the stun gloves by [M]!") - return - else - to_chat(M, "Not enough charge! ") - return -*/ - switch(M.a_intent) if(INTENT_HELP) @@ -373,9 +362,9 @@ playsound(loc, "punch", 25, 1, -1) visible_message("[M] has punched [src]!", \ "[M] has punched [src]!") - - adjustBruteLoss(damage) - updatehealth() + if(health > -100) + adjustBruteLoss(damage) + updatehealth() else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [src]!") @@ -404,13 +393,14 @@ var/damage = rand(15, 30) if(damage >= 25) damage = rand(20, 40) - visible_message("[M] has attacked [name]!", \ - "[M] has attacked [name]!") + visible_message("[M] has slashed [name]!", \ + "[M] has slashed [name]!") else visible_message("[M] has wounded [name]!", \ ")[M] has wounded [name]!") - adjustBruteLoss(damage) - updatehealth() + if(health > -100) + adjustBruteLoss(damage) + updatehealth() else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to lunge at [name]!", \ diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e38b2e6fd4e..f2849c1813d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -983,11 +983,12 @@ return 0 /mob/living/proc/attempt_harvest(obj/item/I, mob/user) - if(stat == DEAD && !isnull(butcher_results)) //can we butcher it? - if(istype(I, /obj/item/weapon/kitchen/knife)) + if(user.a_intent == INTENT_HARM && stat == DEAD && butcher_results) //can we butcher it? + var/sharpness = is_sharp(I) + if(sharpness) to_chat(user, "You begin to butcher [src]...") playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) - if(do_mob(user, src, 80)) + if(do_mob(user, src, 80/sharpness) && Adjacent(I)) harvest(user) return 1 diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm new file mode 100644 index 00000000000..aa225f0741b --- /dev/null +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -0,0 +1,13 @@ +/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE) + blocked = (100-blocked)/100 + if(!damage || (blocked <= 0)) + return 0 + switch(damagetype) + if(BRUTE) + adjustBruteLoss(damage * blocked) + if(BURN) + adjustFireLoss(damage * blocked) + else + return 1 + updatehealth() + return 1 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 461b5193b69..0acbadbffa6 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -276,9 +276,6 @@ var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) attack_threshold_check(damage,M.melee_damage_type) -/mob/living/simple_animal/proc/attacked_by(obj/item/I, mob/living/user) // Handled in _onclick/click.dm - return - /mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) if(!Proj) return @@ -422,6 +419,7 @@ else visible_message("[O] bounces harmlessly off of [src].",\ "[O] bounces harmlessly off of [src].") + playsound(loc, O.hitsound, 50, 1, -1) else user.visible_message("[user] gently taps [src] with [O].",\ "This weapon is ineffective, it does no damage.") From b76f8d2c35c01753d0b8eff659fa40de580ddd2e Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Sat, 10 Feb 2018 00:56:33 +0500 Subject: [PATCH 07/32] new attack procs minor fixes to make it compile cleans up the code --- code/_onclick/item_attack.dm | 128 +++++++++++------- code/game/mecha/mecha.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/mineral_doors.dm | 2 +- .../mob/living/carbon/carbon_defenses.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 3 - .../mob/living/carbon/human/human_defense.dm | 13 +- .../modules/mob/living/silicon/robot/robot.dm | 12 +- .../mob/living/simple_animal/bot/medbot.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 31 +---- 10 files changed, 97 insertions(+), 102 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 968582443ae..141308a0135 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -13,51 +13,17 @@ if(!(W.flags&NOBLUDGEON)) visible_message("[src] has been hit by [user] with [W].") +/obj/attackby(obj/item/I, mob/living/user, params) + return I.attack_obj(src, user) + /mob/living/attackby(obj/item/I, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) if(attempt_harvest(I, user)) - return - I.attack(src, user) - -/mob/living/proc/attacked_by(obj/item/I, mob/living/user, def_zone) - apply_damage(I.force, I.damtype, def_zone) - if(I.damtype == "brute") - if(prob(33) && I.force) - add_splatter_floor() - - var/showname = "." - if(user) - showname = " by [user]!" - user.do_attack_animation(src) - if(!(user in viewers(src, null))) - showname = "." - - if(I.attack_verb && I.attack_verb.len) - visible_message("[src] has been [pick(I.attack_verb)] with [I][showname]", - "[src] has been [pick(I.attack_verb)] with [I][showname]") - else if(I.force) - visible_message("[src] has been attacked with [I][showname]", - "[src] has been attacked with [I][showname]") - -/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) - if(!I.force) - user.visible_message("[user] gently taps [src] with [I].",\ - "This weapon is ineffective, it does no damage.") - else if(I.force >= force_threshold && I.damtype != STAMINA) - ..() - else - visible_message("[I] bounces harmlessly off of [src].",\ - "[I] bounces harmlessly off of [src].") - -// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. -// Click parameters is the params string from byond Click() code, see that documentation. -/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - return - + return 1 + return I.attack(src, user) /obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) - - if(!istype(M)) // not sure if this is the right thing... + if(flags & (NOBLUDGEON)) return 0 if(can_operate(M)) //Checks if mob is lying down on table for surgery @@ -85,29 +51,91 @@ else return 1 - if(hitsound && force > 0) //If an item's hitsound is defined and the item's force is greater than zero... - playsound(loc, hitsound, get_clamped_volume(), 1, -1) //...play the item's hitsound at get_clamped_volume() with varying frequency and -1 extra range. - else if(force == 0)//Otherwise, if the item's force is zero... - playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1)//...play tap.ogg at get_clamped_volume() - ///////////////////////// + if(!force) + playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) + else if(hitsound) + playsound(loc, hitsound, get_clamped_volume(), 1, -1) + user.lastattacked = M M.lastattacker = user - add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])", print_attack_log = (force > 0))//print it if stuff deals damage if(!iscarbon(user)) M.LAssailant = null else M.LAssailant = user - ///////////////////////// - + if(user != M) + user.do_attack_animation(M) M.attacked_by(src, user, def_zone) + + add_logs(user, M, "attacked", name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])", print_attack_log = (force > 0))//print it if stuff deals damage add_fingerprint(user) - return 1 + + +//the equivalent of the standard version of attack() but for object targets. +/obj/item/proc/attack_obj(obj/O, mob/living/user) + if(flags & (NOBLUDGEON)) + return + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(O) + O.attacked_by(src, user) + +/atom/movable/proc/attacked_by() + return + +/obj/attacked_by(obj/item/I, mob/living/user) + if(I.force) + user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + +/mob/living/attacked_by(obj/item/I, mob/living/user, def_zone) + send_item_attack_message(I, user) + if(I.force) + apply_damage(I.force, I.damtype, def_zone) + if(I.damtype == BRUTE) + if(prob(33)) + I.add_mob_blood(src) + var/turf/location = get_turf(src) + add_splatter_floor(location) + if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood + user.add_mob_blood(src) + return TRUE //successful attack + +/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) + if(!I.force) + user.visible_message("[user] gently taps [src] with [I].",\ + "This weapon is ineffective, it does no damage!") + else if(I.force < force_threshold || I.damtype == STAMINA) + visible_message("[I] bounces harmlessly off of [src].",\ + "[I] bounces harmlessly off of [src]!") + else + return ..() + +// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. +// Click parameters is the params string from byond Click() code, see that documentation. +/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + return /obj/item/proc/get_clamped_volume() if(w_class) if(force) return Clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 else - return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 \ No newline at end of file + return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 + +/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area) + if(I.discrete) + return + var/message_verb = "attacked" + if(I.attack_verb && I.attack_verb.len) + message_verb = "[pick(I.attack_verb)]" + else if(!I.force) + return + var/message_hit_area = "" + if(hit_area) + message_hit_area = " in the [hit_area]" + var/attack_message = "[src] has been [message_verb][message_hit_area] with [I]." + if(user in viewers(src, null)) + attack_message = "[src] has been [message_verb][message_hit_area] with [I] by [user]!" + visible_message("[attack_message]", + "[attack_message]") + return 1 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 63fc5a47168..3f05012586a 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -833,7 +833,7 @@ else return attacked_by(W, user) -/obj/mecha/proc/attacked_by(obj/item/I, mob/user) +/obj/mecha/attacked_by(obj/item/I, mob/user) log_message("Attacked by [I]. Attacker - [user]") user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c04e2e94583..25dfb7f6961 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -234,7 +234,7 @@ W.update_icon() return -/obj/structure/grille/proc/attacked_by(obj/item/I, mob/living/user) +/obj/structure/grille/attacked_by(obj/item/I, mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(!(I.flags&NOBLUDGEON)) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 66680ecc8f5..f6a035158ec 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -141,7 +141,7 @@ else attacked_by(W, user) -/obj/structure/mineral_door/proc/attacked_by(obj/item/I, mob/user) +/obj/structure/mineral_door/attacked_by(obj/item/I, mob/user) if(I.damtype != STAMINA) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) diff --git a/code/modules/mob/living/carbon/carbon_defenses.dm b/code/modules/mob/living/carbon/carbon_defenses.dm index 6878a0f28f7..eb6517e5f1d 100644 --- a/code/modules/mob/living/carbon/carbon_defenses.dm +++ b/code/modules/mob/living/carbon/carbon_defenses.dm @@ -24,7 +24,7 @@ for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) return 1 - ..() + return ..() /mob/living/carbon/attack_hand(mob/living/carbon/human/user) if(!iscarbon(user)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 28c81b026b9..3eb65f993f4 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -228,6 +228,3 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] attempted to disarm [src]!") return - -/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) - return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3e73b1ca5c0..9170a0f74f9 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -215,15 +215,10 @@ emp_act if(istype(I,/obj/item/weapon/card/emag)) emag_act(user, affecting) - if(!I.discrete) - if(I.attack_verb && I.attack_verb.len) - visible_message("[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!", - "[src] has been [pick(I.attack_verb)] in the [hit_area] with [I] by [user]!")) - else if(I.force) - visible_message("[src] has been attacked in the [hit_area] with [I] by [user]!", - "[src] has been attacked in the [hit_area] with [I] by [user]!")) - else - return 0 + send_item_attack_message(I, user, hit_area) + + if(!I.force) + return 0 //item force is zero var/armor = run_armor_check(affecting, "melee", "Your armour has protected your [hit_area].", "Your armour has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) var/weapon_sharp = is_sharp(I) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e3df2023664..4c1053995e0 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -567,10 +567,7 @@ var/list/robot_verbs_default = list( return 2 -/mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do - return - +/mob/living/silicon/robot/attackby(obj/item/weapon/W, mob/user, params) if(opened) // Are they trying to insert something? for(var/V in components) var/datum/robot_component/C = components[V] @@ -610,6 +607,7 @@ var/list/robot_verbs_default = list( else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) + user.changeNext_move(CLICK_CD_MELEE) if(!getFireLoss()) to_chat(user, "Nothing to fix!") return @@ -744,9 +742,13 @@ var/list/robot_verbs_default = list( to_chat(user, "Upgrade error.") else - spark_system.start() return ..() +/mob/living/silicon/robot/attacked_by(obj/item/I, mob/living/user, def_zone) + if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. + spark_system.start() + ..() + /mob/living/silicon/robot/emag_act(user as mob) if(!ishuman(user) && !issilicon(user)) return diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index d1fbd235efc..368a7df552c 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -221,8 +221,9 @@ update_controls() return -/mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/glass)) + . = 1 //no afterattack if(locked) to_chat(user, "You cannot insert a beaker because the panel is locked!") return @@ -236,7 +237,6 @@ reagent_glass = W to_chat(user, "You insert [W].") show_controls(user) - return else var/current_health = health diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0acbadbffa6..cf045091115 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -382,7 +382,7 @@ return -/mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri +/mob/living/simple_animal/attackby(obj/item/O, mob/living/user) if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar)) var/obj/item/clothing/accessory/petcollar/C = O user.drop_item() @@ -396,34 +396,7 @@ real_name = C.tagname return else - user.changeNext_move(CLICK_CD_MELEE) - if(attempt_harvest(O, user)) - return - user.do_attack_animation(src) - if(istype(O) && istype(user) && !O.attack(src, user)) - var/damage = 0 - if(O.force) - if(O.force >= force_threshold) - damage = O.force - if(O.damtype == STAMINA) - damage = 0 - if(O.damtype == BRUTE) - if(prob(33)) - O.add_mob_blood(src) - var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(src) - visible_message("[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!",\ - "[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!") - else - visible_message("[O] bounces harmlessly off of [src].",\ - "[O] bounces harmlessly off of [src].") - playsound(loc, O.hitsound, 50, 1, -1) - else - user.visible_message("[user] gently taps [src] with [O].",\ - "This weapon is ineffective, it does no damage.") - adjustBruteLoss(damage) + ..() /mob/living/simple_animal/movement_delay() . = ..() From 946ae0d58d243b567444b3dab63171a0f02cad54 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Sat, 10 Feb 2018 22:57:28 +0500 Subject: [PATCH 08/32] moves var/list/armor to /obj level adds armor to many objects re-adds the clockcult floor sprite (accidentally removed in another PR) adds clockcult effects to the clockcult floor adds clockcult grilles adds var/broken to /obj/structure adds unused resistance_flags var moves burn_state and resistance_flags to flags.dm more updates to attack code updated obj_defense.dm procs --- code/ATMOSPHERICS/atmospherics.dm | 2 + code/__DEFINES/flags.dm | 12 +++ code/__DEFINES/misc.dm | 6 -- code/_onclick/click.dm | 9 +- code/_onclick/cyborg.dm | 9 +- code/_onclick/item_attack.dm | 11 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 1 + code/game/machinery/Freezer.dm | 3 +- code/game/machinery/ai_slipper.dm | 1 + code/game/machinery/alarm.dm | 1 + code/game/machinery/atmoalter/canister.dm | 1 + code/game/machinery/atmoalter/meter.dm | 1 + .../atmoalter/portable_atmospherics.dm | 1 + code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/cryo.dm | 2 +- code/game/machinery/doors/door.dm | 1 + code/game/machinery/doors/firedoor.dm | 1 + code/game/machinery/doors/poddoor.dm | 1 + code/game/machinery/doors/windowdoor.dm | 1 + code/game/machinery/firealarm.dm | 1 + code/game/machinery/hologram.dm | 2 +- code/game/machinery/igniter.dm | 1 + code/game/machinery/machinery.dm | 2 + code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/newscaster.dm | 1 + code/game/machinery/portable_turret.dm | 3 +- code/game/machinery/requests_console.dm | 1 + code/game/machinery/spaceheater.dm | 1 + code/game/machinery/vending.dm | 24 ++++- code/game/mecha/combat/combat.dm | 1 + code/game/mecha/combat/durand.dm | 1 + code/game/mecha/combat/gygax.dm | 1 + code/game/mecha/combat/honker.dm | 1 + code/game/mecha/combat/marauder.dm | 1 + code/game/mecha/combat/phazon.dm | 1 + code/game/mecha/combat/reticence.dm | 1 + code/game/mecha/mecha.dm | 7 +- code/game/mecha/working/ripley.dm | 2 + .../effects/temporary_visuals/clockcult.dm | 23 ++++ code/game/objects/items.dm | 1 - .../game/objects/items/stacks/sheets/glass.dm | 3 +- code/game/objects/items/weapons/holosign.dm | 1 + code/game/objects/items/weapons/shards.dm | 1 + code/game/objects/items/weapons/shields.dm | 1 + .../game/objects/items/weapons/tanks/tanks.dm | 4 +- .../objects/items/weapons/teleportation.dm | 1 + code/game/objects/items/weapons/twohanded.dm | 1 + code/game/objects/obj_defense.dm | 77 +++++++++++++- code/game/objects/objs.dm | 8 +- code/game/objects/structures.dm | 1 + code/game/objects/structures/barsign.dm | 5 +- .../structures/crates_lockers/closets.dm | 2 +- .../crates_lockers/closets/fireaxe.dm | 1 + .../closets/secure/secure_closets.dm | 1 + code/game/objects/structures/displaycase.dm | 3 +- code/game/objects/structures/fullwindow.dm | 1 + code/game/objects/structures/grille.dm | 99 ++++++++++++------ code/game/objects/structures/lattice.dm | 1 + code/game/objects/structures/mineral_doors.dm | 2 +- code/game/objects/structures/plasticflaps.dm | 1 + code/game/objects/structures/signs.dm | 1 + code/game/objects/structures/tables_racks.dm | 1 + code/game/objects/structures/window.dm | 4 +- code/game/shuttle_engines.dm | 1 + code/game/turfs/simulated/floor/misc_floor.dm | 5 + code/modules/events/spacevine.dm | 46 ++++---- code/modules/hydroponics/hydroitemdefines.dm | 16 +++ .../computers/item/computer.dm | 2 +- code/modules/power/apc.dm | 2 + code/modules/power/lighting.dm | 1 + .../power/singularity/field_generator.dm | 1 + .../particle_accelerator.dm | 1 + code/modules/recycling/disposal.dm | 2 + code/modules/vehicle/vehicle.dm | 1 + icons/effects/clockwork_effects.dmi | Bin 0 -> 139181 bytes icons/obj/structures.dmi | Bin 155939 -> 156785 bytes icons/turf/floors.dmi | Bin 425553 -> 426740 bytes paradise.dme | 1 + 78 files changed, 330 insertions(+), 113 deletions(-) create mode 100644 code/game/objects/effects/temporary_visuals/clockcult.dm create mode 100644 icons/effects/clockwork_effects.dmi diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index b2f58691818..fb6e47f6c0e 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -32,6 +32,8 @@ Pipelines + Other Objects -> Pipe network var/global/datum/pipe_icon_manager/icon_manager /obj/machinery/atmospherics/New() + if(!armor) + armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100) ..() atmos_machinery += src if(!icon_manager) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index a03ba7c9d4c..8c2d6ac0f29 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -1,3 +1,6 @@ +#define ALL ~0 //For convenience. +#define NONE 0 + //FLAGS BITMASK #define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. #define NODROP 2 // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. @@ -89,3 +92,12 @@ #define AFFECT_ROBOTIC_ORGAN 1 #define AFFECT_ORGANIC_ORGAN 2 #define AFFECT_ALL_ORGANS 3 + +//Fire stuff, for burn_state +#define LAVA_PROOF -2 +#define FIRE_PROOF -1 +#define FLAMMABLE 0 +#define ON_FIRE 1 + +//resistant_flags +#define INDESTRUCTIBLE 64 //doesn't take damage diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index f6cb33eb527..d83512ae2b2 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -294,12 +294,6 @@ #define RADIO_CONNECTION_FAIL 0 #define RADIO_CONNECTION_NON_SUBSPACE 1 -//Fire stuff, for burn_state -#define LAVA_PROOF -2 -#define FIRE_PROOF -1 -#define FLAMMABLE 0 -#define ON_FIRE 1 - // Bluespace shelter deploy checks #define SHELTER_DEPLOY_ALLOWED "allowed" #define SHELTER_DEPLOY_BAD_TURFS "bad turfs" diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index f30809d32ef..f300608e699 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -127,9 +127,7 @@ if(A == loc || (A in loc) || (sdepth != -1 && sdepth <= 2)) // No adjacency needed if(W) - var/resolved = A.attackby(W,src) - if(!resolved && A && W) - W.afterattack(A,src,1,params) // 1 indicates adjacency + W.melee_attack_chain(src, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) @@ -145,10 +143,7 @@ if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) if(A.Adjacent(src)) // see adjacent.dm if(W) - // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example, params) - var/resolved = A.attackby(W,src,params) - if(!resolved && A && W) - W.afterattack(A,src,1,params) // 1: clicking something Adjacent + W.melee_attack_chain(src, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 631044f5c97..a00c9561cd3 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -81,10 +81,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) if(A == loc || (A in loc) || (A in contents)) - // No adjacency checks - var/resolved = A.attackby(W,src,params, params) - if(!resolved && A && W) - W.afterattack(A,src,1,params) + W.melee_attack_chain(src, A, params) return if(!isturf(loc)) @@ -93,9 +90,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) if(isturf(A) || isturf(A.loc)) if(A.Adjacent(src)) // see adjacent.dm - var/resolved = A.attackby(W, src, params, params) - if(!resolved && A && W) - W.afterattack(A, src, 1, params) + W.melee_attack_chain(src, A, params) return else W.afterattack(A, src, 0, params) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 141308a0135..bf6c7b5531f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,8 +1,17 @@ +/obj/item/proc/melee_attack_chain(mob/user, atom/target, params) + if(pre_attackby(target, user, params)) + // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) + var/resolved = target.attackby(src, user, params) + if(!resolved && target && !qdeleted(src)) + afterattack(target, user, 1, params) // 1: clicking something Adjacent // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) return +/obj/item/proc/pre_attackby(atom/A, mob/living/user, params) //do stuff before attackby! + return TRUE //return FALSE to avoid calling attackby after this proc does stuff + // No comment /atom/proc/attackby(obj/item/W, mob/living/user, params) return @@ -16,7 +25,7 @@ /obj/attackby(obj/item/I, mob/living/user, params) return I.attack_obj(src, user) -/mob/living/attackby(obj/item/I, mob/user, params) +/mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) if(attempt_harvest(I, user)) return 1 diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 6e085df1a5c..fbb7d249ba0 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -400,6 +400,7 @@ var/bomb_set name = "nuclear authentication disk" desc = "Better keep this safe." icon_state = "nucleardisk" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0) /obj/item/weapon/disk/nuclear/New() ..() diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm index 244b3b04977..d373b09edd6 100644 --- a/code/game/machinery/Freezer.dm +++ b/code/game/machinery/Freezer.dm @@ -8,6 +8,7 @@ use_power = 1 current_heat_capacity = 1000 layer = 3 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) /obj/machinery/atmospherics/unary/cold_sink/freezer/New() ..() @@ -159,8 +160,8 @@ var/max_temperature = 0 anchored = 1.0 layer = 3 - current_heat_capacity = 1000 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) /obj/machinery/atmospherics/unary/heat_reservoir/heater/New() ..() diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 13d619aef9f..b4c725f7d59 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -4,6 +4,7 @@ icon_state = "motion3" layer = 3 anchored = 1.0 + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/uses = 20 var/disabled = TRUE var/lethal = 0 diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index ee6493973e5..7694ff41ca0 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -80,6 +80,7 @@ active_power_usage = 8 power_channel = ENVIRON req_one_access = list(access_atmospherics, access_engine_equip) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) var/alarm_id = null var/frequency = 1439 //var/skipprocess = 0 //Experimenting diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 8057c6edf23..00ca34e9a30 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -50,6 +50,7 @@ var/datum/canister_icons/canister_icon_container = new() density = 1 var/health = 100.0 flags = CONDUCT + armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100) var/menu = 0 //used by nanoui: 0 = main menu, 1 = relabel diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index d3f1f25a52d..2fc688f8906 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -5,6 +5,7 @@ icon_state = "meterX" var/obj/machinery/atmospherics/pipe/target = null anchored = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) power_channel = ENVIRON var/frequency = 0 var/id diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 45dcb5f7880..d24ffb75adc 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -1,6 +1,7 @@ /obj/machinery/portable_atmospherics name = "atmoalter" use_power = 0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) var/datum/gas_mixture/air_contents = new var/obj/machinery/atmospherics/unary/portables_connector/connected_port diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index b0179ff493f..61bcf2a15b8 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -7,7 +7,7 @@ idle_power_usage = 5 active_power_usage = 10 layer = 5 - + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/datum/wires/camera/wires = null // Wires datum var/list/network = list("SS13") var/c_tag = null diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 938011c1fc8..bb33210f780 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -6,7 +6,7 @@ anchored = 1.0 layer = 2.8 interact_offline = 1 - + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) var/on = 0 var/temperature_archived var/mob/living/carbon/occupant = null diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 842b08b577c..c3a1d2dac03 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -8,6 +8,7 @@ density = 1 layer = OPEN_DOOR_LAYER power_channel = ENVIRON + armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100) var/open_layer = OPEN_DOOR_LAYER var/closed_layer = CLOSED_DOOR_LAYER var/visible = 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index fc0fc16d9cf..548e677eecd 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -19,6 +19,7 @@ closed_layer = 3.11 auto_close_time = 50 assemblytype = /obj/structure/firelock_frame + armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100) var/can_force = TRUE var/force_open_time = 300 var/can_crush = TRUE diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index d64b08efedf..c42e046ea28 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -5,6 +5,7 @@ icon_state = "pdoor1" explosion_block = 3 heat_proof = 1 + armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100) var/id_tag = 1.0 var/protected = 1 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index b9910e00997..89157003e5f 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -7,6 +7,7 @@ flags = ON_BORDER opacity = 0 dir = EAST + armor = list(melee = 20, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100) var/obj/item/weapon/airlock_electronics/electronics = null var/base_state = "left" var/health = 150.0 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 2c48f91b422..56a36b07e92 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -12,6 +12,7 @@ FIRE ALARM var/timing = 0.0 var/lockdownbyai = 0 anchored = 1.0 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) use_power = 1 idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 811eceb8e23..41d81a9aef0 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -36,7 +36,7 @@ var/list/holopads = list() icon_state = "holopad0" layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. - + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/mob/living/silicon/ai/master//Which AI, if any, is controlling the object? Only one AI may control a hologram at any time. var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 44a5cc3eee4..ba5867eb260 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -3,6 +3,7 @@ desc = "It's useful for igniting plasma." icon = 'icons/obj/stationobjs.dmi' icon_state = "igniter1" + armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0) var/id = null var/on = 1.0 anchored = 1.0 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 0497ac716f0..f74ef8717a7 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -149,6 +149,8 @@ Class Procs: fast_processing -= src /obj/machinery/New() //new + if(!armor) + armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) machines += src ..() diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 16f7c047dd2..e8f5b743dfd 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -10,7 +10,7 @@ level = 1 // underfloor layer = 2.5 anchored = 1 - + armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0) var/open = 0 // true if cover is open var/locked = 1 // true if controls are locked var/location = "" // location response text diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index a67580d0ebb..7cc40fdc62e 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -78,6 +78,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!" icon = 'icons/obj/terminals.dmi' icon_state = "newscaster_normal" + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) var/screen = NEWSCASTER_MAIN var/paper_remaining = 15 var/securityCaster = 0 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 98013119723..01486963356 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -8,13 +8,12 @@ icon = 'icons/obj/turrets.dmi' icon_state = "turretCover" anchored = 1 - density = 0 use_power = 1 //this turret uses and requires power idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power power_channel = EQUIP //drains power from the EQUIPMENT channel - + armor = list(melee = 50, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0) var/raised = 0 //if the turret cover is "open" and the turret is raised var/raising= 0 //if the turret is currently opening or closing its cover var/health = 80 //the turret's health diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 21e91f3759b..c10f4044f78 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -38,6 +38,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() anchored = 1 icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" + armor = list(melee = 70, bullet = 30, laser = 30, energy = 30, bomb = 0, bio = 0, rad = 0) var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 600dc3704fa..5e09185c002 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -5,6 +5,7 @@ icon_state = "sheater0" name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) var/obj/item/weapon/stock_parts/cell/cell var/on = 0 var/open = 0 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4af01736028..1329922235f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -42,7 +42,7 @@ layer = 2.9 anchored = 1 density = 1 - + armor = list(melee = 20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) var/icon_vend //Icon_state when vending var/icon_deny //Icon_state when denying access @@ -804,11 +804,13 @@ product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" refill_canister = /obj/item/weapon/vending_refill/boozeomat + /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/boozeomat/New() ..() @@ -961,7 +963,7 @@ prices = list(/obj/item/device/pda =300,/obj/item/weapon/cartridge/mob_hunt_game = 50,/obj/item/weapon/cartridge/medical = 200,/obj/item/weapon/cartridge/chemistry = 150,/obj/item/weapon/cartridge/engineering = 100, /obj/item/weapon/cartridge/atmos = 75,/obj/item/weapon/cartridge/janitor = 100,/obj/item/weapon/cartridge/signal/toxins = 150, /obj/item/weapon/cartridge/signal = 75) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/liberationstation name = "\improper Liberation Station" @@ -977,6 +979,7 @@ /obj/item/weapon/gun/projectile/shotgun = 2,/obj/item/weapon/gun/projectile/automatic/ar = 2) premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,/obj/item/ammo_box/magazine/m50 = 4,/obj/item/ammo_box/magazine/m45 = 2,/obj/item/ammo_box/magazine/m75 = 2) contraband = list(/obj/item/clothing/under/patriotsuit = 1,/obj/item/weapon/bedsheet/patriot = 3) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/cigarette name = "cigarette machine" @@ -1015,7 +1018,7 @@ /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/device/sensor_device = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4, /obj/item/weapon/pinpointer/crew = 2) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/pancuronium = 1,/obj/item/weapon/reagent_containers/glass/bottle/sulfonal = 1) - + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) //This one's from bay12 /obj/machinery/vending/plasmaresearch @@ -1036,6 +1039,7 @@ density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/stack/medical/bruise_pack = 2,/obj/item/stack/medical/ointment = 2,/obj/item/weapon/reagent_containers/hypospray/autoinjector = 4,/obj/item/device/healthanalyzer = 1) contraband = list(/obj/item/weapon/reagent_containers/syringe/charcoal = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/food/pill/tox = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/wallmed2 name = "\improper NanoMed" @@ -1047,6 +1051,7 @@ products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,/obj/item/weapon/reagent_containers/syringe/charcoal = 3,/obj/item/stack/medical/bruise_pack = 3, /obj/item/stack/medical/ointment =3,/obj/item/device/healthanalyzer = 3) contraband = list(/obj/item/weapon/reagent_containers/food/pill/tox = 3) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/wallmed1/syndicate name = "\improper SyndiMed Plus" @@ -1069,6 +1074,7 @@ /obj/item/weapon/reagent_containers/food/snacks/donut = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4,/obj/item/weapon/restraints/legcuffs/bola/energy = 7, /obj/item/clothing/mask/muzzle/safety = 4) contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2,/obj/item/device/hailer = 5) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/hydronutrients name = "\improper NutriMax" @@ -1080,6 +1086,7 @@ products = list(/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez = 30,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z = 20,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh = 10,/obj/item/weapon/reagent_containers/spray/pestspray = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5,/obj/item/weapon/cultivator = 3,/obj/item/weapon/shovel/spade = 3,/obj/item/device/plant_analyzer = 4) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) ///obj/item/beezeez = 45, @@ -1100,6 +1107,7 @@ contraband = list(/obj/item/seeds/amanita = 2, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/liberty = 2, /obj/item/seeds/nettle = 2, /obj/item/seeds/plump = 2, /obj/item/seeds/reishi = 2, /obj/item/seeds/cannabis = 3, /obj/item/seeds/starthistle = 2, /obj/item/seeds/fungus = 3, /obj/item/seeds/random = 2) premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /** * Populate hydroseeds product_records @@ -1143,6 +1151,7 @@ /obj/item/clothing/shoes/sandal = 1, /obj/item/weapon/twohanded/staff = 2) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/wizarditis = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/autodrobe name = "\improper AutoDrobe" @@ -1198,7 +1207,7 @@ component_parts += new /obj/item/weapon/vending_refill/autodrobe(0) /obj/machinery/vending/dinnerware - name = "\improper Dinnerware" + name = "\improper Plasteel Chef's Dinnerware Vendor" desc = "A kitchen and restaurant equipment vendor." product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." icon_state = "dinnerware" @@ -1215,6 +1224,7 @@ /obj/item/weapon/kitchen/mould/cane = 1, /obj/item/weapon/kitchen/mould/cash = 1, /obj/item/weapon/kitchen/mould/coin = 1, /obj/item/weapon/kitchen/mould/loli = 1) contraband = list(/obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/kitchen/knife/butcher = 2) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/sovietsoda name = "\improper BODA" @@ -1223,6 +1233,7 @@ product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." products = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda = 30) contraband = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola = 20) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/tool name = "\improper YouTool" @@ -1234,6 +1245,7 @@ /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5) contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/color/fyellow = 2) premium = list(/obj/item/clothing/gloves/color/yellow = 1) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/engivend name = "\improper Engi-Vend" @@ -1244,6 +1256,7 @@ products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/firelock_electronics = 10,/obj/item/weapon/firealarm_electronics = 10,/obj/item/weapon/apc_electronics = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/stock_parts/cell/high = 10,/obj/item/weapon/camera_assembly = 10) contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) //This one's from bay12 /obj/machinery/vending/engineering @@ -1261,6 +1274,7 @@ // There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty. // Another invalid entry, /obj/item/weapon/circuitry. I don't even know what that would translate to, removed it. // The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) //This one's from bay12 /obj/machinery/vending/robotics @@ -1274,6 +1288,7 @@ /obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5, /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) //everything after the power cell had no amounts, I improvised. -Sayu + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/sustenance name = "\improper Sustenance Vendor" @@ -1285,6 +1300,7 @@ /obj/item/weapon/reagent_containers/food/drinks/ice = 12, /obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn = 6) contraband = list(/obj/item/weapon/kitchen/knife = 6) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/hatdispenser name = "\improper Hatlord 9000" diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index aef0a766172..d71775a6a44 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -4,6 +4,7 @@ internal_damage_threshold = 50 maint_access = 0 damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8) + armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0) var/am = "d3c2fbcadca903a41161ccc9df9cf948" /obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 01b5ceb346e..6f3a8b51354 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -8,6 +8,7 @@ health = 400 deflect_chance = 20 damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8) + armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 0) max_temperature = 30000 infra_luminosity = 8 force = 40 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 471a24078fb..d820eef82d1 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -8,6 +8,7 @@ health = 250 deflect_chance = 5 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0) max_temperature = 25000 infra_luminosity = 6 var/overload = 0 diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index e0b10fb622a..751d93c944a 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -8,6 +8,7 @@ deflect_chance = 60 internal_damage_threshold = 60 damage_absorption = list("brute"=1.2,"fire"=1.5,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1) + armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(access_clown) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 1fa404ed5ce..31c3e46afd3 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -7,6 +7,7 @@ health = 500 deflect_chance = 25 damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7) + armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0) max_temperature = 60000 burn_state = LAVA_PROOF infra_luminosity = 3 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 5f66ad3a85c..5dbffb62f29 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -9,6 +9,7 @@ health = 200 deflect_chance = 30 damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0) max_temperature = 25000 infra_luminosity = 3 wreckage = /obj/effect/decal/mecha_wreckage/phazon diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 19eb34fb448..9e51be0357d 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -8,6 +8,7 @@ health = 150 deflect_chance = 30 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0) max_temperature = 15000 wreckage = /obj/effect/decal/mecha_wreckage/reticence operation_req_access = list(access_mime) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3f05012586a..c3de7aa4bfb 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -19,6 +19,7 @@ layer = MOB_LAYER //icon draw layer infra_luminosity = 15 //byond implementation is bugged. force = 5 + armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items) var/can_move = 1 var/mob/living/carbon/occupant = null @@ -333,11 +334,7 @@ else if(istype(obstacle, /obj/structure/grille/)) var/obj/structure/grille/G = obstacle - G.health = (0.25*initial(G.health)) - G.broken = 1 - G.icon_state = "[initial(G.icon_state)]-b" - G.density = 0 - new /obj/item/stack/rods(get_turf(G.loc)) + G.obj_break() breakthrough = 1 else if(istype(obstacle, /obj/structure/table)) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 6c563bb22b3..3d3906edc71 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -9,6 +9,7 @@ lights_power = 7 deflect_chance = 15 damage_absorption = list("brute"=0.6,"fire"=1,"bullet"=0.8,"laser"=0.9,"energy"=1,"bomb"=0.6) + armor = list(melee = 40, bullet = 20, laser = 10, energy = 20, bomb = 40, bio = 0, rad = 0) max_equip = 6 wreckage = /obj/effect/decal/mecha_wreckage/ripley var/list/cargo = new @@ -65,6 +66,7 @@ burn_state = LAVA_PROOF lights_power = 7 damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 60, bio = 0, rad = 0) max_equip = 5 // More armor, less tools wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm new file mode 100644 index 00000000000..4a70c73c9c3 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -0,0 +1,23 @@ +//temporary visual effects(/obj/effect/temp_visual) used by clockcult stuff +/obj/effect/temp_visual/ratvar + name = "ratvar's light" + icon = 'icons/effects/clockwork_effects.dmi' + duration = 8 + randomdir = 0 + layer = ABOVE_NORMAL_TURF_LAYER + +/obj/effect/temp_visual/ratvar/beam + icon_state = "ratvarbeamglow" + +/obj/effect/temp_visual/ratvar/beam/grille + layer = BELOW_OBJ_LAYER + +/obj/effect/temp_visual/ratvar/floor + icon_state = "ratvarfloorglow" + +/obj/effect/temp_visual/ratvar/grille + icon_state = "ratvargrilleglow" + layer = BELOW_OBJ_LAYER + +/obj/effect/temp_visual/ratvar/grille/broken + icon_state = "ratvarbrokengrilleglow" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 91cc00384b0..9d6ebd06fcb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -44,7 +44,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/permeability_coefficient = 1 // for chemicals/diseases var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up - var/armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) var/armour_penetration = 0 //percentage of armour effectiveness to remove var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 2a78511d2c7..a30c3e1b716 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -271,7 +271,6 @@ created_window = /obj/structure/window/plasmabasic full_window = /obj/structure/window/full/plasmabasic - /obj/item/stack/sheet/plasmaglass/attack_self(mob/user as mob) construct_window(user) @@ -359,7 +358,7 @@ origin_tech = "plasmatech=2;materials=2" created_window = /obj/structure/window/plasmareinforced full_window = /obj/structure/window/full/plasmareinforced - + armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0) /obj/item/stack/sheet/plasmarglass/attack_self(mob/user as mob) construct_window(user) diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm index 3ec25dfabaf..c96c5f6f207 100644 --- a/code/game/objects/items/weapons/holosign.dm +++ b/code/game/objects/items/weapons/holosign.dm @@ -50,3 +50,4 @@ icon = 'icons/obj/janitor.dmi' icon_state = "holosign" anchored = 1 + armor = list(melee = 0, bullet = 50, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0) diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 71e0e079282..ec0fdeaf386 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -13,6 +13,7 @@ materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) attack_verb = list("stabbed", "slashed", "sliced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' + armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0) /obj/item/weapon/shard/suicide_act(mob/user) to_chat(viewers(user), pick("[user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.", diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 6d4b1238d39..7863e5431ae 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -1,6 +1,7 @@ /obj/item/weapon/shield name = "shield" block_chance = 50 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0) /obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) if(attack_type == THROWN_PROJECTILE_ATTACK) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 19c4661c707..3ee198e8765 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -8,14 +8,12 @@ slot_flags = SLOT_BACK hitsound = 'sound/weapons/smash.ogg' w_class = WEIGHT_CLASS_NORMAL - pressure_resistance = ONE_ATMOSPHERE*5 - force = 5.0 throwforce = 10.0 throw_speed = 1 throw_range = 4 - + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) actions_types = list(/datum/action/item_action/set_internals) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 11da88ae680..f2ecf3190a3 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -103,6 +103,7 @@ Frequency: throw_range = 5 materials = list(MAT_METAL=10000) origin_tech = "magnets=3;bluespace=4" + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0) var/active_portals = 0 /obj/item/weapon/hand_tele/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 96628da9a26..9c78e6f7b94 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -545,6 +545,7 @@ throwforce = 15 throw_range = 1 w_class = WEIGHT_CLASS_HUGE + armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 50, bio = 0, rad = 0) var/charged = 5 origin_tech = "combat=4;bluespace=4;plasmatech=7" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index c78d8d0e2b4..8ad7e8c9b91 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -1,6 +1,35 @@ +//the essential proc to call when an obj must receive damage of any kind. +/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) + if(sound_effect) + play_attack_sound(damage_amount, damage_type, damage_flag) + if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0) + damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration) + if(damage_amount >= 0.1) + . = damage_amount + var/old_integ = obj_integrity + obj_integrity = max(old_integ - damage_amount, 0) + if(obj_integrity <= 0) + var/int_fail = integrity_failure + if(int_fail && old_integ > int_fail) + obj_break(damage_flag) + obj_destruction(damage_flag) + else if(integrity_failure) + if(obj_integrity <= integrity_failure) + obj_break(damage_flag) -/obj/proc/take_damage() - return +//returns the damage value of the attack after processing the obj's various armor protections +/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) + switch(damage_type) + if(BRUTE) + if(BURN) + else + return 0 + var/armor_protection = 0 + if(damage_flag) + armor_protection = armor[damage_flag] + if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. + armor_protection = Clamp(armor_protection - armour_penetration, 0, 100) + return round(damage_amount * (100 - armor_protection)*0.01, 0.1) //the sound played when the obj is damaged. /obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -13,6 +42,16 @@ if(BURN) playsound(src.loc, 'sound/items/welder.ogg', 100, 1) +/obj/hitby(atom/movable/AM) + ..() + var/tforce = 0 + if(ismob(AM)) + tforce = 10 + else if(isobj(AM)) + var/obj/O = AM + tforce = O.throwforce + take_damage(tforce, BRUTE, "melee", 1, get_dir(src, AM)) + /obj/singularity_act() ex_act(1) if(src && !qdeleted(src)) @@ -54,4 +93,36 @@ //the obj is deconstructed into pieces, whether through careful disassembly or when destroyed. /obj/proc/deconstruct(disassembled = TRUE) - qdel(src) \ No newline at end of file + qdel(src) + +//what happens when the obj's health is below integrity_failure level. +/obj/proc/obj_break(damage_flag) + return + +//what happens when the obj's integrity reaches zero. +/obj/proc/obj_destruction(damage_flag) + if(damage_flag == "fire") + burn() + else + deconstruct(FALSE) + +//changes max_integrity while retaining current health percentage +//returns TRUE if the obj broke, FALSE otherwise +/obj/proc/modify_max_integrity(new_max, can_break = TRUE, damage_type = BRUTE, new_failure_integrity = null) + var/current_integrity = obj_integrity + var/current_max = max_integrity + + if(current_integrity != 0 && current_max != 0) + var/percentage = current_integrity / current_max + current_integrity = max(1, round(percentage * new_max)) //don't destroy it as a result + obj_integrity = current_integrity + + max_integrity = new_max + + if(new_failure_integrity != null) + integrity_failure = new_failure_integrity + + if(can_break && integrity_failure && current_integrity <= integrity_failure) + obj_break(damage_type) + return TRUE + return FALSE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index daea457e696..2bbadfcd0ba 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -12,11 +12,13 @@ var/can_deconstruct = TRUE var/damtype = "brute" var/force = 0 - + var/list/armor var/obj_integrity //defaults to max_integrity var/max_integrity = 500 var/integrity_failure = 0 //0 if we have no special broken behavior + var/resistance_flags = NONE // INDESTRUCTIBLE + var/Mtoollink = 0 // variable to decide if an object should show the multitool menu linking menu, not all objects use it var/burn_state = FIRE_PROOF // LAVA_PROOF | FIRE_PROOF | FLAMMABLE | ON_FIRE @@ -28,7 +30,9 @@ var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created. /obj/New() - . = ..() + ..() + if(!armor) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) if(obj_integrity == null) obj_integrity = max_integrity if(on_blueprints && isturf(loc)) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 2f05d26dd53..a775fec0095 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -3,6 +3,7 @@ pressure_resistance = 8 var/climbable var/mob/climber + var/broken = FALSE /obj/structure/blob_act() if(prob(50)) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 93f4bb7be9b..1306e4214be 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -4,17 +4,14 @@ icon = 'icons/obj/barsigns.dmi' icon_state = "empty" req_access = list(access_bar) + armor = list(melee = 20, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 0, rad = 0) var/list/barsigns=list() var/list/hiddensigns - var/broken = 0 var/emagged = 0 var/state = 0 var/prev_sign = "" var/panel_open = 0 - - - /obj/structure/sign/barsign/New() ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 4c8a2528b1e..9ab957d4664 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -4,12 +4,12 @@ icon = 'icons/obj/closet.dmi' icon_state = "closed" density = 1 + armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0) var/icon_closed = "closed" var/icon_opened = "open" var/opened = 0 var/welded = 0 var/locked = 0 - var/broken = 0 var/wall_mounted = 0 //never solid (You can always pass over it) var/health = 100 var/lastbang diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 5baef28f262..47eb5ead7e5 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -8,6 +8,7 @@ icon_opened = "fireaxe1100" anchored = 1 density = 0 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100) var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri opened = 1 var/hitstaken = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 72ef10a5cde..6f4af20adc4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -7,6 +7,7 @@ opened = 0 locked = 1 broken = 0 + armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0) var/large = 1 icon_closed = "secure" var/icon_locked = "secure1" diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 16d77587274..c1bd4bc9721 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -18,6 +18,7 @@ var/global/list/captain_display_cases = list() name = "display case frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "box_glass" + armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) var/obj/item/weapon/airlock_electronics/circuit = null var/obj/item/device/assembly/prox_sensor/sensor = null var/state = DISPLAYCASE_FRAME_CIRCUIT @@ -116,7 +117,7 @@ var/global/list/captain_display_cases = list() /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." - burglar_alarm = 1 + burglar_alarm = 1 locked = 1 req_access = list(access_captain) start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain diff --git a/code/game/objects/structures/fullwindow.dm b/code/game/objects/structures/fullwindow.dm index f2663063dea..08e86e8f534 100644 --- a/code/game/objects/structures/fullwindow.dm +++ b/code/game/objects/structures/fullwindow.dm @@ -95,6 +95,7 @@ health = 160 reinf = 1 explosion_block = 3 + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100) /obj/structure/window/full/shuttle/New() ..() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 25dfb7f6961..9af91affa52 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -1,16 +1,17 @@ /obj/structure/grille - desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." + desc = "A flimsy framework of metal rods." name = "grille" icon = 'icons/obj/structures.dmi' icon_state = "grille" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE flags = CONDUCT pressure_resistance = 5*ONE_ATMOSPHERE layer = BELOW_OBJ_LAYER level = 3 - var/health = 10 - var/broken = 0 + armor = list(melee = 50, bullet = 70, laser = 70, energy = 100, bomb = 10, bio = 100, rad = 100) + max_integrity = 50 + integrity_failure = 20 var/rods_type = /obj/item/stack/rods var/rods_amount = 2 var/rods_broken = 1 @@ -19,7 +20,6 @@ /obj/structure/grille/fence/ var/width = 3 - health = 50 /obj/structure/grille/fence/New() if(width > 1) @@ -51,6 +51,20 @@ if(!broken) obj_break() +/obj/structure/grille/examine(mob/user) + ..() + if(anchored) + to_chat(user, "It's secured in place with screws. The rods look like they could be cut through.") + if(!anchored) + to_chat(user, "The anchoring screws are unscrewed. The rods look like they could be cut through.") + +/obj/structure/grille/ratvar_act() + if(broken) + new /obj/structure/grille/ratvar/broken(loc) + else + new /obj/structure/grille/ratvar(loc) + qdel(src) + /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) @@ -65,9 +79,9 @@ if(shock(user, 70)) return if(HULK in user.mutations) - take_damage(5) + take_damage(60, BRUTE, "melee", 1) else - take_damage(rand(1,2)) + take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_alien(mob/living/user) if(istype(user, /mob/living/carbon/alien/larva)) @@ -79,7 +93,7 @@ "You hear twisting metal.") if(!shock(user, 70)) - take_damage(5) + take_damage(20, BRUTE, "melee", 1) /obj/structure/grille/attack_slime(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) @@ -105,7 +119,7 @@ "You smash against [src].", \ "You hear twisting metal.") - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type) + take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", 1) /obj/structure/grille/mech_melee_attack(obj/mecha/M) if(..()) @@ -259,25 +273,15 @@ var/obj/R = new rods_type(loc, rods_amount) transfer_fingerprints_to(R) qdel(src) + ..() -/obj/structure/grille/proc/obj_break() +/obj/structure/grille/obj_break() if(!broken && can_deconstruct) new broken_type(loc) var/obj/R = new rods_type(loc, rods_broken) transfer_fingerprints_to(R) qdel(src) -/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - if(sound_effect) - play_attack_sound(damage_amount, damage_type, damage_flag) - health -= damage_amount - if(health <= 0) - if(!broken) - obj_break() - else - if(health <= -6) - deconstruct() - // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise @@ -303,33 +307,60 @@ /obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!broken) if(exposed_temperature > T0C + 1500) - take_damage(1) + take_damage(1, BURN, 0, 0) ..() /obj/structure/grille/hitby(atom/movable/AM) - ..() - var/tforce = 0 - if(ismob(AM)) - tforce = 5 - else if(isobj(AM)) - if(prob(50)) - var/obj/O = AM - tforce = max(0, O.throwforce * 0.5) - else if(anchored && !broken) + if(isobj(AM)) + if(prob(50) && anchored && !broken) var/turf/T = get_turf(src) var/obj/structure/cable/C = T.get_cable_node() if(C) playsound(loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 3, C.powernet.avail * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. C.powernet.load += C.powernet.avail * 0.0375 // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. - take_damage(tforce) + return ..() /obj/structure/grille/broken // Pre-broken grilles for map placement icon_state = "brokengrille" density = 0 - health = 0 + obj_integrity = 20 broken = 1 rods_amount = 1 rods_broken = 0 grille_type = /obj/structure/grille broken_type = null + +/obj/structure/grille/ratvar + icon_state = "ratvargrille" + name = "cog grille" + desc = "A strangely-shaped grille." + broken_type = /obj/structure/grille/ratvar/broken + +/obj/structure/grille/ratvar/New() + ..() + if(broken) + new /obj/effect/temp_visual/ratvar/grille/broken(get_turf(src)) + else + new /obj/effect/temp_visual/ratvar/grille(get_turf(src)) + new /obj/effect/temp_visual/ratvar/beam/grille(get_turf(src)) + +/obj/structure/grille/ratvar/narsie_act() + take_damage(rand(1, 3), BRUTE) + if(src) + var/previouscolor = color + color = "#960000" + animate(src, color = previouscolor, time = 8) + +/obj/structure/grille/ratvar/ratvar_act() + return + +/obj/structure/grille/ratvar/broken + icon_state = "brokenratvargrille" + density = FALSE + obj_integrity = 20 + broken = TRUE + rods_amount = 1 + rods_broken = 0 + grille_type = /obj/structure/grille/ratvar + broken_type = null diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 003daa76645..0cb716bcc7d 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -5,6 +5,7 @@ icon_state = "latticefull" density = 0 anchored = 1.0 + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) layer = 2.3 //under pipes // flags = CONDUCT diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index f6a035158ec..097439cccf2 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/doors/mineral_doors.dmi' icon_state = "metal" - + armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100) var/initial_state var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index d9eff5b9ea3..b9c54600ab6 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -6,6 +6,7 @@ density = 0 anchored = 1 layer = 4 + armor = list(melee = 100, bullet = 80, laser = 80, energy = 100, bomb = 50, bio = 100, rad = 100) var/list/mobs_can_pass = list( /mob/living/carbon/slime, /mob/living/simple_animal/mouse, diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index b1cf367ba1f..7d89f48eb33 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -4,6 +4,7 @@ opacity = 0 density = 0 layer = 3.5 + armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/structure/sign/ex_act(severity) switch(severity) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 5b6fec84c73..5005d9e4aff 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -534,6 +534,7 @@ canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) max_integrity = 200 integrity_failure = 50 + armor = list(melee = 10, bullet = 30, laser = 30, energy = 100, bomb = 20, bio = 0, rad = 0) /obj/structure/table/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index cfee76dc749..361b815a358 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -446,6 +446,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f shardtype = /obj/item/weapon/shard/plasma glasstype = /obj/item/stack/sheet/plasmaglass health = 120 + armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100) /obj/structure/window/plasmabasic/New(Loc,re=0) ..() @@ -474,7 +475,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f glasstype = /obj/item/stack/sheet/plasmaglass reinf = 1 health = 160 - + armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100) /obj/structure/window/plasmareinforced/New(Loc,re=0) ..() @@ -499,6 +500,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f reinf = 1 basestate = "rwindow" health = 40 + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100) /obj/structure/window/reinforced/tinted name = "tinted window" diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 3072fd2a264..21a55004ade 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -1,6 +1,7 @@ /obj/structure/shuttle name = "shuttle" icon = 'icons/turf/shuttle.dmi' + armor = list(melee = 100, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) //default + ignores melee /obj/structure/shuttle/shuttleRotate(rotation) ..() diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index ddc95afaccd..62f3ff84f0e 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -74,6 +74,11 @@ desc = "Tightly-pressed brass tiles. They emit minute vibration." icon_state = "clockwork_floor" +/turf/simulated/floor/clockwork/New() + ..() + new /obj/effect/temp_visual/ratvar/floor(src) + new /obj/effect/temp_visual/ratvar/beam(src) + /turf/simulated/floor/clockwork/attackby(obj/item/I, mob/living/user, params) if(iscrowbar(I)) user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index f0408a9bdc0..c4460519521 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -481,37 +481,39 @@ eater.say("Nom") wither() -/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params) - if (!W || !user || !W.type) - return - user.changeNext_move(CLICK_CD_MELEE) - var/damage_to_do = W.force - - if(istype(W, /obj/item/weapon/scythe)) - var/obj/item/weapon/scythe/S = W +/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user) + var/damage_dealt = I.force + if(istype(I, /obj/item/weapon/scythe)) + var/obj/item/weapon/scythe/S = I if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes) - damage_to_do *= 4 + damage_dealt *= 4 for(var/obj/structure/spacevine/B in range(1,src)) - if(B.health > damage_to_do) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier - B.health -= damage_to_do + if(B.health > damage_dealt) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier + B.take_damage(damage_dealt, I.damtype, "melee", 1) else B.wither() return - - if(is_sharp(W)) - damage_to_do *= 4 - - if(W && W.damtype == "fire") - damage_to_do *= 4 + if(is_sharp(I)) + damage_dealt *= 4 + if(I.damtype == BURN) + damage_dealt *= 4 for(var/datum/spacevine_mutation/SM in mutations) - damage_to_do = SM.on_hit(src, user, W, damage_to_do) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further + damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further + take_damage(damage_dealt, I.damtype, "melee", 1) - health -= damage_to_do - if(health < 1) - wither() +/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src, 'sound/weapons/slash.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 100, 1) - ..() +/obj/structure/spacevine/obj_destruction() + wither() /obj/structure/spacevine/Crossed(mob/crosser) if(isliving(crosser)) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index cee72938fc6..d9574550190 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -119,6 +119,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' sharp = 1 var/extend = 1 + var/swiping = FALSE /obj/item/weapon/scythe/suicide_act(mob/user) user.visible_message("[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.") @@ -130,6 +131,21 @@ playsound(loc, pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg'), 50, 1, -1) return (BRUTELOSS) +/obj/item/weapon/scythe/pre_attackby(atom/A, mob/living/user, params) + if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user)) + return ..() + else + var/turf/user_turf = get_turf(user) + var/dir_to_target = get_dir(user_turf, get_turf(A)) + swiping = TRUE + var/static/list/scythe_slash_angles = list(0, 45, 90, -45, -90) + for(var/i in scythe_slash_angles) + var/turf/T = get_step(user_turf, turn(dir_to_target, i)) + for(var/obj/structure/spacevine/V in T) + if(user.Adjacent(V)) + melee_attack_chain(user, V) + swiping = FALSE + /obj/item/weapon/scythe/tele icon_state = "tscythe0" item_state = null //no sprite for folded version, like a tele-baton diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index f72d4bfccda..1777bc26407 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -32,7 +32,7 @@ integrity_failure = 50 max_integrity = 100 - armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100) // Important hardware (must be installed for computer to work) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 59ae659f227..ce500463ada 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -138,6 +138,8 @@ terminal.connect_to_network() /obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) + if(!armor) + armor = list(melee = 20, bullet = 20, laser = 10, energy = 100, bomb = 30, bio = 100, rad = 100) ..() apcs += src apcs = sortAtom(apcs) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 57a6e77b660..7a6c648610f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -16,6 +16,7 @@ icon_state = "tube-construct-stage1" anchored = 1 layer = 5 + armor = list(melee = 50, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) var/stage = 1 var/fixture_type = "tube" var/sheets_refunded = 2 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 5b1fc73e24b..2a66339bfed 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -27,6 +27,7 @@ field_generator power level display anchored = 0 density = 1 use_power = 0 + armor = list(melee = 25, bullet = 10, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) var/const/num_power_levels = 6 // Total number of power level icon has var/power_level = 0 var/active = FG_OFFLINE diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index d6d83255a81..dfbedc07ad2 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -62,6 +62,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin icon_state = "none" anchored = 0 density = 1 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 0, bomb = 0, bio = 0, rad = 0) var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = 0 var/reference = null diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 1aae13e1f0d..0e06e67f3e8 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -15,6 +15,7 @@ anchored = 1 density = 1 on_blueprints = TRUE + armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100) var/datum/gas_mixture/air_contents // internal reservoir var/mode = 1 // item mode 0=off 1=charging 2=charged var/flush = 0 // true if flush handle is pulled @@ -659,6 +660,7 @@ var/dpdir = 0 // bitmask of pipe directions dir = 0 // dir will contain dominant direction for junction pipes var/health = 10 // health points 0-10 + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100) layer = 2.3 // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index bdd8ca39c90..bdd8c2a9608 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -8,6 +8,7 @@ anchored = 0 can_buckle = 1 buckle_lying = 0 + armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0) var/keytype = null //item typepath, if non-null an item of this type is needed in your hands to drive this vehicle var/next_vehicle_move = 0 //used for move delays var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower diff --git a/icons/effects/clockwork_effects.dmi b/icons/effects/clockwork_effects.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5d6082dc2bdaf817a5380fb24fe7a7efdabb3e90 GIT binary patch literal 139181 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
OF;@^4 zf?akn_>?Nno>-`NGJA`Yf;Km6`q^3tt=pXUgh<50B5&F^nUUN@LYp%Xm`stSWHEGg zs# zCQ+FSqT&!I|GBIV9@8)?_Hz?D7j+bjZgp7c{gfG^r3cufPDWLv?h+|xeTbmuM(EaK z$Qo>o zPMOns?)UXZ(V9KI6{zj`HH}gYZ3C%`LX8 z4}{`n{Pyj^-+O=hb*c|Ohjmo+DrHs9Y67OP;iTI0)elLh58uPjhaY5b^i{XV%Ao3X zAk3d_xhL*xX<6>!M}SD%=liZnk1FnD&DqJ;V#5ReEojBQc^T+x#^tawM#zoue_Yl} z#s|&cg45CTp$$vM#EDWZzR>L${LsOOcAU6f@hOneh8AO~h+!lB`?;zwJ=$kkKSWWC zP-$GPYSWUtOZt9OgmC?CG{&chMer$XZ&$3{FR{qVzfHRLtDbi}?6KxO03v46O<#mkLoECpr7e#A!g7ZZ%-dSZ9P{&mcM6%@Cf7x=GGj(a?x%m(lx)vKKQH;JkKFQ|xaZgvU6dskmTsyz^WGI}rhG_0%aXebLe^+~Sh{)G2_k#kw{a37+AMy^En)Gxe z;xn%!0e?Jd;;zb@BEf&*DB%j03M8bg&hJJPNu{MZqV@-}Xx}w-{YqnJady4H7!Vrd zkQA7WCsq3(({=F}|FE-62gq>Bh{dM9i~A=$Zt^r<^X;=j{D3T5gDeO!>Q|Q7>-R0g zDDoL1hJFr}**HY|POlvikw0Y#F$Bn-wfl~6N^;nO(K|1L-^{w+JyGueLG1kcQ3Lx{ z);o4ukN#60W|cY|rug;NONhTuD;Fp({<2Vbc;&nShX!G#p_s-nqa7Q7MciYHoGXdT zSAR~yhW^O_zFPos2E}6T@1e#q7Ddj)*0kdWUUJ_;Ct{w#^O=Won9G=ge;AFKOlFC& z*RTW$%+4cGN?WMYI^xCi7xT%gTR@te|Gx@@to09ahhKg@^S(1hRid!E#zc&+5u#nN z+I^`nUnHyd-!R3dK55+a{%6n3J>vW9@bdBa{$D2-TR>A5|A!!wNl~-PADH8aKY4GT zi(D6X>I)ErD4wFumPp^9y&VXmQRg`jhI%psNLML_cE;{L!rb4YXD?-VrWE#^7Si9} zGo(RXqBw5hre1l~xroP&1Y#%Z98l$My`5v9oJ^CVJ3Q#0E|cDVzBsD^_UwOmKR3v4 zurXpjtiHbHpZhQW2RJTZ_0x{OvSFbCh5yjjhGp^NSs$st!vg{=G<1DYF!T}X&unS- zn|V$A^NYX3{q9dr^eF=D^WK!bb0?3X38%l$O_6)n>k9fhzFv)Ll;_7*SO@>;WLKp! z=07Bknyl}XoEH@HrhUOEq(6{yL5-KU;OP&xC6j?yo)?r{HJ2TV93`e>z!=h}2u78J zT4{M$j0FZm56r-vVxE_eC$vs(q8aa-L4mS(_Q;D5zsp!ZB4Lw^g({vY6$laEFP7>F)MS3y|STQhD zA4Sg7>7&V48NS-(APa+Db9ClBLC;$z9e7iVG#iEJjN zE6i}B@0e65NbWJ80C@%4PB}E43r*N9u-SEyT6B97w=A=E$tMy@MW$+BS+g{5+7aJ@9g&))JnbK-3{{oBzZ3NVUfinB|wD{*EJD$Fz>^ z&oJO&hK<8pI--b1$IFz_UgY`2q!|zgD1kyo%IYgN{-s&dVu4HOohW!ewk(w#JbGOG zcn_+nd6&$)@(wnBK8epATLF?sH@6(e5MCEy%zYk^(aO0pCoTJ^(D21o&H$h1R4s29 z!vVCIkHvvdNeM4*{>{8`s+*F~&v&LugN{ZMKd6b>n#=j~r4`GT3)En-=wUC`@1nu9_qPZjgtSjS zX?0yI_C>6na788EX;MdMq9tG@oM#}20P-<*DrJHI|ecL^P zW4>2>2DFp)OQ!z*Qnn2a%;e%U! zmQM7;UsuHZFbL#O>Y^vfHKz>Hh&;7~Rbkv9DUcP0L;;`Mw>InoSp4{^g|o1&{Sest z!nxAPCV%Wl!m{;ecX*L$TgvwiKDKN7;$HBb7;?b%I>z$|3f5UA#S4)fLf6{se(a|% z-z&V+w~8sh*ZcA>OMMSz*zK%X>v1l`jm)9-EuDw6aERZ8wHAH2^}C%kOTHbL=p2}+ z!unn}-?dFwL6}r9v^)|zBORHw!Wq&$e@n$u6tmb43`O;?C(p=KqB!pDCDk-Z=;cuS z&}~GmS1qWch&~@O_t4+tgzP*wOLgA62@~vrxUJnV2dM!~p^e8MCu}~o`WVbrZj<^y zT<$(m_%tbtK3_bvol3T>xYVuO;1*co&IqANHY-6G*~^7*DeJBYe~#&VI%h6Qmf;0u zFML3knhWdW;|?{#EKUn{x23e#&e1zviOsF@yQc8F|9*Gx)a)9nrqACp{(6|Rwe~hR zpcG`a3tQ`GHl7Q4I?Fl>|HC3MWlk?V8&tdU?kNc)W{)<;9I4aIJsc+EvR(}k>uVwr zdDs^9cbda0W$K8hDceX7`Y8qV#M`TiZP9UU-OQ_bT*>x~;r?;ZR)TnNSl8P*S87nb zI)3j;aEt#BtC4NGdbn#pdGsNUI-nE9B@Z6~-ErcMR0mRPx$igXzt%2DI$h{>F;5wsI?4 zK@(I}mGVaw&C=CDE*0;Gyq5O8g_v%7DoI@4<1J&RJG50?j#lz#uv*He^E8J#GxC*& zrm-`u8z=qOsU!D9eU9O5$TueG3qd|K;T^T_z@b2w5xZ z-FjVCJnlX6;x+rh2S`*Z;L*ajU>(#QEUbH8S^oyx=sQKUcvQ~*LXq@kl-P6IE#78tx;no-Mz?22H zKt*3j1BKBadT3@m6y9HZ&F$YZ*q?B*W*lMmah7ugJHF}TFCKKbn+r?rj9(X#Y6Ec>dj_aoxMI^@vlveW=L3DD%Hb+B6 z#{|zH^@wP1oe)EllzC49eI&y;yUx_3uX!Bd#FAcZC9h?NfAP%a0W_tw59w`5f-4;or871YMnAhK_5~8+T#3qEej?Kfdo57!MC}1!ahSW8i%HD zBL`nJ9^?M@JzYh1Z6TmOyFhN6wVR(C?p~?N0=N+F>qW0%KN}Vy{|xXQpq{@;qfH}X$3(NiaYv=q>gG!$N$7gWO+(d(NjG`3 z4Pz-8=J|uhZemO}*c79UVLeUNTfe#M?YUQUmj7!3hIoHm4_3HQ=~snrB}QWVqi$vb z(9eILuf(C-H!?Cm#yv%HD8i5tOb8O|MN~X=#Y}kq$jzEmAy8!6VG8475#USRL#r0` z1#(hh(uYCfQiY-B7{)6Z|J(0m`OgdxcNR4qi3B^;;TcjZ^LJOiZOgYUS^{gLnSY1A zXj&6D#Lj1pd>=ln8+@r}$k98ivDp?8NSzhL4H1}}e>-+hr5Cz-yBwm(uFkAMzF^ts z+moZ<%SmmpMX5x`Fo)?3y&BKxk6D?V77t+I%yw=Lh!isQnZ0_$z(|DUa-^OIR%L}> zdl>v+tQcnuqoVQs=TnSWXa`+?dp!5Q-Y(W!r-c|A=i}#>a8yv2UC9ObLEDB9a&znt z76iGJvSdV{;ExO>M&tE><@-e>m=cPrXqH~=b zp6Qr}X{k%#e>SgR$HR2C`eZ5|kth~i*-0_1cBCcnu(8_38AK(bP3G;tMH9#alX(uB z(Ny2yVPe`UUUEQwTg^-T{_5NBcUEAp*XnrjyfTUM-uw$XF2l*ACh~)aw!WRFppx13 zZ3c7K09fl$iNb-K>GG&DowbNIr&Cu2&lzHZj}q>4 zIjII{Bq*~N44O~H%o|>1^IMkPzS=5`AHi2=O}OfK3UpZkkXS5`l=lhfLV{|8zfAI? zbXHB>vb3g!YlqTXvzThOdvuhDMC309QR586mGZM>fh87MHADKmmQ3r(9O_D(bjUr8 zm$_;}xV|c4WNUl~`6kp3>ktWb@}y~q6fdREV9TkiD-(un2xkkEBx3}iF+_7U~ zmtXdi2`5V$rNdFFXwaxa zfX$&tMZceTyLRG>W#VuTaqI9D_D^2=teHzyZo2SECy(956B$51r)xN{pu}uCWhqBB z>Dj=KMhuFxm;t`Zk!F}o+pSv$`saGWId!WLDJxhkSYXQ`#TU`UL$(?PuV5&Rwr>rG zCX~MPntjl0a9+0{glis!M6Dgdv20z8;mG_iu~uxbn}oEyYN$eS15<*@etw@{?1vbx zQrQ8;hT&`Li`61a_m@A1+vg^TFH(Q}m&q>nZvfBP{&&F_y4dfS|8|PLLqP@(4-j`x znIFB13{6?TUAn(NdtIdkY#Mf5F+$37_lw_9yZuq}XuH=$a$3eRKihL9MY0>EHJ+lV z|6E$I%WMDCxR|`OQ1o$cTquOzVR0I!GLn}A)xRE}lp`-&}*ds&P4 zM&umA{W+XVDzEJ!GZ}bhmWVSKxc(jHpBB=&(eQZhBvU+wyRU_{hgV%6E^~lJ(4;?2jHEc4j>>+{;FV;B)aR z-5 z4xbSKZNBQqLG>j3nL&wdHI|RiqDYTlXL;z~s4Er9fAaor6j#?6jA(J`JhXegh!yDo zTrh{bf$&4=O}Drj7~k`p=0(bhOAh-P#OB(=VtL@K?wUZxfsbnU855DIDrfMqZR}Mh zvK&5)yo1UmK@U$_7WD;bxUBCM+g~5v{`tS&m;%12%?=Wni%1VjAi@ODS%$nv%<*Kl zN;&#GEzUwSX^3Or?$?7T)diVlmpo3WYvkX=BBD9D8Y&i{yM^9`PJ3 zk@>&X-@$o+*GcxiDYm}I9VYSHxZOoAHDTSKI4QV)ffQ&5lr_Mx6DqNLx_i2@r%!9o zTsiV$4dI4~0l^VxUS1lFwt{u?2s>-n+ndjQE+9$ed*zRBiW#AlsveTCT_(monwB8Btcb@7zPafo@Ylk9c!W)Td5dG zXlyDpIP*JiwRmW9_sn^|%wDx~ZI3=l6II=+6j->+5h?b&^V!cj_ukllVA=Rc3DyNN z2DmK_H0boNH0p1T4`)Ap=(^wo6av08(vk(sQc+V|MD2#tQ5?HDGx71T)|72ck72Uh z;-bp35QMBun&;4u;vp%`J${~S+hsrQ9+$QTNs;6OF;Von1e!VgDh9&BlYB%FF>&M+ zCc#XsN&5|d;Hve~TAAoeGQ0UcO#=YaemS?%;ijNX2f2F$03aQlhuAg$5Fu;)O(Zia zVh;_#9#vb5>r-`06)dK+n&M~FSO~&Mh^n>P4u_`UV*>b4mAR_e^!{p}m+x8VvmUr& z(n_mZ<2T;RiWq$t3N=M(ON3n004xWWWl=xxlOt28=(1R{HuJ&W$CDMmS(#6^nQS`z zvbgrM^yAku8P2A%EruxT(H~o> zEO|BP`7EL%dmav+$m^S@6>?AjxLL4!@ue8~7>}C;PN8Sk2d0D7+W|_J$66Gt@Y5xq zLmj2d0r{E`m+;FeKotJ8!s=OZe4zQ-#Q{Q_a@pNG%)0%me{eoL9i3WZmrutLBh~Ku zxW;SlWHpJpsRH(Z)2hPL*Ov*Y9{m_>fCI3}AmHuB?all+62OiG33e`u#!YZ0Y%fib zwblJ9H|Yc9Vp zde6i~C@eGp_|jY{`7J!HlcB^v(1_KTS~sKg#Aab$sS_L_kng|j132Dkte-VpfhO?7 z5HnZRh>2qAK21B?z;|V8$#csZA|?8(x3oFVPBc{& zGipUJDX9yQ2K?U5x^WxQ$o?ci5U7@8$(Si7jS&GAqOQTn#6!nfj^BOf^7A2L*vxGf zcGN>7b=4e15-hj3Jix8pV&JaC?)rUqN2@qhFu%K->+|eM=O@7Ls-tOa99OVsq7DJl z{w#{wq)gg5ZB3_E?~$804i4d?71Q=#7Q>&ZHYG=ZJ}ZRP0(1z3@QGnpb8gQ7tu)!i zr8RPnu_oWi1NO(4T(TU=z#%vQ)aWDitt1W6#}Q&v#i*og^}a$E_JgngsCsWpOe&}Q zRkVmNPVvkSKhk1;vc24uER3;@#771+MkbNwja#?W@Pr60*jeaRw?e+a0Vrps%6BP2 z*CLd$IHo!D;m{qQE@fS)`F63BH_ zNE(&!buq^}3;>vzY|+kLy!5n`$t7yQy`oZund{v;OG+!qMin|9=A~+{WUJRSYSltf zF**?eI<@lKI$jdXh`%?=jrb}9;8b#s+@k3Cp&B_?7uuQs-Y5*M?2Ir0X}aKjJ)oVI<39C2CnYjA{n~rh0^hGq z=V&J#H`3X8S(h0cl-3AG6IQwA# z?XIq7O>n%I0fA_+;-Ucfk5iHx!^+;Nw2Nuy_t48#c4EgF1(pdQ8bPwvXCCb?|Atgr zW39}r@|W-S$Q}AF^rvZ$kPw+QeqZIJ*IxF>z>lHAHPaNQ3AD=(uXWo&0jTg+;=V_t zZzfIJd_v>cS#AC5ATsDT)O}Xs^}1!zr0WB@3Xczy`E?l`i$i=d&xju1jbc`+q4MA` zveTSs9f3nNj`&5wp++8nBd+ZYfUnaDNC{Ler&qwA@EETx>pVBl7+n#*d-8v{MzXv? z*^ed+V_MeYBxrzQv7@HH!vKLL|goM34b{ zgkHBN6n;mC^<2*w^8XN6`->boz!CN1oSzx_>UA2)no^qi)zoD2mM`thNq##F)XFv# zwkk`=JB(IPGw9@e+YZ8(z4=G!d3j~1hD8R9|>>*I6Y*c~Kkpsc_4)3mgw?GD%=#6{b-$lO=F4?eXt_ zA34i)MMFN@8M7!SksLmaUZ@pv~hM3w^-rJc`EtICR{ z>f`CFsDW2b@+w)ZoZEUI(0;Z9xX`A$_m-Y(BPCL@ZrGG}3PaNJ}vXVB!WZUbPx*lOm;sY*P z>u$#;QREOq0rx#2S;E)X0t(SPu6V;bXy101Lnat(V;L8xlvdqRvtUb}73Q3Fui$7h zbq(be!V>|f>|=0HEiKd^whEW20>j{p5LT`R_R9t-6r&rw=jdG2SgeVBtP3YABtU<| zQrb?Q2h$ea6^NBdQ*>JGwGg6h>MbpX0{6TberooFRHC(?iSe>t+$|5yF`ovv(3>UMtX;smd5|E?sd_-M=`&LAm%npZ>aOuO4DfYaFEi11g#y1 zi7lMh5ku>#zw=cZH@n{0CpT8wN*!x|;$yy18^u$~f^+4>%2wa9)Ip&}mfAH*IWVy; zeuM{9AOL_pFVf+f)Zo`jI=%5vuJ=O(LhKHwG{}%uAkIBCXoX*h`z#6qw1ie2b5eoHt;yb0=spd z^aD_$Q>w3UqHNkJVedbamikzc(ofRuv($T5*x1dW4{11M4#36tcz zKpYJC2l_}I00hQClXieOGGy&H1@S9Ov52vSn!kQHfq6uT3qm%dYUgDGWQpTjfKf_J zuu-Rgt6@ZohVvUDi!yf#Y9PDpYL+!Myv_kFF?=9UD5gj$%e8=Rzj<`Xr|@O_ZGbu6 zJ_}!2lhu-;gM_6T7psPIOyo3x-BCfF>Ohsx;2tb=Xf6e z`;V&3j1&-#@rtZpEuVcWoLbOM&CX|-!S=*T*_J-sjTqE3xH#c#cWOSKHq?9VXtpQG zTsacuig8c3pIB-!Ake6l^T!6kn1?E<)qjz-morbqFFsTFYyLD0 z)QYnri!Q;$EPOaUCQE+@vLyN(Q4-H$Pjby6QZKs10CiqIn-7(C2mJMP? z01a}NAx}16 zjq%mHq3#$6ljncy8=oCfZmlVoXp8nIkyGCg0| zXo$+^AL++whl6$x1F4@!vk56ad}-(yX|-e|!mC8oO1QEsv-pU!DGQie35qquF*h`~ zb+Ni^x{~QspQCJky2pWVP_U~jl?bMPh%Gvcj1_9G?}Pj0^?fz@PM=}NgGcoI?e&H( z!l&{E`^>Hom|JZ&g~vHs^iljW6l2nBE-P9*Z8)FbNphzZwy z4%aQ~q;P4-MBaz>wC&I4~y!qJ0X9oW!Gsqmi!V=J4@k-Ii7uH1{)2 zPws~dJdgghCjw0Bg}(VCbZ<0Rk8TyRQseSbylgatXR9ML=m*BpMKIA0KS0X` zX-}0&iIvIKStX#|vzl;`-^hgk{RVac&T;FY?T`t%wfCA>4M^v7fM-K4A4Ev(J*0ir zd$*xXa)dv~uFP?|k=UodUw&Sd9T^z1`CV0Dg*fGUc7=E`jP^Sg6Mfk&qy<=DU9b#+ z^!^yg!u@EaDnLr0gc*OE*Lm?WgDDE%J!DPPMD%1;k)d)L#i&@>D?VhTjWVvL1QK)Z z3`T`m6IuBd7p5*sU$2D-ue?v;j%-r0D z=plK{bslslM6vp=_nnl&O7-&x;^0<0ctqPz#}_7H3{=A?g2hEfpxe-r!R?=V$mR@x z>`bE&dB*uCb@dPRAn_baQWsoUl(D8hjUj8R;SY#j$1S6Sqy)yiKLGP`!ORQ8tz;-A zE`ZdI=N~m$Q;ypgv;p`1u&mgN`Boi;D=5!7gyfvr*ZWCxPzXGI{x!pK`QSn|)hnG! zEH4|3l-Y;A=!X8AM5`Mh#w0%GOmf4iAdi0J&b$*oXmuEb4=*hR^T*A+(w(bEyckg{ zp1Ox!9)K3XMr*;M2??4nGqB0ytygbF?UR%APDF-<`0vqWz8`=rw`wZ#VoW}9^N%xNBg`7d z_=dlB+&65YvhIexpYHWccBFaLM5N1xr11C<*>f#=lL=@!;SpDPSMB zBb_L%_GZF~v2k%PDTy^Rn!Mj3j7Kfp;piv+vAf;69xl3y_&5&R(hS&l=YwyNVX93b zJ%r>j*ib-G@e0^y;03}5K}<*H$eiUp53=93ja3EGG^;eS@Z#_TIm>04U~l--NuP>? z`54Ez;=!9@M*sD*nD0>Ge_j(20j${+e&x|w6jRY+y)Q#c(+LkJOwta~RLD60%6WRe zDJ-EICA|qSN)9$Cv#K)vk!U@uYE*4H%_z=6&BGcxI5aJ%u|~4Mrg-de4!gx8l2_mG z6dU;nbkw7|cW`L=nt`xdH%{3l6 z;;UCdpPS_`52@DoFt+_Fda*?U+q*ww^8z@E)T-b`DtNJRyl71f`Nl$nBF7&#rHS;a zb-NK$N6JQ+vJQZ9z8h5pXL5!0ag|Ttc_p5*&+$xz$@WQ`N+7STHO&V~-2d*dG@zF4 znzJ(o(G~SJ?G&Je75bC~IA9;nirtV~SsEPGC61U{-N- z(2Z+5VpQCm0Gbr}83%D>!pwDxX-8)mS1PE=yc9=*2@ZwmA0Mla-a5lk5XJ*OBx2$8 z@7#2ZA={QN%USEz#pWji0}8Fg(PKZm<$zYjltyP5?{8z4`SHlKM%rnRI8qj0hk(#= z19!3UuS(;ogiyoukB?*I99i6sdVE>uKj$WlTk+yWTxtE-xb8MQJRD58ZATrqu5U{? zo%JKPd*vATR`+pPuvCB5>f!>#t$FHoU@Bw)Acb_+<$82|D44gf!B$XUi0mubi(9MxjHD%fPv^NRi@J%Su>)htVoj;0kMsVhsRon&CR@ zl3usgrn~CR_+QFSd!5$g%1!~VSZh7*id?b@{sK6iCJyE_Fm5tFGY75@8JA4`9oaw4 zLm3>jM`@E3ONeGS0kKMju7N?CVxRO(zgEZFi=Jrb^p~^D6gy9w>KLFbf$OFw21)$E zv`^UQP$Wx+l0;(jq_tF~=3lW~GyTj;NCM#-`@V4Y3!RQl91+n4l~x2It`GbEzifU9 zEj8v^bQ4Oeh5bU)bC`^VUzFoP{lI4m32fd<)f`h`z^Ff;8s|hb*XNDa&JTymI>d8MXqW2)`~Gn^vQ`8~VNSv#0vCrXD|C)jpmLqHGC8 zIBxalndYlfK9Wc3V89p-imWk5cU2A=qt5XYg+Z&_NP4~kp&3|MaZ`;B1_jV7%I`TLrxiT$5_JajDKQ8 z!DTYEuf`W{zK{A__%lxk+%T=g-WaiRg)k_0n6)DW>{+}md0@uXYkPgKH=KLqeiEcf zREi-^)TpI;5i=7gA?CK-<0sVq88@;si6HvZcK^5$f73NtPtS1E91Bv=IQ>Z>DHoHY z^gxf})_XW^)tbs^W8W|R)teMLCqfGo^L?UNn^V_MtD7yqvXVEP|TR~gk-({+PWO7Rwl0!52UaZ(^a z@uJ1GxVsZ5#jUi(t+*F2?(XjH?ixapFVA|{_b-3$tjRrdXU^Gs&)G|CQIw=PSu$0q zb%ZWZg$I>V)`lph7N3tC!o2;~291SR)x#R~_5bwO7SMhF%M;!O9v21T002gTkUjj4 zo6L*+WaB_cPqHCd$1&{78_#5*CBkKa4Gu4i>PB!?dLcUfw%R)$4~czp&p+lixonAZ za|7O@oA(MagETWiJY`yk2XAC$lq(!CiL7Fj?Czx0ol6ZP6kH8Xi@wI@_YZ`j#9|qS z=v^MXCk3Ca0Wa5&EFRrmT>_5%{a5-O6X?~^P3|wvO$YSmDnVb!! zydO%P!VxL4yb`LW}sd-yhqX|--qY+IuI?qlh&t0Uf5$u?AZX#Td zZ&TMst~PkRro_R4-oG}h$RhjXr#{jC@NKe4)lyOzuP3S#VCO1`pH&upnjpr=6=*L| zDUEP@3wk3r6UKHhgw00NF2H5t3^;<5dqU;k8b>nOP)e*EEQ$bn!KQa>qlfJ^AZ%va7hOWd~@_w<|K zPvTof{X2^++s{$N2e`;`U06B~osHEbpyLNkfMSX$;%J2Nk*a>Oq>=L1~&CGT`V41v4JYZ~5x0shWH9@ImrqlAZGgp>7SO zT)zqlY=0s`E@*s5+_G8g912olB6+)a>91=>Z6zbsxT7^0#>t)MJ=^O@zSieEmR4s| zZaM@J%7QLXWm$!Ys@v8gp}0iP*~ozCt_^_K8W2Gz$}~l>rYP@sLaWYw-^4Vvbp}o`k+R=YIChK~;AEPVYs?Nf#XnD(u zImA}diDJy&Q6;y#aL&(1T%9il{CjbW^L(;YJI)qK*<)rZHD-b0g17XYE?b6kk0Ly-t;nF3QNaiS8Q=%} zR?_xT?A@|GXgfvX1+wFV!_~uGg)t<#qXild-YSCU%xxR%jzIz3ai7{;j&#lm4L{ma zEvpnV^30EVXp~cMosN3A>j|eMy&}%g$Vx3n@5xk?m)W!HS`y-^i6k6Azb#A7_J3G7 zancLiuRizy*R`DEf(AuPOn>!g85F|0OFP-0`^Dv`5wrL;a+#G>LuKg5Fcgf+7Sg@A|||LC4Fj)CtDD`7JWG{&uuv#%c;sPw&$v*aca=6QRS ztIl7YVatvJ9BdQ9=B>8hfX%D1={@SNwIZar*N5u(6%4ikUFDQcbwAcLiHW}7W%9;F z^}iBn&N#6?%y0Htpp5hX%@YV8UI1@TZeFRbg733wQzj(151E!~4<2OmK21@U0aJnw*gg6U-~62=~VeOm4iyJX5|G$n^!|s3LkEQU7VI5rK2-_CwayP8XwLD zX&|4tRE^q+5Y1?9awwY(`+h^=^xa)ADSzdt<$@i}aTh9YO{%j8k=Vxb{LahE?PC^O z){oZxL}hPze$H_c5PaUD*JY68ew$@$YtRcfP`?u`bd@O26ykpzoHl@OCq9NJi^h|2 zAe5Q4XpK&bLTbzMtn10j9Z4rg>PCq<5=ls^V_)(&YX#2pb+mvKxfMQAGQVuB)}PLI zKlBIndkY*cuNf5@w+9wH5Sl%+J%>a?dLq>joT{_Ik^}B#OwND>KD}?wMo6e2K^LP( zUOAG`L4xfd*=#1Fc&v*gLyVqLeX8yn$r$$4yeQCiwX%>1IB!l|r*#{jFpBKp%?4V> z{`4t*gYria-QS?maR+t$L48fO>52v2Tu+vUo`@+*&xu#^s2r*^`Ev{f5R76U%T{by zZcEzW`aWCC_YahCyie;us^%M5bHPj-Za$je=t_42}wLN4j*mjjMsvrz1v=g{|8q|l`hJ)8g& z35XL-z+Z!m6P6Ddv%eWds`Wl$f?l?Lw?uhh=Q*?FGqd~2A&kYSzacS>q*i3;bNgkA z4R3dN?L#BtsdR@C=s|{|9g~W*vwA6sklUi{7H-!zO`43PECSZp2qdoT*R&ricP^bz zwfS@DqWvutxc^c@iKF+=i}P#Q!(PWA!CYoGx9CpkTy ze(L7S_JbSrBlDDJwG-IhuTnN|g`XZYh)FGd7D(B+nWkQ5^4IQR2dVfWnesG2(R(J~ z`9OzxKv++3NGO}vEuNxxr$*n1(~+Kv1#OalqP|(bnoXGd7ONb2D(iTbjfM;WZ2f^W0-VR`A#ujs6hlP`R{Qx=w_4<;rl3ER zn=^yqTPHc~Ma)`=)MY&Rcvc&gaXW-l;Q|tim5gaq!&6SzKbW}dukJfYoJz(auh?}U z`hu=r&4Gs~y{WWr&1p&xHmKdE3P94!ImNBfpNu|9tdX~bM_k3T4rTczBvdQykGs;iGt;89 z)oSWWp3LVtpH6qa)mi}`^*a;+fMk&%=!srtr};o!fHeYfAKm!BU&6^iCq#8J5aATv z(GeJcOiu>)i{LwQS&FgG_p=J3oYKMQ-54a1``inPJ@ZDPJOnp{AzJh}UEP1ok(iyC zt%rL;1`$=_<{_H)x7q}OZq^~$88-MZ7kp+T@UhI)DOLYDXJy^vo<(e+bh)j4qyA~z zlP6Q#$Qh8xjA@mnxhSuR{QN;?c{b7^aeYRX+&n}TKUoU?$R9n|UCYGOCF>mJZ?14o zhX&AMS;ZDGm^4<5K(ls>?BUXrN;BKZMxTXyuV(8BM(mW`dhy#=JCY^wjOwq;$^EMu^8+Qnyl(%zplw zOUS_ora(K*H|kZ@CYs>{6B7^9;JYlZ)#st7qz=E=a7W*=3#BX}8FO?{vIMxY7A2ik$<#}JaNw0h$;_1H@ zJg(@}wAU%O{_uCf|7r07f&XPI8MYAK_f(?AfswgE#oV$ZJL(ZbPKxLMk*GCx_;qgE zpkh}EALWe)5wh@~WFZXQGJ_W&+ zp)M{CIAU<%z(1{ZYVp`J|KEVH_<&6||BlOk=gt5hWoOw5W3rMU6W;e)bLf{SJ|DN$ zozpz>KjEM#xJ;Jbp(g$$KA;i~VL^}QU%}PloUiX0Q_0P4g(VflcU%|>2JAZ^`bw@9 z{0)%hg{x`>Pygl8OX(M#H0PMNo$tI;Nz04uxp0y3OC*Ig%J`dKh!y8qNpc{KtDtc8xAEy z%_X6qrSX!=mvd}#yu5m7g@yUGUs%D9v>uNySGo-#z0Gc9Nc!Vto{w$)XA5dF*`Lr= z>AZJ}G4IOWvCwhX|K!bM<++}IsP?3bDH>1oz|OeYL_6cBp>5y#e6a)czJ3%3x-V23 zhdRZr6Jqx5P-+oxN84#+=_S|>X)S?NKR@BHB=&?Ob#AoK^_BRwoAw7pblK%Eb7pC$>&O1O>#bGGF1Po*oQ>saZvh{< z`}KawcBMK9u6#}W15&K1P5+6iUnvtMa|WxsjSHe8I!*NO|7szDc=T$$8Wab@qY>9c za4n3tonN?6A1+o9K8TGGTDQ~1YJ6%@&r|6QrKthL#{5dhL)(D_G!ob}fz@2%I+#;0 zPe=L*2hYrcE`FyQa-!W_ZZ9U^wRm6rLUe~IPB9)7L^#w$Fc8xvRNc)eE1@xal?*;w z03X0R@DO8eWfQ>1y?W?~2$h#aX${_7vGZ)&Qgo6=$e?WKOT8iI?M)=n^%)!QMtnpH z#BR4iWpw;Okm^|GoxPEpJNy|5pX>u4|27yP21vExH+B>P!_o~sl)j|d&|a7o(0F#M zd9DIgD!)Ix7?Zjzg6vJbxn6yiad?tzQc)TKD;sN-Cl7tFYRs*A6|bs?$F@m)8@zC@ zUU04Ex}{C!I{ZriFK6I=ve4rjU&Djv+HC*L0<3`opcp50rNONmwYg}j<$)km9p7J< z>TD@N!Ch3@GA;X=5f&8%+7I``mQL!gLHxq4izTX5$F*oTkP+s%QJ9l#8F1I>v9hxH z@vQRsN%V03cF#%zcG)z*RA9_{+?f&Y?p>WH7>40+ruBm{&A;;yjou0{Gdxpl?QE{o zAG^kj+`69kjdY2o>V6$}vrSoZWEp3TAYy-S2>JO=c7PoNJHctt-K?`sZs=T&gFOOaE0k|-{hCwc)6W_ z+a~{dQ5`rnE=QG&M@joYO`CE zxA}hKJtJ@#_AeWe_BgN!Ik-Sf_qpv%TXFtLIng^3o6dJ7Lsfe}X-n-V{qB;GhyHU6 zs6M)iuhd0T2sh!l=`Tk-^9iHH_PBT_3--Ufe^9Lqtwd_isQRtO1Cfg4=)7sl zcj{}JFYV=FQxNT|V+J03V*Stm%%%boSv8gaOx1M__x0QAmXBKPAhX;OB=2zHp>bpN z^5O~lt1`4>J6i(UsZn;a!^?vCN5tl2-(U{Kj?`yoJFuMeMb}P@7b!U!Zo;5kehr?^ zhc3ddy7Z&9p6DfFxnxl=_kuEfC-~yI&u;sK!RaP?PJ>Gv`I*GZzYZn%gVm%)_x6oP zXXy(ulk^16f{$~0r++r7Fsu@I!V-#MH2hO7LBwTy`&$LiS3B?5fCgD3@R_X(NWs-Y zH!X>3>+|KziM|YV>d#SJ5m^C={u;d5$3b#)0~{5O57Oi0y!}6TKAd>}i{zB}e4D@& zb90C0c9bVba}K-ODi~*u3*0~mHNR;W_6@&?p#eVhSqc7&#_VEo^lh4|kFIt^jdp-Z zN;!XZ_&_05mK*ztfI%G>8300}??Io@^Xr@b20Rw_v;l=Z|3H%mz?aFDkxudJTW9B_ zTw?dD`zlLs3uIGNO0|y6+$C^8+x|(D-DJof2Lvw|%-m7T&&*itXbmX8QZqXc54k7UD4kGXhsARP41O&{&_Mz}JB z7GaBaad;AUPqc{3_eQ`L=y^-!-GjgKMSEo-1>83a(Qsl{iNES`Ko5B42ee`!ye0Xj%Ww{*ORBzhFl28l@ZZ(A`X!+qBE`K2$iuqgn=mWzx4T=Ed;#&g=<2BaXn z(fn5PAz*>M{jUMy5(e}b#Pa6?tl|OQ!whJJ0;?7nP_Ldt>AX-1tQ~|tIm=p{i4zKq z>*gg|=Wlw%G@eMc9_%(yiQVvB_|1&Zz-ZenuiW-T?rwlSLT_Pj0j-HBRKkH(e#O6z zb_?bbE(u?mXN<9PV6PbYbL+{Lg(jyrRT^_~JQG&tjV#x)@dfK$(fUSm}BTz!=w=RPdH6Mcs~5+n#Z1 zIh&*ncsLs{4s^L1FcyG^2cC~Je7ZCQT>fi{YqFV~LfUOl_nQ;ZyLOSQ#_TRKEf5gN z^y|$2#Inn8(DNNy`Zsm0;ne5@$zygBeSU@{cDRjg9}M4hwVaD704~e`UhJ<<$MmiO zu@^ax|NMwh952|6K_j>cW+9Rpf2+qKB{)Zc1?+5BwB z_@TK3a%vaP^$clPuX-*xI{{y7Z6TJyUd(QUae&U1L=)zNmi>M)EyZ8cMfER#{@_1Q zl3F1*DHlLx8q%FrKrj3L<>!LJ^_|#UcFW#kH*@>ml)jc3~)YJF63iP7vKQWqf()uq}S_8 z-HT!ECnL?M&ujd*@+NVYZfe>hlI;fcSDyn2_Aa@JBo05I*>`$g`Vxvj25OhT=b~Uc zPC9z2!XxBm%P$d>KOpBM=kYy@B>y0XYrowXth^@081`#Wg{L|!6bVXoG{Q{~rf$%Q z0P#mTvQGU2k>lN*(9?Oft$jI}U#|VG$wJnd_ zp@qK@&2Byac#-qG3pIWXAEh|OwsMB58-rJ_-v*rB7iV!%ZfwO^Wdv_!)aOs?KAi{l zQqg0We5Pb%UQ;s6I9U$I=W>_u@os`nZc;C-`}+&{cWvHFzr6q2VeYs@r5!zPp3Ilz zf)~cqPY$pf^9qW1K&M7kzuQ~SjwaB@d%t4+I zWtSb6D2*NMSyUT{hSUyli&4{m%2Z~+CKk%(2Y^m>8rMB75%pf3EP%U3sq7w;17Vzi@c+~FSoQw_k#S#p&&=o+*H!1v8eE$6QSC0#y z?h31C4vf+hWs?x__!8h9Xz6hsYr+R;L;C&KmuHdU|zIvUuXI>Eg?w zV--RJJKRwWE2S54QqB`Wg%Z=HFR!WzjwDzYi90S;1EE@m-hV^6gj)A5rJf2;@I6&$ zIXNBi>}mx{=?PtiQa}IXV->>b7ei5^pSA`0(}SA7$ip8EJMJ(3F5NxZUA_WPefib~ z36stgq%jzDL=rk%+uC%@iRKx>(?6qiE#LD3B)Q>V3=-`jbv77Ki@o@e+UeM z>vh^~>W^)>pLoCoUy0oJJ~;|ENU(eC4b$#o^v6qfc2(e6vBNfI_~oI}ML0~`6{H9ShaN>ki( zpxN+aBQ=<>rhiGovZ#u%r5>0gzvc_c8F|@A)4p z!8dI$&BJ5i=9Q^H>1P{2I>$_8hx2*lz;_mJcf_#C&U3GtD873*{^^m27xgJH$VD;T z32+GK?!J+KT!~u~^0=nHi%MMZ| zlQV7TxUN%{qwcWSx9%a44b7(33iL!wTVEDbUTmyT&f^2T$vRa4(PiT2Sv(RbD_kPb z$1^@+h$XVuw^ll4sMC6fpT*ui7T(#7WDSqL@BeE7Xi+Y)gXB=y#SFKg=>C}8sXFU$ z#e+jKr%tFQST-Si#|A8oE<#fKmTLU;Rbfv$;9U{L2R=;zQrKC1BjPLt(AIf28W=> ztV3|Gke|$L`ovoG62-c=wU76%v|r1~h4*EZXSfH6q|Enr)Nrl4tLH5X#06i^hR{Na z&rX@j>bqRZ2dZO-cBh5w(|~wRb4^T)&xED`6G<(vXfx&@G;~}pSSS7jqQ|(2+o$Wr z%}k|`$IX5Xj+}(=pO(8gEPO9dYO0jsmnolt{iJ=4S^*@TflRpT@FJiXBGajj+h?fu zgHp%ilANOv`ENOin#z_ly9Zi(Dm_-i7=_VGC4ThVDwg~5IB4i9^ z{6#D7u`_DJT)yIO?NfI}*^=~c^=fm=-{LcK>05J_OQFl^Kb=`D&BUGUqb>+R_~S(f zGlKO+=UjTH7>fSKMRb!2MkPVl1sg$wtfH_Yy&)51kc`uhcfAlR$u#Tr(8 z51TPTJ_P>=`u&-d_DUQYDE>};dZo&5SnbfW>u@tuAqsp*l=D0j;}&|x0^g5bA})Wv z8#P=XjXB~ssP{2E7-u*TZCHcHO2-G@wfBT?z>8=DWFM2o zvsBF`f`(>Y%Mw~z6DVeE8hv;Cq30YY%#Lj*TYZ^=8-C7P59^32t6hNa0VCmOi%jEvB%rrg_*(d`dF}Za5<9)PB&pwE;Jtz(v$3a@rrJ1mFgl zXXbeL*cNIf2&kW=HNCbg&ay7Rr>b>%dKrJJ--P(*M755Hxem_zD3lOH9a-=y6M6Ef z&4|?(CazF?Oe{F>+WDZmaeD|~U-Odi_MYJD>p<>8=>R=I99osfz`vzeR_8k4uDb@Y zr@N&Re@e|#etE|mN#=_H_oK~j1s4b{3)P9*Vrgx_5yqvF7chVb$@M@c8(ZIDwm#esFidi zL{Cq67yd=IM~(bA)acGsYjmF#cvvp{HD#?2+4y@Vs$JsV;C?>3F_j|2_nCt2gj+*% zYq0m4b^MYX2Rpc`ikG4s_t@8Fvjb-?%gx^|D%v&O8_jYIBfFOrp zk7dMN$_!$GLr<7^{)auxV(?A#oU(+i@oVEl{?kF-ETXwY#dVmV>U-4oVP?Ql*pb+` zx;dL>hU;D$hgX@VuO_099(>q}ZLW=C#TPHsXi8Ae2Z{csl@Ma=9$jzT*^#=Cr1VaI zwhG|b9 zepm_qv(XJ*zjyo1XrJ~X6ZG*{>W5OZk01;}S0;PS&lROYRq7iWSRAQUp3ty+Rt*k8 zu!+rWXK=ywFbkQ0Tg$cG1$2e>Q0krxXew?_b=IS1!7=pgKI5>$?bEwJEAm_QUo9xd z-MXpOP%^MuznQ}>J$+uua!F$gtcvou1^ zY!uv_*}^TFfS1;^;$hwNxV+wXJwkVk2EIK&T-M=zk8g!;52=x>@P?^ab-U0vb4GZA z_`mcuj#QL>FP6Y5m9>POfE6y-n)|guRx^rd^(bEF9 zX%@XMD%RFXmh-%C818Dh3aD^JS#aYR^Q{7{z~@V*6M@Ihp4Ei}WHb!qlX#NXyNJjlY2*$yjI zlRGGUMDRPO$fDs6fV!DaabicsOa4t?7RAG#w2~+q9GittNlhD1Ou$|d&45j#7{B#3 zxDrU}qVYM?;TxXb*zO$`X*8c)B5+NY=3Xw)=3+~-*~_#M=&?^@x0o5&-K^@AVi&M8 zg|;@-#ZsODeUEsUd1IRW2o9{^A)6ahBcEQ1tfTuzYFXkV?WE(7VO`Lm`r(%V{>6zS zGJ#v|2l04V5`gfP|4sYFt?+v|>=iUDzTbP*ac2dr!uDB7H&O(Qg7{J~KPrjvu=kXG zs61<(3~zk(IW==IDi^2urqiULd`Hp>qGlPT_I737>#v>Vd2lWcESeLRUL=6k@ibFO zZ)feG8(NyMwDX>}p>RB7#`fLJFXd!C>0*EG@Grw5Ym$rEjIG(^VG-wcfh5GF%smw{ zwz|$YH%wD5b=&cr6)#qBRf&Vwe2PY!pmoKEzv&ZKogp-SV0CR(vN>Bn6B`)wQ`qiV zz48!O5vT=u9NhW~4tjCtF4|=D+JSJ$ikVWdZL0xzi6$rg1vo+#q`|8QB^t2)djHO{ z)y$LLs^@oaajdLmGBUN82ru5taSUJxQWF(~R^)`SP1@vVHy=`iuYUIqSU9ysa6&uf z-0u+RAMs4yqt(X#_NxdJUl(>$Hye9W>A_&)g{iH%CiQd`OjQ~8`UTAHjZTH=niT?0 zZ3KT-@^*Dxoq-`}6~S78->&-n=6PkuC%@OWvdTa1vh(l}$L6~y*=S;}(9UVjn;Lt) zd!Xq5YiUc**EgDqP$AZ6|L@`7_c~8)xKFJ;N%k3b~gQK8&h-6;1NB0O#ljw14SEWLYmxRkmL^WnT;XL!cW9_3=It zyyV}MD4AZ-(GW9yC+k*filUJR;pQTjF4A_+w)$5^KF^v;+SsVdxror?;+A88D%HXO zJ{PPO85rTlXP8q#E>32Fk%xiSK*d`f>AEpF2luqd^z>0m59*>XVT@>BnbYNQbNhk| z)CP$Ze<>H8g(<$#9>(XqJ#NX4L3~HO47qspsWnyh3op(RWbdwR>G5??gG92V5wlo? znKJb+{`_%>gcR%X)WRe8%xW^-r6;lOxe^h&aSS#4MMpT6V;j}UL4c{0w zo3Bd8<;2me6Au|`W>B5v_wSLov1Qx?uZ!Oj@RxSWP34$UsQmjy^Siwo-1J;olf?CW z8c$vOQ0%r2|NRJthIg1)7Ey?TZs%YLU{5cd%F1J*l2TzpMiBRCS=&J*jaw)oMr%Y| z%4D`Rv!V3!X7Jv1M_8i&6|-^RY}U?1$1Up>;=D#M{V393F6O#)eGu3JygqqP%dAx| z4~l!yDsqAQv`-Sj*2;o|`IMQYuTt)Fx#@Zr8c5#pxJ>G>=5~#dEY1ku=(rj4%+1Us z$<1gR-uN6Y^g<>CAXg?{LL*%nh=!xi_3axrOoc&LfjIE+QUMlfMA+dy{_?|_@LtjS z-EWA^u?nTu)i<@*Dx9T_OduP{1k+RTiP+K4+w8Ai;?sAM&vT!PYoU63a8B~v6 z#$qkiK`T}tKsy-iG9~QL!GH|78CM+z7Y!q(fpAH?k}sLHv+qBMH#Yd;@)f37b1K@K zfA&WEQ}5F*kYJ(mKyw_8^m(6g_aNw)evcJ0O&j$M1`s23grw4n!k=!8+>vN;l%EI? zj`ku!k*mp>FX)S7iXHUl=~_Q+sHf1(ozGmP~FB|wdS@yjkp`6rP$}Df|#cJjFv7X z^RKV=*{f|L%mOCS_=t~k#9TV`XKBK}CM@}M$O7WEPPXu}*(<@CUaGN}9DF_EDnqS<@|;65PlWOonvY{az zPk-TMs-0E<%ft-;w;lEY-!BU(!D@Hh2&T*e-I1@_eCA4T=>Rz5LS&(dEPBjw_@Z`> znYKlOxbKZYQ;7|&H_{t?@9)Sqc=sgvd1CI+Gt5#|EOHHk8Ley>_{O4-znLoO^vK&T zMcNYOCb2DF#CA(CrSS83d87@^N%V)Z9Kx|B%ORCn|Gmd6`6P4tl*IBJ^vz8( zO2aCAIem_)ET7#e;_^P}%_W3s8N5(?Ly`Jwd~#b&PU#iR@&aP=S#!Q^(*b<%uz~QZ z5BAwT_G$<@Y7QaM#N1(7t=B z^~*-^uGln>N%WVP5}qzU{q5UN;%jF{tb^Oi&+^)RtG^gIn=}d43*PF>Sj71l+@=Y6 z%6B_@(AXa@^1E7T*p=6xrm$d5vXxDiej9bC@N^@|q##)zP4?obZ^(p*L%hJ(_$wa2 zzi`|RFVGrrs#3;0ztPGR06}c0+FV9uds=QMNE8<`psET8a_hT#7iPxJg)g5E@#HQ2wy`e#Rjeo0GWj!(jRKjn%ev>uwTiIo#XG(+2Ego> zfa`2hBj0<7Y6;Wzv?6B))}NJ*G)b@sffa#p1L+Q zzBUv)oAE;@P%Uej-6aD{jX1YZO?v~)lpn>OBv`e4D5gu=$9AE3ySUG&?c}M9tLRIH zSJy*k2)O0he1LB&w13mx&RTkZwBK_kGgYK^h+HHs=oeAX*gKwAsP<}dW`(`n2WlSk zSUdoAg6C1t{im4b9p{E+SgI=Q7v%XhEqWaDg05i8~8`}q6>6KJ#dJiUY<0w{)u7b$S7n013wm4EEO9~yhldD^f_1|^FsT?T0x02DK-Vd(ND1m3pB$l!<&RFSHrnql4erEK^m(Z~c(47p`_t&)BUcg{yg>|a6uWTvpyYFU=ifADGi zlEhY9xNelZGX!Z4L>$j1XWocUAVQ&zu9;zquWHLqtdsoi=4FT)U@4ySWdGN3xgI8d4@`G*;C1yvj^sx&Yr> z8ATHWj}xk`Q)(|&T`v8(WJYP8mlN-k3-}Ne3y6C?R{@A4?qdpNk~jpBWPS;?dzT?I zmzoZHFPd5Da>r6@nZsE0wV(R#k34<9 z3;1i6ZT+iAbsXI*G1Q+oo!864;x>d@=US^MWwO{Z>Dx%K1+?I)qkYwKUr}PN4^NV7 z>3F`#{!24~_=mkYu>LTj%jb1)VN8`dN3A(PQRvh2o1967YGqc}oFm;ycHR9>=G2Ai zlg%j>rL^XqjlA7mqHF9Out`Svqlig~qBY#G+%ZacA=2HPUL{F_k(3_ zDyDOoJ!#c1gG+672R_e9O3zZ1zSlLwyNmW7Nw_&nk29EQg~tfOrrt2j!210(%*O9c^3j-`x^% zA@-dL%6&aSYMzBwc&O7;w(1}v{J|hYu8Xpz=V^6$zyXxvJTIiB^ARcTRAO*rr`Md7 z)JiNTUy-c%D>$bWf38OOE&`nimsxLUxC;AWLS-M(?Bf6(X5K--S^`<|36o<=FZF1* z2}`XlOX}%urAQnFh#W2Aa#>zQ>E*FlL>ku1meJ9R+!wwhCkb55o^%#ola~wW28yf= z!A(b+@0qh=@Bt0}+cmUDc*7e$U%_65c-1zkH)3v(nhvf`tEGyIgW0j3GIz#b5PcAe*14_NjY7&-{?u z$83R?XF+V4+e`ZiBg}&POxEnG;-2_jDTxe0ZZW9utLVNV9&>zJJ>pouX=QGB6?|bx6?j;20ZC_8Mr%7$t`sOK0BNe$hfUb#d-|oN zyy5!*dCP%XZt5AycN%aj`R+z7^aVxU54JhfSfW0?kvxLxmKk?w#vVqGKeXyHTWGZc z6a4Iz?cWUnk6=`Owc9N3dVwy&tb96EvZHHhi>C7h%Oz<^SZ*F_J&+D~L1+`9mg`?e zEsL#AJcB~mhO||DpPt%c)np927=b?xGdp12tpE`sdVHz%#{{Z>j~~UXAeueDb$jIE zs5z=+K@~h-X;$uHkq(RmYD}GSb7Twzx!+l)Rm+=rlt<07n&rY}U_;Ax7t~;QBr_G_ zKLCPA(anu`Y2<*Zmh@s3=#2;9#Vq}ZH91P5!uZz{6-!4e)2$!vquCN@N<{XBd8Ll- zn?AZ8cm3_r4rym`0IXyECWm=%!sF-8&8)ru>Ln7wsqFxX}Q?F8cQ%^n}8396&E3|S0;v>4`Zgmi;D-B}ixGT#G zAVHI%48qt5!MLtqA@rA28XyWwqI$5SBzd=(2k z6U7!?9Biu&Y5XTztXdo}ifJLF0gA_XtCYf+`$jVr+tLGu5`?N*p%5$)fkXIt`>?a> zx9H9655Cq(N(d#<2(-MQOMe6EHAj4vYVF!&+}2v&eWaF<=&|Vds?u%`Pm4M&_ftzq zRG}z&D2tdU_RF`0CaHs1CAe;e;h#XW4uUglvAwogX(32FT4Fp#6c-$g7{lH?0N#pv zYKA2vSsrgKU5FK9(gKCFyjiT>{)aI>yI9lr^ai1yw5WYF{n*MrN`P?GQX>W_X#5H( z!c0AL(@NZGlLcp9qKW#}cll}%QvVOmOl z>JqzZ1taQ$L|SPaGPR5^?X;k7x=t`7!R%KqA+qzX7i}hd`+BOEBFo@VYfR-lzuI-> z@BKfg1LKDxH?2e3Z@6jYxYJR+QwcH9uU=pVaZM%x(5%M=W?Q8`exs0%!Ci4Xb=Jbs!?` zhOSb+S3aY3BfI~TEYzPsBYaTpw_HIH%W&C^YFRY4u33yJlVw$@rG!G7UY6eR7axXt zI{jvgiQRkBfECH-$_s?n3Rkz{Jx81o#vyBx%^Of;{cl0_^bdR|*R#6xF@7DfV=o%- z6W-I3;n;qSlqXhHGOj>*IH&^T{Opxn&5|wT9KD zZOkTZ3UOINi+9rH@xL&>djN+{zcc9{F#KYsCo(L`y$B*z1`{nO`H#I;Ejt zoGOvgzG!7h7qlq#XO)|g-d1zVmNo+)+0JWDqK2(pKq>bRKTqB9RtCY3Wfx?-n4~Uh z15U0EWbJX-Z&&HeB@TVQP#9Q$zWA~zFmvR?mwCF!CgSjl)->fG`jkpq$~$!B7`lTH zZoZ}(Jf>c2fHR53M_rV$exufLiZrI&B?1rgm^AkL;|bVA2kh(BKf$&Skm|7LcCY`} z0xUfDddbjt_^$zr()aa&yi3D@yddG!hAWxx6iW$M$G{ed&N(wa0=dz+jPVdq%E| zqpy|mxdUN;(kJcg1(3GSr^+9 zmpTv%@F*~qMoJN5C}ErRE4wn*&jWC@J9*s{Ul$1Q4=8cbZRUYGI}9PLzC*f|kbl*P zp$i24m};RMKNUjr__6MM5DAbrTGnqEpdOM){vQC~Kp($n2uO+0mhq)05m5(d3WbTH znW!Yj7#K75N*BP0V%9Lv66h`fE2qBvobUSGedwLPOzo8Ct)cTlbaLgTS$f|QMMD)G z5IQ2-Wg1rQle(u8xw2laO-EzYR1m(wGK+Zt*FAWM3`66H$>4h4C4eM zOf#WD&{R~i7}Z5lM^GCTR#j6PYXAdKlZb2(MOnv?SSD537)9qm7~OKyHQndE^c?x@ z2Y)kYEGj;~)E{k^C8 zo#i=zTqCtvp4fy986U)q%E0}iHp9|We^m3Z^iX;H3xWD(`=u;QW)G$?9XwMpVp703snC_;_Q z8D;{Hy{QsWb*gCgM?PV~!fiKQz4!PRJf8oF;|E1}Z8PN;0GLuBO%rak^CW3x&NcJQ zR6cNjRC7@U>KC4u`URDBAR?wHO2f)yFsfj9Y!BcpGZT?05)p9(ZS+SzF^t9gzxr{;)S9&qVP+pW_T2=OZ<13%t{doSreEbtH}__R`+Gb|Mpzr1IV#UM@65MI(2JqHLH@ z)lsV;m}n*@L^Xz4n2EQppWyDWMq-WW4!v3K72(kG&~^va)UE$<&FG{v&iXD9c=@0F z#{9Mo?H^Z_Q=PF}6K5ugsgXF7MA0NqOd_II1g7%Q#3;r`<*E*5R7Pfk5d~E~qM11~ zGiy_4nxiVjG%*_+scZB{{=plsy`uk}so48({yd#>%$l`%=APBe-0X6{-da{+CUM*( zs3W3eP}J53q5i1mIQGKi5TdDkFd>R9>R_6=0|1Uu)fjRiXu^z{%FBamCiB;?4C^ZZ zxbI9yf9!o1(~fP^Q!034?PYdYhSL<<6h%`6ETUOi2O}cf%pG?J6-QC7>OdjL`16ck z$|7S}oiR{VCK`83uDu*EhUPwZosSnYHs4ODmy(mNqL8z)DD?lnBm9b0N zs#}K>)iib70%*GQQvc^?KG}<+15wmJdfvBE!S~(#d1_|nL{)iFjGA|ce$E&QhLJN- z5~DOhnuw^af;d%>h+0r6A%|)dCbmv>^)1Of`WXE~@xw9o5|QnJe`% z5%MqZ{|##A4l&9Js`!y8qNNX=5Oq#eX8@gHqLz>1LXR@ob?(7fKUDDZ%~%7 z0L>FH%}nz#Y8F*RNuBnKl}x4nSE5;$jrzgP0JNML|K-_@FE*SZzx0;`pp{hRLX^7lE^uTw-}!QAwRS z-Up(U=e_it^4>3hHmU0v8mVnmLE3u`4L6U<_)1mG8NwQ7%rjvc&YY z=9NKZdSlVSMIEWAJ(oU?jfq82)`99ED5^kp5OU09Et6#i5pfhX#*picg3A)7LE*pt zoEM){0^=Tc3cPNjVP0+xt&0MiB__{O>xf{=I+&GVWqPBUM^&Jr4qW=cWgV&X5kZtf z91EYK3RLM)0k55GnpZGkKB^|EGmU2M z9290)dhQJ?8dZU#fCS*$M;??Oqbks-@*G4#MC3!H{;J>Hhh83JO zWSD7G1qxBn%2Q?rIcsQqQ-U2;F)<9SLcHhXZ}F#?@!F}T`4Lf_8{ZI$jx+NSvW43TF)w15sd!;L2JOfTXDW zeJ8)@oY5+OmI!ao9GwxOOcIl0M(V6_sWZ&XG%P)hs=$xgF{y$^m8VhVsXwZzJ1i-6 zmW(kpC_Ic|s(eHvvt$g@YAVIlL9$U5vk>Cf9>-q;;MWb~6d$Bz4LgkA@-}H=IZrLh zI#N+Zls=Lwn24wfLbZ=HEIqn|imWvRA}Xr@BG9M|Xg3@=YfyVJ1Z5vJUm4aDBJ!oj z_yBO@wO9P{Vy~QtqU)?R&BU4Z5otOdS3}Fm->-s5kXn823Dumig+;P;J4G-;Ix$o*vUHb@wC7>-t6AP90BJW0Ioswl}Qpu<$f2JqCq;Y}{1&XuKCDB660@sESnAk$nhg zHxgZq&^b}mqSEM(LIiNnOV2+4o5kRVZhXHx>-k%7^F90Cv~z#&?8R=eO+=40hB}=_ zk`K$s3o9e*y-)~3Q2-I4s*WTAj-pi75w#cgJ~EA8nHzg(0@TP8lR2|xRE6QN49ft* z7q7c=`9-fhUmyDPJE?f&3+D6_*3m8Z9{kCj2YN5+kHQ8~Z5ifPBeNY5$s`JgC|p*- zbo(WjK5_^`J_wE9fD;l`BdeJRRS**>L}h>yFqMtOoZ21v`&Dt^`m6t?dc}D^Apr38 z|NYx`^x%!|zDJkN-n%e7v8-h}Pt968uH|Zos1pU3Rp7A^yt0Ur532|9syTdB2U1m9 z^{J&OP_r76<5kNLA9QOS!3IO+h>JRM9M3(M4*nd%XR38IEY79+kQTb+8&iL4^g=E!4eTOBFJMDC8ABDx+O+kRA8|3z<<%+ zJ8$5rc0vHmh24 zA0_oZ8WG`fsm*xZMNtz)NfZPH3^Op!`j9FN0alf~a|WtNM9=_X5zvhx;^56UT&)E4 zWfghNR6gmP>Fhet-x`9xAp|*=80!tubckZTk5&~tPOA$kz!HT;m9VFiq=o-!=LDNH!hFy;(n1AxgW(hN~t z9mEy2*cg>Vgoy$c1*?K2j&T^2WzGpb0S(*b=<{F1M~1LHxPg`CmQDbEH&FJFD^?>BX!m>kr@;< z_eV7k3r}?v8WaKjqNY(5FscH|I-;s0`8bZgg(y_ifr1DUYsQg4JH8F;_-4+cNSSEY zXRf?_=f7Wb1pzp7s%g$oEFV?*=n}_`MrIQxGNaP-QorI+>1k948Wf)DAXEiG=_86d z&|`lgDiMuSf^`@h_hpGC%ZzbKLRl3YL=wxq`?FVFzVq`}UqJ-CaJpsBw@lmWAc?cw zXyqW+A!JEGpG#;^)p`beU{u&QZTddi%IF-%1jh>76rc>H4# zs79gegIH^5&vl=^{L$;Kz5)ciaJFrKoQSsgD5*1JzApZoL`VBpNz zwml!fmJlVihMN=3EF}hqpj^~}2ZiVTO9Ni+m$cL?(H&H%e88}Zs6(XMM;z`B$yrPP zhpabgy6noX!`9yWoZG$kwb>vW6o5h%P*tdgjfylWc4E+SP^2AlDJW7QIjrzRj&OM5 ziNhmJJoCTQdnzTicltj5is){UDN1y-{64`v+Ywo?L+1rDC-v?OE zhzuZ+iM;oncbc`=UTd9I*O0qJ88D!YLI6+2x*|UhH+~qUNH3K)ifTmF18zfJ^avX$|1n zTjWqR8s~z`>yetkp(-j7>&dEV{`{TG8Nlh!{=!%O4FJ6ToBu=D?9-?J^8Ks-_z%DS zax+g z{?N>II6;UAL@6sV6Jlg2OihjZCQuNGQ?4KErt%#CM+Q9qYk%V_yRZHJKjo*F`$r#M z?0)For#C-X)V5}Ly>G*@2(8Cd!hS5AtI{-AQ3D@Xc6El2VBiA)GJs(~sVYQ3(+HUX zLmM74k?p7YPE{KT$WOlZJDacl-~YJHMNj|y?H7;Uf4=<%xY_NIncd69+FG3H*-x40 zqLhkpu1d8UGZW{cWM-&p1Ot_7C{>x60a%D4W&klEvar>vdCvO%F7p1*{@~Zfi*Nq( zxSz_|lNY=DPcQa=)68BbqEDw>?$v626l$xQl;Qw5SC^j@RZ=x30#z@_P}OzOwj981 zBQStUH4VZ-pj}nuRP4RJmFeBD{?_>6H-7(wfctIa`2MrqCjkAK-CQ5S&@oY)i*~6f zO{uUCwNWX`W2$0U(AGkI6(19;)#pbOMVToCq23KT^exAuR$qB({rv5({?6$;U;XV^ z)Xrnzdc93A&$;}R8oo&2PZ6-Hs%8ObR=OP5P}F)ty9;m-&e){?6~{pgY)6IYXr4wyB+iC%|3nE46o!|e^?D? zMXk?8o0Li{)r&6x2fZ4Z`S+}P3;Ia?J~CD{2|@2D}~^uQAbG04G(o&qZa*&N?pg zg2Uf^nCnDz`z~CouM1`(5u$2@AQaTB2gpes#ab9IUcP@M?|iuX;%3aBFIC@Sq6ab1 z-8RZf4c+y2j!hJvQe`uuqDIqPAnc|Gasw39l$N!&d>1|!c4MaFRRd<0X|Aye61HPr zU+?q%HqdwE)%z!>>z04z{J8yz%|7=*sB5FNO=Ou;k<0DO+bPqO3SDkz+D@5LH53CW z{AX2AsYbad`IU&ERFup>T_Yw!6as6lCd8m=u2>IoyxEn1TNV9rFTZlOjz6&(b1TBb z(1tdO$T%0d+Rr?t$~R-8t6f@HI3se)F||>ss8La)Iagw@4zaXMDKMdJgaWgvDic8C z^8C%d{7F%Cr-S^RlU4lj%|3S`G_3mA5lEO=ZuW_;L`>9+L(aE>|^*`JH@X!3>d;jWx z{f8&-Kij_gr{8(@R#AI-KbJE#+-IiazLh=(#&(}57nLbh_V)l8jD|K)2uvbGrTD?i z?7Bd}j65z%O${+HR57Gnb?Cx;wr)Sze)kW;v&&6)xtZ^L^Ltn8{ha?(Ci>#K5BE#a zlf1N>a;eBgSr?$CfHhH=i75y#_i++=Az&~+0Br%tFjFID?%UAsrt&=^I(zNm(bc`v zKJE6CZujZrTkl?fQO*9kFn^{Ly*uaH6IrWfJkG^IXZ3w92uT~44vWumat)+GmqR%h z_38^SA=aYCZQ!FO%K4P_gZpP)et5px8rXJISv`5NJ0ijl2B9}L`*c?g$3o~zHO@tO z%Ejd;{`XT5A_GX6Nn|m^xhd`TK$OL_SVAI9S6a2u1e!n#9%aMZ+k5)6WZvy&%O<$W}N)|p#^OmfCrYCG6S$BBJ0{v zUOF4Tp=KgNyIhp7xASLGE?+Fwe%cHVYgL(Y4F-#~s*H1CGdH}kOH9x;LQNEEB9obO ze{)(sKR~KRZ6i?Mpp1Z#nJ(KX-+6Fncn*MsX*bSAp5KhGG0{(yT7TNq9@J{029#p) z@Y#!k7hp%UOzt4GJkNu{$U%t%aRV`v1z{zEq-@MYA28GPos;g}wh0Dcx9IB62zX;R zl`o{CpU*|la?v*B8j32L7dcX@gFPY#Kg>8hpUfQWm1dT@8>&4BN`f74HMd23GP=a}#Sg!8J#rW)p?lCpAjwvCBEF%ZW{Buq;R++xfG z$kYf#Fg1dA1DJrIo|#KItF}>oD_6UE`K9&gyHB^xW}kk{fR~x@P?+8_;8?ZxxoVhm z4ON|0U5Y6Z1~d7;6M+`@;o{B2;)#GQadCpBFKj@qY6{?95dIe|^77M*@ntpp(UVp4 zI0iaCS+@_LTs{jgoOwPo&rq8czJB~`Po0lnCaXd`prLAy3c3=A{trn#QL?2ANrrHgd(@J|0Dmz$|$qPRr8 zNXjm_pOez{Zl>*+k=2OZ?Fu!+TnYj+hBhMCic%GGF;Y`h^+WMu<1Ap`2980js&#M+ z{pX4BiN2xJ2Y31}zqp<{CyTfV&SmrU!uniz%ZJ=>OO|S-Topv_{vrZ+aUzAl^z3@X zQ6CY5;Ch#+ZzFe&NQ{iC))V2hsJ%smPYf-cy>!-o`T5n<5m6HYH$xv|T^Oa!nCWJp zd7KM!HIU!?h!74&Oal=^4KVeKp?6cE1teM%g@iy|D-;5=F!fAyR%(5V39qbLI=_F~ ze);L;)B^2sWG@p_wD0C8v~o*i|ZOQrohFUt!w&IMDh1T%=Z z4c&Jh!_W$x@fFIYVmBt#s%8NCHqw|1njkE~Afko|N2%x+0K6UpUR$-{bGxZT0J81_ z-#cCLeo9D1fu)@{rGhyZ0EQrfAdDb@Fwk^@ajqZ=m{P$wCBPyG1T|ncWg;T>x&(m< zL(29g0^R`d7J$1C@2no*JLyl)PC8s|M&zP=?`%*Qn&($z9l99ybHS>Q^ww+Vc<@0#Zao2an97lF!ZhbVB5$O z7~Z_Rnf@?kyLx^-ZL8^L+9>y#Y1oaqHv^SYX`1t)n1z{f-wKXa4Z{s5SX!aD*(EC# z$i+~rfrV&F1qKU!8>|!sKoW#rW2VhG7roldN7eBB*~R$e^r-!FRhv>Ss8yS)8e!l= zVO_kbGZe6Q3yj9z)J!tF+rH9R`YI9QIx76BHK=xhBmM; zH7VB=1D{L4P^z8xtyD8xU*615_fwhsRvx!ac)T6+YmFmC3PVo-03ZNKL_t)CHs!)| zsxqc3OozJ0(dD`mY66=swtomCQ3VJzXB81tVI11u3_^`UpHRbTQ9Ip^^Z(OCdHZUU zce}BSUBjts!+JO6hcM&0XhQ^^=0bDw;bQ`c(4uW8(xvz5>mpzQ{|6Xib5`DuIW&!+ ziM+0AuK{>cs{Y;U?Htxa{G;ns_TyZ}RU4Y++&VYk#>LEHDur@2E>(refwu_z+3Q1r zs%EA}Q*mChR^y5Vk`@XgRRc4a(E)ZM!fh(`u>^WoSjNqmKt$cmcK&p(`ev=R0<6iU zN^$87m3m-2fgpsybo*V1yH9Niq+s=7&~eTo2GI~WR8sjy(#Y zC8AHxx&COW_U!rfG+*4zYcs5vamI|#8mv*ZA!X&XFpf*&2MK|Kz`Ket=)%6#1r^WP z*Pa2CiiV{Ns03|T_ynLa2&$RA4dCI6>uH^eo}M4K$47l!hd>Xv`y}jGfOH|YJn5pM zZ338?9^F}CN(FuE)mIRqF&Ep71=ZIdRVCT(bFJ0Tw-RFDZb~%^4!qsc_2b z8p&cz0EuvjfrnJ=p)kGi@J|0rDIc=Ks2Tbgn;^EhW13?T&U=0dwEA?1P? z1Th2%Gfvhm9^E~`OJ{2wuR5Hp8!!{reRFs|rBYF<(q=!y%xJSu1cESgqh_ZD{1te- z!{c=yUQw96`{dfb|7?p@A8plzka9I)3Lbb(_WI*fq@whV?_D^P2*Y}4FlXh}5b^q> zV``)LAq*J7LdqqIa5!1F{PMkZJUeO!_?3!hm%sl%@o)d@w|g@@UiIOn{an{=lz6>O zYzA%uixIeuf;%T2J-T;9Z6la-#npDACNfkNC#wcSD>zv-Buq#}QHpZgxFPClJ8={m z+Q=s<*Skz~3;-9KN$;KweJT}08_tG43|$*mMHRjWW%7s>I}~zgBbzXgOGOl>HZncF zy9P7S`Ef__zzWubHrN?~rBz?I`}se-ch3AFpuL@hEh$I7N573 z)Ce#MLg>55fr(U=c2mZFDqtquJMC#10}>$=RROT*6pf2kzr4B)UnJOH5y4--bJDKA z@yRIRpYr-b~imR zbb{kmq@j-o#*s{&@oFMd-wL&!f9?VcCNm9ObHqm<}*eAtDu~RbV<- z#T^3D-~Dg@=W?`)pC7vTC1zR^z*DY`Fhr{@x+(`6L5PD8cdfI2F)+1_5EiyCh<^t} zL~fK&91;s0t)XMaE6j9MR24vddO7OR5Py(`{@TUO{8<9Us@B%3VVn!6tX!*d6rv#H zpO49xw%@}9f>8)eL(4R@0W8F}u)xVpgQ2Pld3NF_VfgX=RDOtw?41v{Rjb{9emVV6 zQHy4F>{+h25ho}vHK7<7>psxX3O9k-$sOXw^u{7SP{Pg*<_d;^a;dRai)v`hgUx$` zJ)DysZ^v}K8}t2?^-Tch!iX@mW+rMXx#&VO0gj4@8uu2E(1DF5ih|pBVD@&oxh9Z{ z%P1nudJq~W1S1k2^J`qROhqOWFhn2DJ<8XfV2E1I6D- zn5c~hMi!_QJZBB677Pev=!npQARt^6)$;UeQX+gp2&ZN?Y<7vqse}-Gex*`L4U~&g zj7$&j47BbdE;kdUqQnFmx=2$hXrs{a5GjZgGG?~uB2`3~o51mCXaW%!uzAk)NPg}I zU;eKyHuK#%*OrO;b>GBVRW7#^=c2ToGVi8BAYf=C`ZfSW*p3;wD&|~~vLXgX6Frly z6uo7}K!iR9v{4Wvo2fw+3PR4s-hF&`^`+-m)16YaW1_xqL#$>p%^vl#oib0U(($Ur zlnPc|LjC7Ze{~9 z_3I%vX5gwOW2*dOGg3-Q)eKb?F$m6&Iv5C-n+aFD8JjVoYXX`em~-*=;-W`vT>xuG zLjxvwP@ut7Evwo8!FYH01aKlx^J)^8f^9% z7n=#m4?)~H8J6e|LdtbXNHs7MhBiW&tc`-IW~!=cmH~S2{HS~5gBSaABCJGc7}^+z zE{5HdITz&*FZZ+=Gns4M(6xfsAD&@7G#KZC-IUSBh`Yx|)!If#yj z2B+&5eH-B|X)ivGh8Ds=UFKkQW{kQhx9=2%7oC*HwHfI0%~#IfymQ?CKn!wxvz^1! z%e^si82X4(6xZ9C%}mxqq_ zuDsbN@ZuC^W;;7-_0H+wF792r0dV<8U;F+aT<_AChcZm z4t;#1R(*Ax^6OKoRH_O9PDPitHzNk7z7;N2X`G$uFawRV$Iz|%NO9>#@B-ee8pXiY zM2WdtOGH)Gb~n4ZKR@n%=U@ERKS2|i_H+4#n_c>%8Xhr`ZucoVlg%(c6ve<6gv|g8!i50Lsh+k`{;ZF3Ii=d%Y|~rt+h;zP zOYPn1Y*ba5nMByZMp&4~gU-u9s8y+`B6{-1!bCbRU#t1KYd{bp7D~)is+zXKe?GLb zEme;z>{F)re6IQi5&B%JvtQM?DmVsOTHZ`rJ^ORf{v%~2z{uAa794*NAb41C3~ay*4mG&9hFZDu-1F>oMEJeQOdL=}b|2zw@4!7SW69bOu`@J0~2JLh_L&h1Dx}VQVK?~=Cb=pC z2-9-#5)pE#7`li#yY?*x!FJ3<1gmP8vok?W!z|1yVxg*aM0lu%o86SD3G8wrVJ^}CZKO3#yLZnm&M@B!#EdPb%8{PxRR7= z9e@WQT&1iMgd_wGi?W{QT=C(>4rV~AMt$SeEfL{+Pd8`+W7P$i!9kY+r|S++uXcb7 zf)T_s(JpTGcJFi`Lj?OI4Z1v^h+Y)6Hv^Ld<`5&(^=`6KmB0UDi<|w7YR+sj5$>O@ z!A$t}`d{`?+Awis#q+TTp9Iv{4p@P4T@aR|t#FG35$o;L)8Utb5=2ZuSWsI~W$> zWsU^o3NS$`p%KFUqdugRYpB)e-f2(!DPzuxloeN-5v3|*X|WEipoxN1DxO{KAxovD zYIt_F$K$(4C{e*2@nW73#MeeuC9W|4HQ@PR)I_2CuRlKFZ+`FM^!*Pvl?lA=V;H(d zQ_A6LJG-XVpu$A2KRU%O|AVux2B9MjoxkL&GhOh8d%zpGoBne@fYq(QjGphs_g^3IQc^Lv-C zHi540o%UZ2BD-mxdNWG~gcump?2%5!AQ8rTXov{({A!Qglrg6YRihZiR&9h@p`i`* z;Lggfx5-keG-nlNwkef5bg>F3OmjU;r9Lm!c5RgI?n(Qzn=ysU&GaA_Yl9FmnVCTr z_Kl8)2w}oF7rWZblyX^$OrUQBH@ie#6VNuIZ4_*f{g8IICi<34)i_4!V&JiBgQRSC zPgYG`_pt}?#VOT$T`OzV#Z8LCX$C|l>Y8BFoM}H7-0bqw69wix;_RrSp$n)AJ6biE z^8|yTs!}l0QjA$hbFNL_2JM<~(>D^7gdg5L+UHV32s6oI=z$k-q}BDTee2+EN^W|a zvo4xXB@tlN1)JuAt__fdft#xmDYyYVsB_`LQr0lEvVr05%lB6M{Zy_lH}iR|^;Kpv z^8!+@_leCwZRA^UyWJH29Dn4Llc>*8k#7) z-4_Q~Fd`x|Q%bp_Z3u0{R;TI%NkA#eLl>2pB7jo{?Z!FZdv5mApMHGuE;EI1y?0dz z)T%+O-WD&UX2k5@K@c~g&ABdYx`WJ86}bTH44vf)3IOG5stPMrDOaV|sk1=9xf=e1 zr!V#`h`tNhs{nO?t;|Ra;6uce84wsO0utBvlgp0`W_~V@sUnq%RTn(_g$%P1s+v`g zNK*p{hL#9B0)`4G6P*J{!iY?CN`#jIG^J`VGg90ZGA^xNbbh58P05f72r$F|T6Jtu zV9b7LZ>`>fH^53Y7B*o*ON!HB3v!eztu16fLS_spDfPku@5Xj7UP9-q2)M`T)S#!lHGxNnlyK@xg zL$ZG^l@|OAzcNeBP657R zx2>}*N=DU#qX*c}nX+rK&;-}IbumDkPJ@uQe&^)xX8=sqTX-U53YtLhDJ3t4 z-6%>#Q4J?^w!H`)+HEXMH0N??ZBxs1U$Xkc^iNTC0A(GAoGZE}!1W2v zLbzMjv)KR;FV6=kn&D)eH3cRy1Bc+8?UV}kQ+7i`Rlt_pPMB~!w0Qf&Yt&k?+t1kT zXEcGapE5qU*kaW;Sal9Gs~M(TV9R%@2e*dbWgHDS9%s#^Dhm@;)rH;g@z13$RV2_w zaWEv|}H7vKz&S6pK%*zOaqw-c%=v?`um?a+4(x+b7&1Xb;}T5OxJ zFhM{QnU97bM?)M;?ZJ~5J2F#?L2S;NuQsE3hsYU}_0Vt^1>b(}67M~|Ats`(jSj$x zU}kv#`3Ac&4 z5JKPx0-6|%m`K&ERHaoPpbC2L`39HU33K*CFbDx;G|q+IeY(NhA6(&d-J)v(;EXpJ zNQXA!WZe+R?~>k*>1ycWAOUygHLw^3$d>O9(__^$1r&x8qG;}i61Gh;uy z9+Q{N?s_-Te)J--jRA{c1J$X1CV=NuB7veXUU_yo{uf;%KlAdvHU03L_peITNBg;^ zq8e`ZA2rL>$P5;vzyMs{Of;8*w3x7jf!Q7SxET}XT&azMbr%uzf^gVR z<(`^7`0T6a^~b;P@JC@5gvg?B2;xPyEv>~SFoGwlU`iF+eW6@|qCl>oaR#1WP1sGo zURCwL6fMp~BQ;%?K5D6YXVu3K)$IKK+0Y*k@k{SL-JAwqT%CRfcJN_ zj{Q_IC1+W325t7`z{*h@*acI*bnx+zekQEjM(%a3T&#!K9Iu*qx^DXIJ`an7(F_)u z5ovjL6NF+QG|>y-qK5sX*iD91K}DVEB;Tir85F!&HaF>jN^vb4gPyfbcmTr5)pq{n zm(GX&l?Ur71Uw& zt^d5<6$0F5>pEHAD{sYU1Y3IR1kWh!48WA?t4FKm=;`JDVXbygRnLSG2_C1ixNKS6 zTtG{)O+lFE1lo>D+fixCpj<(@_yH&EhaxRNd@TR(W`R#p3|Hcv?hfF26dPM9V$ zG>6Y^1~7Y{6-y(+wa!YZ810i$%Ah$L=43P_J(zwDMabdoTu5jm0FC)Q*Pm6xePIXz zqx#*#4S-mSE`ANb4D8Zz*B`nj&rm9EACL<$XIsV}2uuj!BU4KDzmJw9bOnH?q#HB5 zBTW4?*OZE`3`^=r%1i$aFc>vK(0Wl$A71P*C54$6C1yaWM*GPNQepBg<#9_P5Xd(? zCIT&Ot5WXF7QXu33D!{{(KU4zf~8nZ{IHU$lT$HN)|$#db_E zGt{Lp=%S$3iXe>bnBjs`*D022*iRXY77nHQyZckXwOY5?=N}LdF zz(DM@JDLz+0LD3kiO@BI(^c!=MPPW_v7(8Bt_jOQk&%lp3Ka$s*7~BnIL|r0Rk_A`(^Im>}IsVb(r^02iKxSL8*p0`%M_DE~2Wlv$ZPPMsP53 zm>JwnZ1Hs6-eaPC|8&J?M=jQUuvHi2!>dW_!afRgdn^K^8G+CW9{0e5D~rh@T6HawEbuQ@;iV3lMhem%b$Jeyl>;tW|xww zg`4dR15Cu*mcoRg35(={P>Synt5&e;8^kC`xgMASs2Pbkfi>r9IadO_h-hPwqoL_{ zV}AAh=i49p$uB+DH$HLt%c<&vn|lz8>?c9{B zKc8KLx2zMdq8FEFHHCQ>6w8erSU^?HrJh`E(l6a?=kC)lpPp{Vba8nzTL?Tff#tAQ zET9nt&@%S72au3!t(bu2)*IaH5^~n1;E=;RyH?LnBNC>rYh-`3OFwnBO`rYDD`)+) z>+x=>_9T_X+Y*JH97`l{Nn&>0Bbos%v#jWicG^Mh%w1A*=u+|00?mqhNS zULvRbJlTyIAAkN~>^&dTbMRtdVz_a|<71S}S=hO%jb=dK$`KO^2-B($05HJSMi3@l zzF%YZ^|T~UU|h^Tw?EAF@hR7XDdb>|xQ&Vl!pl^$NI)~CIs^D}40y?>kR2Pa0uZn; zkIMq``A@ekRuD0Axpm&6RtKO9Xm+qhhojzU^hL)PJ-GT7XPgG6oCIRSPM6K9b_>dfxwhK9tgL`8y0J}M}@)9(Q2Rx0Gnb%0NpuhkLO(Ts*7RO#o5P+ zY(G_$s>V!M7;x03<-q$$2mY%JN(~pKnFOe%B3O(K@hrizxX8epZ#LS0DSf@FXJc!AFUcS@YObf zow-}SmczIb4hIJT8V+q-Wc>dBY^QX6f%b6qBClv5f34Q!4BhRmr>s>NgKIQUT zcF>9)0N=-#^Wk%P_SjMy5TL3b|GU9N3n;6%RIU#(9VQc%YP{JeT_Sy!cklzmD{sC9 zbaL2f7nEG8A_RtrSKEOZ!i(l`d0Q3&dk)>g)PO<|3PFg;g|fRb*X41C*0FhHhT>?| zB3HGKf0yIz&g)v$LH9BN4~LeSGm&-CU{uc~L#g#6*R;4UQ?9-dc?%FRxCtT%FFFfgKV>ihn_XJeivFW4T2xzDRAIJK4NI6cK6tVD=WQbf zkR1;VhAu*cq*g`W1}dduO2wXD?lH|3$%D_4OT8^}ViX+p5#90`48W?3D7k8_s{5%} zRi*u$akESK{^4^Q9?ew&&8Z+5upU_37lnMh5fQG)IRUfh0 zr$YgSIeQ_LbA`d6s?^1Rz6m%m>PwrJKhkHKmTLU$YRtQ-eEpS|jydJ}ZzJ>5Qq|Nv z=c+ohZMC@DzElM>+xMSuoe>EPUJ5NbU9~oNo77ZQ{_tY=2{YUc!lzvfyT)&Dy8T=S zQUbt|f%ehCykG!xlb*MRL-0r(5n32Mz^`rq03ZNKL_t(EzpI)FMnr3ZUA2CHaG!G> zpIq!8R<*NItsWS4(~r)Tz7Z;Z$pM%gd@di;1!4sAHs~Sn4u|)3_LRxk895~)ZGy<% zlkUSNN|{sH?Wg=A2!CA!--n@!aO27kIDEl!ejNZ2{d?d0vKE(p#t!QRRc#%FDzmpeRS&d;vrM(R!}ajl{{KJxpmktQ2LjSN z0SAELH*}nIjdVvt+z`+NAqB7{PzR98$5oPBc~#ps!GYEC@LUaZ(OZq& zyy&oQokO>+NdglYe{9hLfGPC2k2cL^BZRt)uMu$jXUTU>v|+i;W0?i}IpbvQdZeuj zAQ$(k-fGo`E_xq)LGR*~v|(Ww0ch7qO}TEEsM@V;gbs_>8V^tg5j@#(0d{JN7y{;8 zvE3&C@<0v0-w?#jFK)MYaO(QQYQk=S@V#ZJTZl9SuDR%ziRxjEABIR4pb{5macLdh zf(s(TZp^sZ%`o^E@8%O{TbT&8D1s1j@q^2&C!dJqn_(?#TLASi(U&WA&@65Cj|1R? z)^f@P2P4qccEUJU)VgGxETGqI|4zlbfLj*e?C;OMDO5GvHjxzuo0H$*vY#>}@U7$A z%up5eb=&ea77uWFd0f+}CH3!E8UohmLw;HhRJ23;W8w-TV zuC_Cn{hiw=jvBJF(L)zNL}-HG$%`$ncQX#Um|PW2bS8G3%QAM(z#TM*2R4~~L)NpS z{&!*s^z>?9PS!1kHioLGkM12&uD8V%ed47feCqKjhBo?oi~%oh_PE(6TyCaieGs-| z!YePG(DUmN3wEddoUxxW?Wcn8J-MmdeX7%3`Acuy&)>cK%etRae>61xs*4Q~(6vFy z3ppdN;w=}&e#~GH0+X%!7GtW|FY!eFoszwDHoy$F>LM1#jA~VzOSQm+^P`^O5zSXA z>mNP6+~$Axofkjy^lE>cihjSUvIyHUXUqW0ZsSF*in}L0c*%=WXZ9ShE3A}?t_?;6 ztJSx12TMdvBi2MwGwfp^jly^D9Jl}ATkl<-Y{wFqDaSx7Q_yyw$ZW|I^UWAV4a}gf z^$4KD-oLc@jS1F7#?VEIOD3Ni1!07R&2wxKV~|K}us`EwszP^b$UFVsL*3o3Dc{A=^kb3Y z>>8l*`PnjK1I0#Fhm_>b>1sUR4Cy#!t#=fnwFH7{c})rmW(;fX4TxCZT?Fm^Jnb>m z4+$}fjxpF|6tzR-ubBEn~#;jb$6_lS^VR%SzLCe&&SSyL9R zoIzFCu6MS@sR(TA@{Si}lJ4%esuCH7nqmR~fF%gq5VK!z!)vO#BBDE8V=rdWMgd0z zF{bDyiBO*X3G@H}%hOGvcM8!RB0EvunDmw~T#C~vxLLEPah4qcT|dOPa@NF5iGU9n zrhsD5p^|J_c*u91oe$4I!aHjd6(rV7b;HzrV+V=Y^6z*;>RA-)iBY^`4WC&xj7UJv<$s1@hBK^_{5(hN_iRu&}Hhfr`I5<<#Fdtlx%We`Dk z)T}dRC#EM= zFl%efx*EQ6INt;u%Efdq`;U8HP+M)XY1i%(WWScU{`r{hLLlz|B9%HB3(LYdInCJC<2;A zR7=5B3g2}f)J&%qGhqlBrpy_|lyr=ki%0@o9I~4spwK`B2Ek3=2LW1nyF*M>fqb;6 z`|X&|hbTE^k(A3JQwl8pljs>w?q()H30W21TZjODa+>ZohCZZ+s2>whd#mq`kjYup zTavxb4`=JJTK6fBQ6whOJUQr`VI_iwcTpWX`kerTENB}K0*daiwn$0Pc#G|jkaI!l z0Mg3asgNy)RE$}h%E-KRW6byqqDb?`$=9yki>vLJM1)S4J^C@B_LjpGvV5`}N~c>w zywZOp4}pdpkgJH$j|%yjQ`t085~J6|>+Q@-13LLcXihqnf&s{yM%P@!teljs~{ z44FZIcdQ4CYD|KYO9yRp<=_3Ov&%>AuReKY@$37u>Zz23iJ+A?67xIm>melF>0!It zY09eBuzF|JS)-LNbadk#q{Nm?5e=-CSs@B*S$&ZJ9D8SGC+qmxKl_*d&YjAe=d9st z*6?{9)uoq;t*hmbUjDl4 zT6=z2d`#yPi~+1;9Tus>GOON?X9>gHUHpNX3~wW|31s z?=z#mad$I#XO_;I)7qQw0g7hZ&?I0*0W-3cJcE7wXGO}B7PcyJXofMJ*MKun%LSPZ zX%gY16wTJK8fF0@5m9DlNm*{BEOPIB$O<|lqAFz_0gyE`X)4NbSqeHW1vV4*W**)W z%5x0046QxuUhAi>U`IP@G5?qnMm_B{+nDmEa(p*u8N6kP=z^I}iD&@97()Uo1>~d& z-4zFFEx}q+Zwb~wy)D0OMcP!RoSn8b;S*k@r0-DU0CLVq06I1_P?=x80AWK!{SKpJ zF3<1oAXO>##`Ol>Q#&Qw+PuwQIJs}lsFkfn#y7f z8I89X#)wHfpz}Ymp%&yPi;f?>dhiVZx0q=FA*LdKQ&S2cw3SmL=opfgWc`ASIm5WW z>~XRlupSdOV?>Avl{IkAU^5hl-2SWv6Lj8qHB37M4ys5g>-eF^4_*S{mLVDmh&ih$ z0BcBhI<6gkJsB8E0Ch~Ly@No}hlGAi*q>FXoWYn1MVOMnTh_`MHB35dDlpM*{T#E7 zA9#HKn*eST(?A925QQo;XN$+NO z7lEVJkWQMY-Lnl5$vNxzzQ^`n2jMm|^#p{hDnz6uZi97K-0U9Ulm*9UTYTv1VJV2R z0>l_n#(r1hiA#I9f4)U58FXMKU9^?vEP60+2vC{mq@1%3Pd&Q$78J(>3?QWPj?+~9 z8)YJGrlL``6kyBsh^rUpQ>R%9(JYF2>v8qM0-MPls|5wsw(_W)MO#^jsBVV@Cdd#Z z9_=+ZMR5;6AVA6{Q;KG93$0iXhf;8ckg**iF77wjZO+UL0npVRk6xG|WyN}klSY$J zIfFqqY$PnJCy!@3=E?izpVw?Fs#bGPoV@0_lO2tbB0<&-t=&1zkAl_pUgW5!pn z-BVY56-Zgpj{)8?&X+w56&b*HzyA{6e|2A9e)FE(xVxNgs7mDx5s|iyk=k4A&ue<} z$~=GS_h0@2061HR=MNY4t9?kSKxQWF&ucNv%0wDd`QC?+aWJp(*u^=vLr`Z(Q&O#* zMdgh?etCgMFD(#?DMAes=8e@=A9c}rK3X(7#;hqR-#;I|`5*k7PXPelK3-iMLhe(R zv8mlVjfk1p17g_>C0M+!thPnt^^gi)bPiqZ&^7L%EFu;co*HI#jU z&^2Dy{ix$aQ57d;sRnWu8NZ2Iuls*lg1=&`ab@17D7bV3-1 zkdcz=qN~s~R%Z=Q%?)GGIc+?vDMbNdmK`#x#878grimq@fU(A$i_$Y=#Fx)EAr2v* z8{*(BzZH@sDG-eAfG&}Of?`5D_ByZoa|iDjl_OM+^uk`Pd!3);7iG`hQIETVwsK4< zOCazF#r2r+W{5Hn(PeM#g(Uhfr`)y7hIdE|K@0UgF(OK&s6FFo&*O>9Ev_84I9ycP z)pjR!*)c)tjG6Roq*TlYTL7L22dX#!Af|FIF)?CHdNB98Xe|zA7KaOudFPNdtEg%c)rl^KVeGJK6#1|Y z#N-G#jxmp2Xc z*6gNmsUZjxDVKs)ru$FCSTWO$m}F+yY(>$j;9P+XF$XT0kxEkmSkQGKYmtXF6>D3u zb~T}^3AKkdmC+)bQyrr2e5lHWz{1pY1r$7K4G=k|^z!wSJF9K5=bNwzQAQEX3YD&L z@YbNr)dn7%59%zH*_K3LhBg%=r&OA8%Q)I=aOJSmO&`&ZNhbydmAA^J@XSqRsrGhU zw3T|x7g!Z<8beDWgp?&JRG3Jc%BpjWS?$y?bd2dCt>)ci7n_iw%5f3h=Q3hz-A5Hs zwG%?n))wBGiH_Esv&61;r&lk|Uj^`{VLm5d%p$QsmZY_}(o`0EZG|C3%A%9-y3h=} zSQKa(t>8>4lGc4J`Yl^@7saUI)D}Uzil}7OSXbusJ&)|Y48?V0=)ADlnp7dggxXs% zOj>z^DQfVc%O|FcljZiI;J@~a5EIsY025;~q^VObsMN*%7G)-+il~Yzg16@M16L1U z1aRFlpMx-@tSOerf3=47Xx?b$jCxBNQ~BcGIzB^JJ3Mt|ACF&J-~*2x;)zQOtosqi zXIlUTc_IK^<WoFty5wd7@*62?AxHFSjLz*Tu=zKe3)sJ}m(gKfNnB%bvbG-kt z1Jusq_+gE+(U+n4DiQSnqN++kn@bmIi_TRo zGh!4NLpU$q6C zvmgRpZo@+}&-%;L zcKjE==ZRyKclNb!-B}(n(Hph1qcJ=oEhL5REgH0SAE~J<4(7G)&nrB3ai;t88kMs+ zSk!3iGMQxE2Te(onYFEKK}HOzvnGMCIavp>CDB)x z+rXC&+kCnn^BCneK(`Fj%UN{vu8euL%)-n%>1eeN2|0`I&ubj+Rl3)C^^Ubn=WsZf z*BGPdax)g{xoFO`@>V9Dbr!)gX8Fo;8^3k9s8^dIO3He#^5*S%>&P;#iD=w$TgH$O zL57euq|ycN?(5;A(u@1GUf6G@Lb2$TCX@j{p{I=@@y-xH2_Q#=7ssTp7{hP=H-Gyd zDwOt|rS~4p{dWLJ%t%)byS(VCY^MCg)iy~#W}RdaY8V=$V4NaAcCjx+q(jJMGLk;T zE_U+tL?vZw5fa`E8J`UyBScN!nS*)j9)u`?h@vq}#6**NL<`+6cQix7i9A(2G6 zH$&1mU0PQg%o>ZM{aW|um3DOj8bTD!qMGuKyo6THqzMe#sA>6(y5&=(X~nHfp4T3ecwUHFD7A!gMO3tUD3oMmy&WM_?_ z6rpQtIH;-*8LxJYCufW?hSwq(C)pfqnINK*0!S65vB_Drat0xYhM1IDl}UH<0*o>1 z5VFYBKuxTl?sE8Y)~zaz4b!z4GXoe6;j2?0zXC8A!^5N(Rb$Hi&H_nEH49V)Fs9_{ zwv|C!QZE37#_w#r)|>_Xn6fpTtz{)(Z4I5Twqa!f zyvam2jp2(i$`GQ|b!D{nR=dhcYSj!eW7S6mK${^IRD=Ons9GdZtos0G4MGv}lbsO6 zqeUZ?Gg>(#DXFF`DJ1EyUTofY^~TAoTJ#;anCW5`9a55p9Z_9EXLT5phT37djZ};e zlh%TPlmt7`EnC_FuCR;=2F`kUua(*xb+#O8IcrQwhDR>V-nemh`Ar4b7{1Ab3!*xt zEOqUy*50CaQRj`>eF%+c9TZ5w05X4k;WR17zYNxd~S~=Efe?%6| zDar82h3@rDA6`)fS;M!8=wi;=ha}a!b%uy^jH7yMXs@e~RzrccLAZ0W#{KhBT$i|+ zoeru%y--EtjLsXc*03(RN}V;DvuKQxl4yVVpt%;4ysQ8@!?%cVNwN-oh*cA;&YFsb zn02qK$Qr`wI_NIZemz9Ie(Mx&GQlv@L-+TNe%_zedg-9maZLKiQHNLxKOJLEBHADA zHP@KwWdbY{-6z6+DFVf&EIe;Lp^sX7OQMS9HfV^Myfs*ELZQJYNx*s-F@_R6yhCbd zZKVgZ8YyL5JnCQ!$)=Cmhnz)p>>BsBv*v|~Dm(`;r!uVFsH$0X75b3WvZ1CfPWFCG zXex)Z^@w@nKq$@7rXSId2}8&aoz89TF>fo)Ipc8NqV`VDHv_gq5>dq3o4d8M&jPps z;6EBe{(&Lp#n~oUA`(@_`FfQ1K6b#@Z=I>C;^INaJ1yvN*HyAD$Qz6y zUTuPmW1@q3O-zKxF3eGRgJDd%?gQSsv&0Z`DYmVVwzk@jB8Q90wT ztxNmOx1M|Dc7NeAaQ|$$r@-%ShcvSt9T=wf7fFK^V&d(Ppnz=pL@^0Ha@0{GU}X_wsyH6(`K~|cT{mfRM#=4Zveo9^D$UMFW27wTVoWS z)mF)>48gF7!duo5Ma|A8&jfEs$6U0jgklb2=2Cc4L4C}m-*wI?5v9r*E2_f~lC2z{ z4P&_WbN}nF>yQ6e|NgmQy4%(EgoxrWMxDZXUFrHsM3mOsSjPONVgPGP$U607R%;Bc zwo%u8)R=ZsC(^dI*%Xr*vS@aO&c>vYvkW1oTOaLm)lqd z0syd1(HBMJ z=9JVi7=s52L?${1;i7`nFad^zND#ACK+wvWY#5n}9DZP?mr~Y{vwT|$*{2ILi6Sf zDqh4giqr@IQWU1S6n!D-q@yncfMuw&q?O}HpadvGX*D%xG{!uu9REQ~vKNy)sg)jt zBpE=CBDo(T?aymET@E17B>Q2?k};e1Kj$p^F(L_Yz8s1JTi((6Piy6(>jtGP!)g<< zfLuuC1K0hRHjY!+C|1)xeE6 zQ|dk*(vKx~u%MhpSXVOd_FAutwo+Bm{aK~6#;b_tltpru(J-IX-aP*s|KhddX`^_> z7=Eva?!}nfbsuE1&t?wY!F)&hppCNLL8xhL9>|Vr!U01pBi}L&|vcXim2t ztTd!dMMqbh!P_ArOF>-9pj(-;y-pEK8WDKQ;#feZ~AcW!k_=|6aYT_@u$Ow|Jo1xS?i*==57*w zf{5(AbqtN7qC7?*CeaXuZr)!j6REd`cD^p+lFPW8cG1=RF#OAx8Q{YZ@|Z=JmE)J1 z%KT!8DWJ5CBUF(^UU>4#?E7xr+i>l3&tqCi?vFiV{78X%!-sPs! zLmjWRtdn^`M09n!9N#ib&nWOh&T!Ix;@TLxA)@bRqJfyIG7?%T z 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 a6@v%E;}2AL<`DKykgTMVM76k~|NjHT;hNL{ delta 11133 zcmY*;WmH{F%1zQbrd`6 zUqe$9qj}kg+vh7srr+}+_GG*A^8oz*6CK&tHeP=FnornC=brvzU#?nbQfl}ov9%pz(q^XNwH zZ|@R3y%75N?PFZA!Haj!axQ0l?Cug;K9AZMLpo`6@n}YHXI8@Fxgd}x@P|=8W%(Jy znx}9m^jvJPHg64SWqgI}_$p8__T}9D7aLqK8yrj%8yxHm53u@chv7^R3Q<>Ayti!K zFPM_1Hv1Kb_P}AW6ryCS?%az_;C3GP^I zN)+E?A< z-Z4zQN?Kf`$#_U#MIAoIrKV=Ohr{8uysEG08Me9ND2236?#doA&ztXSy1P4dwVTLf z8L|*n2kj^*?ht@{F-(~nlX2w3=Zz6O8ZcvbrM?vHbu>aQ)t8HzP}KsbWUHd@46o1L zt8R<}m+1{71BanrpMHdd*dLR`cU#njuA9HDDPFugz0RDQs!MCSYy_BL0+yKo9w#R+ z5)ss(P8jKqJ>Jh-s{*|rX8G^$I^Rj}Tdx9;+xFLnGw7P_9;_1MYvI*(0hMng@ss9H zJ2;REsXy87G4sUd?%)@Gfrpcc;gpu17B9dG56kt~i}J_nm7jYOoy8t1s7r&uoIrMK zt=X))Y1C%r<|bX=xW+&5yC+-RbozZwg4)l++bJKF>B7qE-9hJ$vS@HX#V?zM?Z~swpi6v*xGuzbrBnO8Yt`GIQJ~%xRccN1n33_&2JBlR%LVCyi)(zj@FfxCkf$6 zQ=Uqqd>NM1jxVP(6~$N}MBC+lb}$Tz8HdlhAd-5Np+166=t&(sRnh32wthr~4OfH} zKvXZCY`U9oDPaM9_i{$mH1wI;aR7=eV9L_m2>sDc;nxor^%q>*O(~ijZyuKBG@4Pc zqKZGDNsi1Q(OdFHP#7}|p<INj_? z;3dV`;#4{sVSKGpm2eSNH5X$w*Y)g(d~+GhQt5Dm(BlNKZkWuTr^663`qw8)-qlHh zI0*5xne=fUB_-A8hPPf`@YHv^2Ec9QdO{d8|qCi{j0yGuL-xN2{f{}(T+T<3vB zaO<-9*TG<=)QZXHQ={+YWz%IGHGLzj$fR!+;pf21g|$^wkodlQM3zACz5&q^Do7tv zR@40<*$XnO0Rjs;nB1&_(c7=~G+?Vern`roma z1=E67*baAp)@+D70!|6*XnMpsuOOCVDLJaoVYCIJyPo=nh(6>TdoL$@R@JlKYbjwh zBVQUlbm?~4A|Te}`!)Y|mA|C(t{(tSTd?U3+mQviekG+pJ*cv2n<7n8JuNoe39z-?=vf<_&+il7kJI-n zxfI6brj@HPaQ1S5vWvmy1Iq<{U>uF8tyQl-)h|OE5f>OBv!gFQne4YajgjCPXMMA= zu@B85PFJPUc^MP$e}e%sG-OO)8ccBqJ76pfpxzbs0)!KCMp_OPaxz{S;)4z znClg?%DeZKfA4D$q~o1PXSV6-U!C-<*k6E~KhZU*iSkNok09Gq0vAtILCKykxH% z1#y@JIg7h=6=MaNf;Kcby@W%J7)5h%^$6gg{;0Xf^ZqZl3yvN3JntF7z$zN9iL)ed zP~iJ=)}>~FUVMFf&kV3F3_g6egjEVDXIv@>Y){V7g@IFI8dEN<8?CPlrO-_nBRj9m z)KbzJV*X+=F;=A7Jq-OGdyA%)4X2bcWd)nhK4DYhlEjFA-nbTnT&-EV!LYkNDx5r~ z-D%tbw?k+eIKln88G612SsBPdLpK3Tyhw1UHa92?dpWo6P3GJ+5}+F!6h5C{FhD|G z`DZfM4dQdinS#I1s02?o(|JGLF!1HlP4!zYn3SPB9prG^{Eg z{KIJ9t??%aOhn>KI73y7Y6{Ls@2NrA*!=t&8Lt0&J-1N-{yYF|wgG`wUb7K6-~(&FU@vSTY{6?_bgu8Xhn zRmtEH{R;Edn*QvmYTYJkMr@aX)k~qgAUniQPD`vL-4{!w+!kxQksYf(So=t}#+3xF z?!B2_R_p^$rS`=5WLSx%7x!Q<7RISsQqYtFeMQC*HrI08J+!U0DJqs8G1uR8 zCY<-?por7*CSy20vll62UrB9H7n!y^W+{Tdbe6 zqau0Itq@s~tULC@eE_mN_nx(?725LJIry*2d3UFyHDMjo3pm@(uL7nmZ9IwA4-r?W zC+355gp+#pY43F9K_F6083|FfwC^0H8cQW)`&~BIM4nj>Q8_KT)8WsL0bf}Q5-`*^ zvA9wW$#4RjF#6~*Kj_p_l!*+XnV=O~Ek=eh)G6O*vC}cL^9_Qt5~NIuW6MP{bLn0> zDL6Q&Jejy-0c~R|`hn(m{CpB5N=wz1$(VD0&Y@qr(740QR=V;pD`lrA0aw6ryX~O| z*D2E*_HWkc*1+oY6_MoMD@h2k^PQvkp1xQ zL71i#RG3(Dlme$Yk_L7-dU`PPfAdUG>ca#>pMlV@xQswvI|hO93Xs@??~e{N5PB>I z0xC`wXxB5`xJ0$=y1&~|hw_gIhp1X+E8$&W?rH?4+}2~lz47j$qB=Y2AIr0k)Ff-J zhX-S7K&Fie9=o?h*!kU&N{@kf6>Z5DdT#iAvEC-nk$C;Oj$R>Zr~H5*Dsf!gBGbq*UXa{fz7WI(v&g{KertIG zq=_BEy2``dzFY}b1oY|-^QOn-<);^b;nDBEMjeJ&q~$}EYZ*Gzx{sD>W&}TG37mcO zcU3Zm_bpkrPz~-K^9eiUo!$FFD}-b%+G1AAgij(<2LeGJCN>CQa#Z_P3uQ(dR^xK) z0ahyKa?XKnX}?{N5mck_tK(ALVrgLN94(H9!YJ-0pGLyn0f1X%_^p_fas?0$%^$Zi zfSG5D#Q6KcmGYwTH;Q3%vxkW6k77=9Li%~CAc~n+O*=A_|0I<(a#+ zh&y1u9Qpq4PQ{WykFIK_ka`8i5vodhNasfWs8ra{p&6_`^}`jTQhw7N43O$Dt@yt3 zusds@QCRMg_s-7cS?Yst{V1~BY!dp?YlY+T#%^!ne@-qE%Lt2q?V~lIGYIRTxcHs- zbAO6Aj!^KOQZ|o-PGg5+xgqm?z z$z%*=iM%`FNm;Fg7b-vukHM_$wBe?O&Wxe4R;AOX?eX51E5@=eBakj%e>uXfBv^tf zGy@UAM4eb!E^g)}gYA!A(7iXvZ+NUQ?ZHA;&U5XPwufxMuqoR-c+`GR?|3RDAmCP( zFC|6A$Q)rC&e-&I~rML1$g^Xg;yQ_Z-WYb`t?M)!6mLRj~xJm}#;9?n?)diJW z4g@6|X=PsCJx~Bp(@+{_YXT)FvZ3kpG0M_v8rb7R#q6Y~DnPdSa#vxG!FBn2E#>3Nz&uXz7_2+(OHw857`&Ac%H))ei1=^2HLwvH zA($Yg@}U&e?`9T(bsUicB!C1sv{=AIl*+lDaKgp{!5pB~h&p2pvJFjeaAC@#Z$mTI zbGa#Fb=IU2YZH7{Hsm*ZrjM-`mM2D%oBn|eKf_4ld*!GX2vy<0Qfc|i2&al$BxHk{ zJZ!=Hp+CSXFp}Y2zB6P5?sxTS50fHxlOqaqw${7f<<)rRkE?#+Ty*}m9!AOKc8QLh zV{~l?*fK!fj6(EVctLAUWC|1R2s745=+D4@u!@>2*ZeV7-0{-R4Axj8q=6v7gG(D{ z0Nw-@jAn!2xz#h2xoZhAZCJq^43lKYA}o>_OG#yMqPxu1Cj(%C!XB!XH_L`tg@9D^ zB4D_3;Fo>zt$gJMK<10fpYvG2V$=@kaFgJGUy*u}Qm&j&oDZegEdK26XJz{g?=*ca7EN z*4>70JG)Fyp*Wq9d3sRZ7yaU45zkWuTB70IPvnSzY=Nr5JHz0FEGpFFMU1Kl$zCSL z8+{gX8ho{%!ol7r^zt5tJW^0hjEax1IP|z{2`01+z}uFj=P;-LR8LxH@4M#*7rx%| zLS=Mo6Bq`VY^d<-bJ_Vh>LMC;0{7NLald~QcnyT&20sY`lg{j{kl(WAH za5(ThnJlG4303o;M43vUkKzh)xmwX@i1|?ku+VcD@5wZ zAeFWm$06*RJ1a|oeMCC6WHfu;|M&WHPS($~cI|`Homqt&**3*j$hP3yof~_*bFR*a zzIgn;oHvzUm)7Gvcr5;>)joh&8a&FQq-im1RM2-_U6u*?@ej<`X%W5|g<_a2Sf)}3+7X>x)8!Hf$1JL!t2h257=Q>N+C5bq18p6E#= z7F&v!DsKnCMvw;P;eWH%X(Sami#(|C(dl~3?7J&d7o_y&ByUM zP?!ns%lKTwu@5&&oR=3%=^l-^L{;w zRNzSG6-QBUiY>Z<1`(+2dVR{r5T%kqb9e{NGfS|U-j&^=?$Pm$WPv7*J`uZ6bWa+l z)s8+t+Nk2KoV6WqpERD?>W_B4jmpK2)o411-e^9a+M3w)M$t(oOHjo=pj79l4dss} z^+`=H)P8w%P|Ro&t~xv~dpP^zno9Akmef?ZE--xs{3vDt{0+Q+VrkkAZ_Fk2K8}Za zS1$gp0iN5sd<6b>A_*mx$v!qgn!Ls#^A-BK3r&?Z-}k-FgZ81L^lw_o1GoC?SLYq~ z1`AhhZEfNSTwL2{?a)XEuimHcP}Fxq;z=T&H9nTf*MQ0R2BIX&QOIE>M}c zs>{KYqB^kS0r8G*6OK6D{M8n4^h7T&9z}n+*ZAdekdCCt$YewyNAqpTypA}AbK=oe zo$Vn6S-bv{FYkYSU$=3XToNlTqTaPeC?oUmy4{sr1^$K&_;9T9TjM>y)q!HuRNWp^ z3+L+nGX!0kynezo?`(y`6{L+!&KJDArgynsuK}Lt-vr#x`YtXw8tqmPL11Fy-d5LR zj*lPlOId0r-$+pR#P!;nls(nS@%`$^*;)%3dxs<0!fN;Vq-xdV=9atr=IrtJoDuw0 z+f&cWwzjtp&;Lp0BgaV-;i8alL{3KXb!*vXQlv-HSVA1UG$-6WSJlWB^F|#I0sEG6 z^0xyTtU(DHhf|}B={s-mx?jb7b(whad0mb#LMSiFBXO5UE`HOt#pkYv6%szV$IPN^ zV5!r>hq-n9rekGRhodY2{ez7T&tRB+%>Pl}gHfUV60vsaq?Z3^X-S*z3U%adeB$+l zUg6G^XqSH(g4N#zaDM&+Zva!+Vph;s2*@`lhqC=)D;!KjgsNV-xZh7;2oJJd?J&1aJi;}Aj+1z3NQEOY+<8Mj>2?3}8l*7rplmMCqOx))s$FJ>i}~u_ z{Hn|7k}n_zk$q~`AQHoDdCzW7mi>3)$$o3pCRs(RtFWT~Z@*(!HK3>ODRAEMORFb+ zYqZ7T7BhEdi>}SBEwZp;n@z(9mK|SDsh={0GGU=hsYNjyt zIh=dKJ2)t)8i4w&l%UIFI3=c_q(3x4^7tmv5F?zFy#YASKNAZ{mK?o*(HFKjG zXw>-@*&n6Ky7V6J=U0DDetx2(`)aF~E;^MqMFU`kp?E6nT zR%~4_SE)W`MF#ugL0#n97joOXTI4k23B&@_&v7y|ry={8W<$4iru6?i51L9RrgR$8 z5IP2y8*gpmLn*p|@;gqiW|G9XV6c!Ly3=VK(l1g{oB{%EJL|d*9lKASG2D51 zd5z*gCjmiM+q;=KTDdWNJt(Pwzbn4;o@6#CeSZSgiIJ#JF0WnJysh4UhmXL>K z!Hr7zjxA@_!6$WQ42u*4F6<;zNNGZF1VUr{*_r(cY~r|i?D&;-oRb$B5mC?LVzLEq z`1{YPb}+<4g`6?+a3bTA#?yD@3jY~RY%icAO>-Jl1TsY#M3-*$lJTPPX6=oKUSvXW zH3AUu4DmMEXn2;I91L@RM#!@Ri`>>^JM?HveWm&R)r)GAepQ=BzmrDj zcV{ByDDY#_2RoN3L{UrWlJ+XH%H%W@Q@+jZRHxB-y}^dS`|%GFA;`<={!HXK0+46l z8a54IyuR`KmejR>2v>g{wNh?F=EeKte66FVvqA7~(bVs}Ew~e?W^<53>T(Wlzo*4U zn#N~|ZN~f(K$>RM+^;h}r07Mfo}@vIzPTG~NCATxeBnG=wWfSWi!EbA>D^6(jnRW9 zrGccCuq8|Nc2Rt!Vd!EX-nydzuTLFEXg0U5IzJ85+u5e88q-=c}XC2};(qz*7&P@co-{#Sj@cy^MjyaAMV zzrJst>}vfkTv>r%~V=#FfC;)oo4NTwQ~>!WD(ub$l`j^Bt^(LT9hk8fzgR42V$0#%5wxZei~kp7 zoC$Z^`X5V^Xl+{$w3>;$9xmpR2u_XrD8%IQOV%`Z7)Kn%7jDDq@5xy<|Nj<%aU`ah znrd?}G9=(UI3&Q3U4q6dRH7#qpCc5$7*h+ji=yndI^fnNUO>1g1{?lz-&yt?*M8zd z=~TV5mdO9dqLD3WLKutwqW!ktC{m3~cS<5^|_h#d5b zrfqX+1Y0?GV#X;+I3cV54awf&yrZD1&L;@5#}=x!6aP0#K|c4eoiuRD9l?2n?qYHc zGG^$Qr7t7f)x^>8Lh%pdkdynF_-`gwEGsuhQD(DU8(+>ltPL#S03-@FEm>v=RwSH< zbZ#&XaLfNHv{F*X3o>5pDl2W<9pgZowDWi2x7)8MWkL<~cj>z~a&yD?ygPyMr4=h_ zYZFj2u&*PHCKrxc(sqBh-e(KrdEbrzN`O7Q;Qn|cfwRp{lG%8T`KAjDPFC5tH$@Hkau z+5DkkgB9+-|2-{^_gBGS)qg zD|nr@0*)Ky(?0&RFH_k5Xx3siLnnAUtD5<|=BSS`Fp2xQ3B&&2;-5jrfZc(!qd3wX z)OPg~MyMH3Q2kb69M8uP!A{Mu(w+@$$P1|sK6|Bs^IZ|}!{O)1WjFezfv?sZNJaKA z1oFAaGT;J0Z9cY8XRvsx`uH^c?Cn9hVw_YlB zUDqeKh!%SM4C|}t)aL~?<)fM?R48aA1yvV?7TYZT8>Xn zt~?7me@DF+G^I!yrOcXK=_*p$MgKV%MS2oSpLy{)>G&8kiW2Rehu}HgKgutUis`(Y z0`EQyp$!+;F$_-P+D!PPeUPoqU z?uGIKNFIbH^tpOpJ^GiXq0G{q4w4utm3~GX+Usmd`cmEsT=U z;9<29`x)GpFd%ggK{IbS_FPQ`pUkzWt>@72`^QBq87ipPRn{Aevm?Dzr^iXi*37de zE2HT8p2@Jf%F7nnBCE}JQw)o^K>@THcEK(*8@X9T2LcH{Op#Q2p24CMsPH;yJShW^ z4XN*oM*R??sTPLTL)qi%`&TYrJ?YI>7ZhrK$L5$GO`-X4=t~z<1&!yqUi4&#k;xk{ z-L1g-Rzb?pgj%wmalD_3W`;V9sIn&6FSnm=6pLy`!k%d*mK4tn1MRX9t{w%QTS!m? zVc&?mx9Hs+x=|sr&w)<=QvB=&xLeooZU)N;^Yb4OR**T~pN9P&h&&ut8E3c^&0QRo zzQ>l~_z&y&3lw&tTYU)3-`6TrHALZ=ZvyjLDr|oa*BI{p!NP(fb#^_F(4&D&(f)5j zO>=MRQi$z}+vRE2OUS^J8a%|uDI{HQJ_5{4V=8Cok6%V}&&E;o!u9sPJdd{9yD zT-=j;&XIb!Fw0S@27*|At^rRm_Y&~*&v&Q2mHKV41-GNy;cf0x%kH)wkE8ULg8uBZ zJa4JpA;bBt=OVX3ddj>v>CP|SNm(S%P#WG>Se7XfqgzJkim;ak|E7Rt2u`OW%G`n} zU$~YOqalSk!#ojPxpZ^^j9$hH3I=i0Rl||R%p~fV&I`8W#GPIrw31W;M_IY zqq>9V>rQCdC;QeThVE-Dv9s{3tUgyOcZ@c>EC@ZQJD4n`sY2_~YYks_E_YPswlOv~ zwru9Go^>Q3rp@Y}Z^!x7-)z0p8|16s=EnN0{qKK6zLZSF(kDoh`YLB0t;ZSA*la@9PxLGJbTi@t62U@zp3S16Ofw z2L_iC&51Pzbws-Y!N@lKhqad|^jL1sQeD^J)8`$FWK10~UOvgW9Pwa-me;3aVWo`m z|7aM{{>Rw6bA^{XYf$syZ+WS}7*8_LM{j-Cn<@IPZ{gvCe&B$&Udu$OCEfoqu}F&T*dHs`mZhNtTXLdg1=uyFH4fp{+sX( yF=bSvA{SP*ZFBGHyc6P@`^fL+%_FbhalY`C@9^abayBzNOvPOgn*O?NOwzj$AWY&-QC@_uxSfNqtRdrUVPfyon9{goSOYJtv8}DE7-NOwQ#Y8e${9f=Sf6{&5`8E= zw0qm*J6ypgu8Cv=u7$MR?myqI&G=js|J^rcxW&mBLMcW!zRgf#Q$12hlNZw?E-AKW zxE)m~$m)uixfYC*6js~GJ)BNxwzsxLF;(hf{( z@x}STm^Hy5=_5$8ycnFQWZ#707OGT`1t6|-uK&8kC!cH@?QvSc>YdKMCVR3)QYnvq zT5O|L*HG{Ux$XQZg#IF z=R9tG$aii!6Ywd?p1>5H3&+h_w|tdViRp)T=UwgVXL^tRyyS%R)yHD<KeS6TGpN(`2!TKH%-1)7tsguFlGdjaRw?a{?C?B+aZ4{+NpiZ)A^sTyz)ho7Qp0fGrI8@az7IoSR z?3r*|lv|fHN&nxrME(Z)b$me8TPGwodlk~48ifL5Im`Mkj`w@m=(1wDUCpc{d1Edfvqs;+sbQe9=T5h)bf9rH__E-+?r5h`tCPGRGU4XBg86Y0n(mjs6TOL-s87 zu3d`~k7YgX;5Fm)F;SiK#ZF8vm3gr$VyHHi@E$%A>{0nqttTybx>^=sL+db!QOEKD zC~^sISStx%e9SJAP4Uo~#HtIyo3|tquDAX1dX_!ry~qlO_i&@>$MwCuD&mfGOX*Rwp%vbT}h>Z01Bnxg8Ws{R&=1)bc?nkK14B~{8v z#ypti;4(-9^!c&ihYuYQ5HO z+f4UN%`05=7X!tfmxCT5z1Kr&N2Bo^8cOSJt6m-ZihWa0tN$GgkNkVOp7zSzXP^29 zA*N|5UTO~eL8j(sS!h(<5ckmdu5qE{)vqVEuG#1aRK9=GQUFH_nQIKEwJeT3@FRCm z#MM3_a@Ix(e$yH+yMCi)=x^g55!5hqTpw(o1+iM``L}^QBD7-|g6@SfS;fd9UOv)f<7ve|+^HQv~hbwqUTz zH_M8diDaSW83Wy?{mNzm{vQ2~t>~^EKi59|YziPa=URBhoU$aCqp6(HDV8d^kZ-Ka zqE2>6{MYV*a7JluFc&xf^hhK;Zu%aVvG|-qR&|}{$IHG!6y+-{lmyY>F7;Tt-?)t4 zSVemwowl7lw-uuzqJK7D-*)z9V$wM&2)mZg|0XEe?3twIcD@s=q1CP8+C%}-#}oRu zi)&Xa(^C&FN!fqqOz=V%LFP!PL)T@&)NbVbYBcxukb8Zhoyv5qt)M1VsO!k3KSvq~ zK;#m>m-<;|jK?NC&8n2nHmfA+@Ao3jyuH+=2*k!4#70#b@O{4<|G+k$=WkxsfwuQ- znr}nkk)w*MEbmQkqI8hrLD~+E!wX`4BD8kaa)t4Q0DBgtt*$0>zMkT`B2B~_l9#Rre7XOZ1$Boo?K*1Pij??FI+sf}#Tr59y zMF*X$z4<-13dHnMAdAZvO1^4-E9BZW@Rww8k5kd?BPwMbHd-eg&Bv23kfEQIA;vN0 z_A)~8j8;BIn9LXIsCgxqjpA`-Yct{BS?ECxxlvw^ANzVgii;?1<|)k+hKSw;;~pZ; zLu#tt()Mdxz4Qwq7ljl2=$pU$@a27O^7{)6tBce zHrx2)WX2vR-`>GIpWM?aL$)mMf6G|-d(gCJfLcwfjh+Bb~d<)q+>pN-;a{Kp< zLERYUpUi%`P?^QLnTz19xne%;yTu#Ax9obr{T~#l?1OP#^rQWU7P?Q!ae_XK;1H$B z@KB6d*Pq+ot{EBW+{bDrmKv;nkzF=@^!@d#^wFsExsj%07JMxpMc1s~z%H#25e5|X zDKJSUu|6F46W6MYqX6OGE#|UmJj>my_?-=O4wFe_ZhNnBXN$`vrgjJLLziI7 zwImDsuM&ZhdC&qh`+?yE9%PL2+r_BU!Z42S&)0mEz^`cUOOZq$P`!VT-ka?%${Dfq{WBz6^%5hU2Gyfbaiv`hlKt40BsuH#TG6kv-|;!whWl_!Bag zX*nA3T|c(P>0Bs_=g?#lcvP`e4WxAJi0HRUKa?L(@d8lehzA~)@HvaTyA_{H>hDkcX~&3-QEqp1*me5)d!#@|v_UaYtL=_J|2@mI2m&rthWOy7j-k8vzKxwRC) zyuCp>rmbBOO&1gkeQ?P|He z$HSXiTC#<$>%+4p)!c7YpP|V>F&n;}UqR=qF860A5f2JLCshA!w;rfAEG&%2er=}vj@rR~eQj(!lU2WF z>vI?e-u2Q)5&zs|?6=|5a-IK5%-46dN5Dd}R|Lhs{F8a)K%Y#7ZbFUs8bUk~AFea& zt2seElr#8#Ffalbx9$tX|Xcunywc}m#l>{mHp0i^nx~C~?#R}xOvLCsaefVJb z+r%fLn8pVy5J6qPKdc2ncI`o%7>(=Bs3T%DXyHB35AP z?A==7#{Bk2;`60jaM=2iI5p_9Z}N1G)|OQ*tDv&-*Z8<9g3@+(cX^T|w$UCVShF^I zXkqWWP2cCocYPXx`&~Jm9F7i}!W<3YkVd%jfRmWe=)Li)cnOLaOSZ4N-lD{$B(LHD z;r4`k&_9?2A6)w!=w^dkX(OdLL8fOSF8cKinQ8af;kQF6-+#t;!1`r746`OJyVBNs zu!!}epZCu$x#~tr(H-xq!1|!LRf%*sYe)Fu`6Rqw)~3r3iulTm3hM}fX2vyx1t9{4 z(666@1ZrU>UekS+4S@)B?itD)3;c)Fyxa8VtN3>SulTb49_quwy5Ao@JH6?L5xD6& zAGNfUXQ^HCwx_QG(^k3hbPy9W!4IFVk8al=T76gitet-98FwUEH@^hwp?v&Q-#vJN z6uco#`t-NtSDnW(3tebYLp~d)YEwnmt}Ah@+~MI--*NKy#}d+;oBqG$C$d`hGc!pV znn$^S=%1Y zO$Pp!vhUfMa9E5ai4$S7daZ2k#>s`bv~9#X)w|6a2U%qq53N^;_Ec=2ZQaL++p_$6 z+VT~4WB=2C=-}+%r7iBjitlpV=e2X{Z*PV`9_=nD*;LehIvU-svEgl?y9S#9 z0ct^nY$nB>u49o2lEI?ck=|=0%vPuDeQGrOc4{@ced{yE1)9UD4Qp8N9wc{b*Ma~7 z%V;OxA7a9@6X6G<*Cyv4lOJBfOyEHkKrVveoQy5llA)hL4@eJw;;n6MV}hC?ZY)<; z%^4=Xrwx{7-G0YSYgSco!(E{B0e2U^+6sfL0Oc7xyI^Mc^d;rN!9mxlXS(8jOF7)| zp(1j_@E&dm?LXY=>go!X0A85`@bq_ZzjOF`{Vn*%dWuN;x{r@vB~)t&e&=x9a$vT4 zdwo0a-ZW+y7T9t{n`!ynA`VCmHL@>X*TB~On$t7kXJZRMr~d(gz?Zo;Wdirmwd|Gv zI~xfO0F-xV&Ktu@ivEcnD|A6mPatBwE32Y4-ZW-&y{-YTYG6ps*ap~ZS*P7}Uwv@VhVJAU4QHv+`uD9Zejg?usdYl2sA3Z{CdmmG(MT_vmKHso~y zuq!7yeAERz!;V!spA0xE{DKWSFV3?@yOEbJ$O;RMgn$KTOd*BIX&66Kqnk_uggE-2 zpj)}&4+}@L(5)Mr#_XOaOoEv3z)Mpe8rOc=)QTN_0ncOd?SX}hsHiBRw7Jm*PIJ66 z-=uC|ao{Q$=SFn|=$P;G@|vZmwfQ7I#T!8@Xa##YAX~HxcT_?5I>oNZYX~K+cy~Pv znmNwKhFhk06(=QfVFBjm=3$hDg!sagko1>;ni@V==L17k`_&7?>sCAzK9&fdpX_b( zd3M`vay?n=NMCL9;);YKM@L6*Tzc=-!^Z&~Sn(4)`yGgI+rbd*0slOB3;qT-k%tu; z!!@t>6C_N#A3lPsX>l-G4z@=ATbIo;qK+;K^G+AHH#ZYYOTtyqxN|wzGYPxSt$g>` ztX+^v`o%)Z&|`(U;=SPKYf=+q81NixHL3;lbgXxE@2Q4C9Ua$NeqB}fAC&?+(7Q#; zO8A6KVC4qjcRowyy`jNF(&c;&+MG*ohP@O(b$$-#2P^{t1_g~ttlwtyp*_%PBj4}0iD>UwmxWvlQu~`! zCl+puJ&go$3fR~wHg5%Vi2&?pA%v|g{|vFx);_ZWTU5DSW;H!bc%0g=c?Lh~NLY@{ zVSaAdBPnqgaIm5%sQ?nTx{@QpI13@pX|%9oOW4`DLp#Ls=Y8jVcQFiQu3|N&sI>j+ z2nk;T%J0;^W_FdFY-hj7uzg9g?HM3#BIS)K)x#7HkI0!m0nI%cV?{yh+mD!rBypE{-Soy5DN7l zxyyh$pmso)CjsOD4;js>c*%He56hBtw@s7DrB8A_80}sCS*pV99Bx-25~`qWKGBOp zg8S8~^nq9~DqOP)D1zejKG?ts)>m}~)@jbZ)v2VA1(ZQw&!4kExGuQfNgS}c$RsSE!Z6{@PIIZeF3m{ zGmpt>K*<&KXStTS>O({vn#7ppAKnQ^N9b+?PS=&&SOHL5^Jl_jeD-^ zRDf$Gy2*pL2X$jOYM$uyrE7J|G%w!I#9K?Yz&OmDP9MgzPCA5t49^Z=VHBe43c{q3 zDKFn=yltSeKVu3$vr%7fkCW(Ni(op8fJzE{DPMJdnUhmG;lHI@3QfKoE*n9(w5GRZ zij&j6@kK>x(Y*nEK?#WS9Gla2pNlU50=8Ipcy&G__(-Ad6nPpKJ{Hkf96CA*ED1Qc z5mdqj+@j^Idj>66V4?4_`BnrzZApY!B*au@rq_GZKZB#ENw<`rxYv9*#@xWHhlh7H z4o}!gI?M!poR5!lTW-FBSGp;1dx$s}sGL4hT^B>OxPP;!+6-M=&&sE1M+;cE>T}rF z62Fc~KSOKof}ib~j3&U{cAbQs1D69${I1h2K^M%)U5C?yTpiz79@F1|u)cj$<|C>g ze>IEn%+b9cW@l$#zcS#cHR0j^wvCMZn5<=|f=C#k)x+GH8bXLXafyx{k0HDqTB7q9 z(t2V>n~cd)KI*m$&_wk21G2jHjn3_@oLulrTce!9Vf@;belaJgQU`4DO5j1QrvETQ z0A>#v835^DnIMAg1?4U?B6+N?uFlNNeEZYGv$b8<;(4<0mEy&o?{h!&ydDh7%?+X! z@l44s(NKL)5##!BvDpsgSp{$^J&Uc3=Ow0}*Ef7XkvKF@&C80Zfi9wPO%RalKM zs!#CymV+^HT8I-Hc)C1S=c#g<0jbbQMA&8XUl2ohLgYU#Df+YHlbz&T0wh#069F{} zvoDq8+4KHoB`2r1@%V^I?Lg200lBv<_`8dj(o3(V`ip`*XT;IJI)x?QU+Jt*m!(Jo zD?Y@xvy{jWz&-rYX_{vv%)lwn`k7@W$diHfmrGBDz~#j>IOP;GU1YJY;n(9)OwkqS z-yZ+KYP%aXViS>+#~{nTzlbB)*djmqi9UxcC)iY%dY)th(jZ<*Xr!pJZKF(p81ht&WlHsN+#(P zEd8A`0MgDB-5x43RU!6rdcHEi8j=^-pnTbRo%seL zlVYFP;CN9{QBj~rF%J*X|!W^WN{$kNx(XynIG?1SYL{Spfs? zA^-cQ#d|V(@rLq@|CF>JE;>~Yv00O3w>5R=PxolFEGbejd)aQGI!*RzVGZG1ZH{DirRHQ||@MfY|d z=63yft98}1O3I%Iq+ntGZC^s~D)u_vdgNMB-s%0oqYCdrjZG_lo(DE9kIDpGpUE7@ z1t$gCk#O*l=z6f!Y37;{HK%anYV#NsnFCucBefj0wLk*ytBUnr?{U)=N6HN(CMvw@ zWsgFmBx1U`&3nZRM}v>=cjyF*e0__ib2uI-x<5#C{|=dU;JEPyYVe+q{ZX7z7$SOq z)JSXmaWTGl>b4{%rzAc&3)3n#HAQmlAQguwBvQf;@@M9SY$WP{sU0st(~(zyO9+Kr zrMH{7m;~p{7%58f^Jd1oOn;cF1F>lswdKWTNX<~!g+>*biE9p3&6&=Jtnuh<1@c&- z>=%%|hi(p!6@f=<+4cW`M9ZRwoDypfhxG3UZ_cf|Z%B?`s$k+>AcCou<&y+I_rE(z zM>@YDX6RP>I?#&mYdqk8p zQ%TBcvPg`q-Da0k0T3P%)@`L(v+Mr@kiaAGS#2b5a?~}xAKOz-PA*I%r>!l0Zcg_X zwTNX>Mn>$d0Ke+aKS9rvl*3OzX8>%D7>;O3u6d3R4osb$31SDNWMuljU)~EuCo1(h zk=w0T9Glp}{H~h(mwjxH=UlIPmq{SQDvYLd1cRxJ8-9=fiVR7qLEK&PkxqP2yEpX76+2_ORaJ`xfg zl7jR{?dRB;dCmHOgxAGfVIIlQb@64Kt}&7M%gYYEbc<&kFMx3l)Un@uNOp@88Zv9oPDx~iCNsi+B3j2Td^>RBqt{sGADuBMy<=Yf)o5>WVfHC$fd>I3t0nA z9`yyMo?rVIZgB4su0VciYm~omCK{Syr2?S&?KKr%^VW+PNy+?n!|bMfsf~?~&cYw7 z&$mYxNjf@m-qa467~$H@m)_jj);GjljZS07D^Ti;7-?%q(?_-v_BaCbxVRo3)lRg2 zkJIYfe<0#GGGpo(6~)c3vG*;1o@kl&Ft2E1)cqO!4_QEsDlBHc&c#G2s-&KBxb;Io zX#)K4p{ix~Rlwz#(-dWtg*O^`_3QM8nq1j@Vh?Rxas|C;u7bJn(8(;Zxu1+Y`~k

Cf$-^jy?}xxTrc$;fr*}J*h%L9?Ut&G7 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ΝJNR$N)(AZo%j`3L(hUKc|a1vgkQG6lx&w%(B0+x;nnn4=F$$ay&pl zKrlL^qGN@eIr8l5r`dypDxq*rnok6?Jy)o|3@h41iFC46@yjsSLz{oW1gF>*` z>^lbg-^tv+CRHqj5A&Z)0!Cz@>C94(cB5r(4|rJ+V-%zmM{nQpodEz>Du8jJFrYrJ zaEKh}nMP>V4kk&kk_RrV9>=2)<`cDljQ-ckzf17j4|RBvz;Gf!hGR-4xR*nx;8 zip;bQjY-ZF4F@!OQDg}|SK?*+>onaGl#x&O60?|pdlhVI$yT-z5y zO#g1yliP~~T56R+UW__|pWeP=PWsA5k%;6(Ub(9zijwxzlItMLDdN+SxCF5ZAf0;5 z=3}4INsr4h?WYw(CY-+!dtHjMcE|K&NK^Kuj>%nw^>yLR5b2vuF3VMF%kc&%RwV`0 zE4(FJMqPfnLtGD$QubNKZq{B}*4@dAz|jBYoUKDSRRL(i1U-gHM!onRl62)CK42JU zQTD-21{1_x_D3hCNo-vFr5*!urNN z!JM7yc#jN-O>L9dCpQ}WQ*mI8n4Pk+jFajty|m={v_%1{sO#w<3kr=tkSPQtn|Daf zMErw{);~au@}!Q;bB*#Tuf9kU2$4jd-3+KKU*cR5{FzAsQ-MX4sd)cmF&WKEO1lt5-JfJTW8}8? z(ONu`XWlWln*g+dBgg>c#?f&Q{2UYvthn7i4kLWSFp7f{qH?g%9N*Q|6^(?1igs6r zOaJ&5(#Kkm_o%PIW}u!so>?X7r7?xrl8@dXm^=O^nlE@qJin{X+sv+dBIYAkf49I)N z`!Ecj`H3hsNJ;IJU8vjv{nwILf50&d>F%g(FESEo5W;S)ixBV5lfJ(rndXGaRRJkj zDMRGdjj&fbGQl!)(nJhK7ldp8QTPdV*_QgG=)W09*fW4wc_-5m9Nz?4&F=U{_4f(U zfhithwc1L&<5HtMuMiv?w%3*UIP3$+6HaF|quNK8w4&GzlB8;B$3(VE+;J2Ndd$7Q z$U2_CBvU#yqTjRYekVU|8tcHp!ZKWy=$iM?A!CWD5ih`-U_{7M6512U2~4)DeOhLf8t_DAe9Y~8 zf8~5kRE=YQb5R6~m1YB@M@KP|LPx`Z>x$Xem`2^*x)$>fnxVt5q4m1pkDm@Qv7Tlc z#n*CAmjBPh#PcP}6^2cKgRc`xNxJ{F#r?F&Do~=i?Oz|atJ_%as0@89Je)L;*DPSG zR+*e1IvMevVoPcadZ;PBvL~ zd_ma!mfcwIaV6pr?9WtFP|+2vx%m@iqv4wMEg@~rosfjzD({anq;#`0=oO>r4w0y?$@*s!WI1{i;XDGjrw@7Ft8p({|Gnm?uC<8oP#Ex}Z7gpr#*_6ddfQ>Zyg)7IW$P6Y zU_JQ|y=!oY`1bW>nn_`Ai>6@t=|eRcoT?XSMv~whet`N1*0z@BNF*)r)a0SmmcVP< zyweP|k?6iNg_I6(rtN_)wIcjzro3l;cm-~;*k|2*gYo1$Y{cLIu7fZcgO2Y=BBLy& z2BVMd?eAAttt6g4eG+)?FpXc&J;IW%Ml)cw-k<2Q)F$FW{~eZ`oP0LSRj1z$!*;^G zxaOKVF~mTF@2GB^a$*50%IMZ@F;$@{Ry}2}CCg=(vv`G>heuS#ODY8ADIB5`s>0V{ zcn)omuR?7CdUer%5IMvtn!2RvE6Ptv{nQCN#ymB(Ht(B8)zu%%Ec%K?oMx#b$GLTq_)dZKbGs)3sF*&4rBp^qsu3rA#D#1 zrMhW z2lf%7c<66`0*JTDA3lBUTV+O4npm8+ZVxUoZvSPhD+UG|N4KS~o;1$yC&(xDi_Dt! z)O`6fOpolMKaK&eV`#)ZLLsZWTgT0-g23HMPSlTgVnX8Ls?bj8;PCdU{V145CM3VS zFhpVlxiH(Ie4%yWqUNeQls4*HKAp44aD%^h5FWmW zArz9F()xxtO!21Lx=7BR0uC$-Z%}$*!}~Aq2v3$)u>*p}6*6)z>Lxqj)oaVtH#jmU z(kjAKthXrPNtETQ_r)HH2(P(vuT!)lkurV*AGLC8?-z#=)5s_%Sf|SZFu^xxLgWGM z)c|zpG~DJiVKK}h=rK`Us9*+t?CSuOvFcbAEaObUKo^iJ+&%@-uOFdjHp4g>N1neP z4taTC%icPrIw)?DT5Vcu6)_oeV9cJ@{Z^zm1G;Uf`=A$_QEb-{Nqn1ttmM?A+U>qlOPTO^TB zjq|{nr0#nTTeUJ<%HstZrb+fjmdWN0{AQ(oZz-~3V(q6mXq#TSEd?(UJ}Wb&VWx)G z&R1fOpUIPl_MH;S6f#mxIet}s*RzZW#87e|prI-jK1`(^EAkf*ykl+oJu#Ca1E?<7 zap%lBWd5$3IKp0O?(z!_yyG0emyR$%PH$m9q^BpuSlj$`xm*#Hh3EU7~*jsQBjrrPh4BOXMj97IM`qOLRhqmbq&Eo<_f6oBnqm- zdEj8|I&K~V^K$>QhGcCzz%}xaII2>uYs)trC6`{QMmgZAV;lSSRZ3j$Mj7M#iJZ~J z3Z1Zo7?$c*I`#*uX;6?MJDE96pB=+d>Mxqna5Y|O1W=s%0I}H!E!1$c%jy0;GBh)- zAZFT2=t#Us9(znr;0k_TpE7F@h{5%kaW}0lc?~Ta<)VKm56^(*_8_rk?2e{GDVHT5 zjp=K>qidU52C+IY_`3QkdYc}YwXcrDe9=;~e|F+0Np^U4b(JmC2R7YR`y6Ce-@Z8< z8^<_9EEnF*7e)yPw=E6dlD$OsC`LwdrakgIP!26s?$Y7FYm?0{A)m%L3r4EbGxuVvkpTQtuI|Ff_)OAAiJdk3J$}6? zU|BHss&`PEywwAVzH`7s6t-%^ToI>^Aa{f$8*jgPZnUa@e%e2XZ^J@@`-?99T0eX> zTY2udO(f$&keM%mS&hW`wXa@*Xu~b7^`7;|*)JX&F?{vSHr~y6odnV3MQ2DwLCZ?@iXP{czLL#R=% zLu(*kXI_~n)in!=i|F1Zbb@!;Ol{!q@Tijg?90+BU2M z(KRY?hDz9CD`MF!L>?kaW4f6_O)2N?@2)_HKWknZUFGh8FgH3*{5$qQ2)E2m1jT?e zF*G1b`n}fK2l_jlP~c04uc*eS>S`|Jxny!(@PV@d(s||++P@iTD(%Kk^47r!)1!kR zOg+B?xG4aCEYah{!%k6s7dM_;BiX$&{C1OzRa1*qLi~17i1Vw%a{xUv9WC+aRfGWu z3*P(I{TaZ~1>cFl{?lk!+|T)d{`}h-{hJqB==!hFFo9|?@gs^;2z~b%osZJYdK+6A zJ4q%9nPOP}J67I4;?S7ROKv=^2j-#^QW%RrR@F(i&mO0kCp(kO3alnQKgGjYP4#5s zkO+wM;Gb}ecX?^*g3U=)=4xYYwW1AEWFjV5dMRO8Bx&5;!wg7hf9KO07cn==O02g% zjd=2zE)l2<6EJD{sOtWVIDUXgp5N;Y*{tuQAWw82#|dBG$MXJjSwA*%35K%7Q@?A? zd+&TL!&eaN=0s*9Puy@d(!L&lPz(H%^5EuiawdnpW}8L2?cd&sv}-BNw7s>tbUJ&` zj?7$5{{*|jJfM!C6~TwJ%T%OysoK-b3=5Lt=o|)Co*LZ%&Br~%hKM>B%XlO1egi}E zK1hG}cYj~eVEQ-^x{tz~7Q{@6Ln)cu6!;>A&Nu($laTqe`%J!gA_bxsx3lrgIQ{|d z70#6Cn%L?sFqgLUmB1CeM~t@0=j?wuYuc2?(i|MmF3R<)WK%I2R`GBL(o={&n(6~B zKCKDb&Ktvc&NHf?`^`d5&*aT%FJVCybyFSrmw^)dE0ng>Z3O?Wvd_M+Wo^+|J_wSc zy<7?05uDpTOU_chG=+-|gvdm8Ei;?a6~KYMYiPxFz(8ENN#XDb4A33ReBVrMy9`|C z>$eQ=1as{Ra3g*fncE>kAxsN!|KwcfXW^;gokTs4c$I<9Sy#$+&4rKT5k~c0kJki; zl&NG&NsYi+&*=D#GC(u}ZK8Xq8iA-kFW!IO5j60rzP!NZLL^R9NXt5FGCH!a=Cs#H z^pO6bg8hfJRL2Gwz&H(&&UJ>?9V_rZ7wVrTXI@r^NTDqXap00_16gl}Jgs#xNvXB7 zcK8DaCDMB{#98a!GVQ50hI7-f?OT1!1>|2$Y~tuViDP7SNcWX!b}R8BnDS=-szjow z5HirKZnfh9Scg1LrXpD#X_aN<=aVO~ZmjbDn8)i`b>C=V=% z(hSJqgz-A|wtX;a0e<|dBsh?Av_5%QyJ!7u?(=1tr_@sjX3U0v)4ar@ZhzL(&?RCX zXgL+2gCz6OG%Z2IVP?6K9=X=65l%Q@p@P3i|EP5Z@J7||e#8uSeiM917=Fae2Z{ze z1Me3YLYi-^ZmRFbXFDj;Sc>-~%+1X!sunyX7h8rlz4E1kfUG}%EC_m9ZBf5Jn_k^+ z$}@*xc}T|QSL!y}xoG#3h8R!C4=LlsMsB6>OG*;r*+n%%(Xc!|=0sC8By9?cC;S== zW*#)L*7HgyZ^le$FBds=&)Y{{)=gUxo<=oI34Z^6dI>!}eAW{~Sl23b{lLlXsL>Uz zV%qBH_g`&g0E^=%muum;j22H{$O0kKeKBXfC6^5BJ1?A-QEu;B)E>t~Y3#$vKwOVm zbH5)AGH0Vgzx~$}tG9si6AWBoIm4V6ORt9cy&9gIH6C&5DJ? zh?RRtAyrtPrN155T9F6`vxupQtt~e}Dv24FOe%@n*tbs+b2CS538$*+!!)h0 zfJ++Bs}!2p=6Bz6$F%i0GoOo)t28!n;}3YMxvH;bxYG1=b1x{85W6fYzs}^ReY!#) zz#8*uaIlJi?$hFI+%aa0&6M0)$@P!#kz_HKQp9+D*5)W!GuP3VeNdBq96KJr!&&E1 z0yfuC$njF^fzyeCuM<+9>$chPT*DP;0Fb$w(UcbcVU?8}wH>!k5SJ_C9yESNBwz11 zRrX~0N$369{+mK=yVlhO@vn~A5NMn)spr;O4t(8ztd;q7)daNjkw!U~J$B~!n-}A1 z{OLgdAyxAPGu7)M#W+0W$FwFSc%_cn7kg{x_GUh4>FI1*W^9%o_D%#jK6SC)!0MY+ zO6|;lzg@=Y*wnEk)==i&@+rdO^~E)P$T%~;voJ44_zIjP?2~2t^xa4lPqL)f6FNAf zMPWyJgQnGLw1}#bZO1Jk9k^qtj;sTcUd*RO(|;c?JF$QD;%GZbNK#Iz6f_nI3xw`u zlXblo_KGL;Kb~Pa5-(-uDZp2CMt%Op?DW3kG-fT=TXtfm(cy?vs{IZPE@<#BWq&$2 z$dV}h-lUuljeV#hOfZpMxU1p+wg7AzuHx z?$lM*WLcz&C#L#DHSxY--cq zaMbx~*?qpT^zdP`&2$p!%jTOdzBofdT3Xust|L~KobbK2^NR}uS5k*xv%cn$METOe zd5P3w(evn;I4n0%>qa+pO&o2g!-PIC-3Rr=@VNNhjM!bl?glmLdmn1mXkzlWnKaZh zt5o#8b<9X&5Pl zem-~CeaUe>yAObu%Gm|4uj`gmTJOq8f{%k9S6yqv*90ZeEUPS&%K!H*B#-_Kf$|L=Koc7Zj0<0(I4-TIsT|uFs%ZPn4nWbs^%`x=@br*Tuig@Qli@U+B`mx z_s-hTn;W41joQ`2z~ZWQEhh-v{N1Hc3=&0M8f=2#J~k!vN5r99D^w4|Vm*>6r zem_n!b7m%)hSqs!N@>a0*vhj3q_jYh|ML_V+&CBg`J!v6~ zSr|=|V*vJ6d2a-iNm+YE2I$2op(Q_WPL4q!*wxL&Tq-DZy{8^!XYJVM?y=x`C8uw; z-n_eprlnPcE2k`Zhn8Mvckbjk%fi*okI70Tng^6U6XtNTtyP1m(CrOIZrpuA$c<+)(O(Fd-u_okeGI zPT}}Xj&Q3b0z!=0oi)91fL?X}NnF{$%G;YWXU1aTjvKeus6-z-uqr*6r5S|U^_ zi>Ck&ftB!!K?=uU_=my>D-J9e?jUL<`9S>a4NqDi^ff!9zT2(!cUeI4xVrRMPj#>1 zkB$$L+D+g6E78;T-i`WJ(nHnBexccW3Dc8UB;v$gWL>sU_rQT|^jO@f=)0ETOAcNl zdBt}roH4V~$?-KUlGZ1Yk3DkJNF(tHOBqwhdul5toH#GCM8qmTY>2`(O?VGYA>8X%6a147$HE8{_w>y zN^a_T1|#~1j7Rc&j3+^%{_3g(rEjmj+k`Ww3iTQP{4{WgTH5;1r`v*x{UmG`V(Yl! zbY(P5amD=^`8t&4PSF{D-^bY^#ew$|Kl8%{Dh(k~+lAX{+u_?D#~iv0cbRX}p2of? zhuAjUeigF}Y0tA5msvG`;j9KUW`?Ewi^Thtn{$6Bjh`{sO{}pRoD7JZ@z;*%b)M(= zW{>??#@T2ZC+3{IDMMytJnq`3QTwCkvevMxc)IdxO%wF1{>mcti5&(WRZG`0 z8tf8%H!Sq>yX1RnJk~#4RopnDHsn$nc;+GAD@u`BliG8Bu-GsklbGIE#9Ej_v)Zn! z-=)l@+oHUSJM$-u3j|PGsRZJ|cXODXN2I^!=mSUS)}P*X$=H~Fv2@%CQ|0q`y8nn| zl^V#GEo(lg^`mC%-Fuz@##rH`mZ}SCCCv?yq}(1Sa5n%_0sp6-~C>+p4On2XA22L zpH2|cC9PMdPXGG%a)`6>-wZ!g2}JCSMpOfqAiWlDEAx5IBmRxWu2ZXt&XW4K%4Q3g?M?hu>)sDp+*# zLu7~CR2z5qclL*cx0tI7VfKz)zfyNA{qC&tRerm<9G>QdzUTA!Jo#5g^yHtZ&;;iB$cN`Bhh+@l>x6AM(pyZy zk~bQ;JsST|8YF8~^34pFv&sXA{0ViGbN=ZN+K&_VtK~)E&qr-W3|KQ7w{RMN<#O5( z`W~|XN9^Eb=a70L=~I(Yy6rajLl$?Q0BBDFH2rHM`x&~HNGEF4%q|OPr^S>h#t+GU zWd%F25H@H`AOW=jw(|uAvcl1PVAfRi(DMn4otnvyV)>k#9%l7eT$P;jaAxyPLX09-zz#uD0qYFlVynu#EV|V`5^a1SfJIDywR?<5~0l zEvh%pe9HrV;Narsw-&%s@o0r@pp!8h7}%mKF9*Z0fb5FTRQ1mlVhF1)Hq_3?{5JP$ zk%50g-d$V))haNoc^5%1q}AY&UxHn$3U>UC9nVx4&B8Z#=so>^`(g0|TR*Bfzc#+2 z>n-iHWe;(xS7n@a_UE)^kwW}Y_SSFw^>0g6q-UoeZP z%j?HKEhC|)Du%sWtzILg5BsMDE;aBDzVWF&@T6Pl00Ke>0i7X*?11v)l3FBWKXa8C zK^F`pQzP&SwQTgtv7$u5|DdGM72=&tVAFj;7)(!^bEVk$7wxt8H!Re?vn6IcW372Atl<@WU2 z1C5>;=|C^^GtH+?Ha-&UPh4F2#|>GFQUkcSw9@K!cC4{@w4dzlf1f%*Zf|eD$-sB> zn;}v#$c-ett-253{P%9=GpCQ;@LwcE0`MAN=DCArZNSPmV2Cr9Uq)fePPHD-XRRO}C~Uw=su<|m8l75Ob4lUz z#QAtl<@(ay-Mt@tU=5qDX)d^f-pnSX2<~khO2Ff2Bo>bmO-MD8^4Jo+VA1QfNXV72 z6nd{w)JE6pATmg%ciyyx(9wluc3J)1g$IIw`sVj>;T?8Q?K({@s43-a+x|ZxgunpV zTi)=0KZZvfs}R)}V8DGw`Fs611?%9mDxcYff=@HUnk_DFb}KD3zNhxKLkU?FG?ITz z(SO~d<8GSbmZyYfW=w4Cd>q#jTe?PJ%>j)Z*;ovT1`=9*C-0B;sHoD@M@NH^v zF~wVHX>D|{VZFO62QM2Mo?JA~j;^@LdwHdUU_rD4jBAfC-N2%=%izvhQmUW!`>DQb zTYg1pS_4xg?I_(d&HO-!NeXpnQr|l3PviU7>ES%OCXAj92O7(oY|7iBIl?s759b+X z9zzJsrL1DXKND>xkb|LKrGq<4%3&!-$Gud)CF5gmzuh>WW&a+^IFJFrJnhZHdixxG z>i2#xEH6)uSpb@Y{nR*2EF#cUcn=WIzpw~xr-&^G^eg~(cocAb0$O$&--f>UeDL4K zL}*zH_FDEo$uw*@+s|3@y_w+jYsYsMzA68AQ2g&;$L?V@BV&Ucw(;^}7PzfI>1INL z@a?!L7iYN4&3U*&$Rt^#v#>Dy=_$~;T&v9XQfRp39(a-8cXM(Qp#1Jjn%J7q^lhr1~Cm#<&{nn06?4i5@|{M69f;>Q zU`Jq}JP1z-EK`isD>q(HrWqrmRK(uSYXPoJe)mWI%bzAJ=!sM~zN7j+Fd0g#!NR zPiqO_a#%}b9Kb%MsQJ%1(ZQf zQIXyP7RZ+)@<5ch)c){6L`zC2Vg?ZiOw4q8!05W&R)zZRIh=oUCj&m7ItX~In$sSR zRlcVzZ-x3u>w=qdMF(GJt>-iX$0tAx(zgJlyaO2!xb{hw>|w36^A@<~USoS-cl8X} zzi{2_Sh*;J{0jn4cHZ_>#KS&qYyCp1TV#b*>?9LCJ}#1{H1L1zG?RS1tDO|>@qmRs zF{Cv)!<5?KXjHC`7&iL7I%Y_ail3x-Hgs4L4wI1UobPYv>qx2aC~Q(501g;SVwey* z=;~5!Po||8BGUfa`)@dm46r=0;0$eD$KHy zZJ`O&Th`o_uiMqYocDmjN1Q#FoH< z(oUC80w{m7V2iI#Chx&is=k#C-S{W4xpzT}S8nG`F9#B_xE^X_fmxUlHB&(|3k4?2 zJeh#(^ex}_;aU<@Bt#69MN?gY=#AcUu8#E2lmnn3H5}KhJb)H7J;(u)8LNQK1mEk5 zT$v?|115yM^>Gv@co{JfzZLSsWIAj)w4gg$i2esK2}A&E!OTkxnkM?4l$G~23~r)hDn*aFt1hBtr*kvFQ{$@YTkY~=fySwcM_7wr9o+SFu;_i+^#5;XKsHD2=4>OZlqy%8mq-hMR-+FjK@10oCi ztbLvRkX>nlW+#v5Je+-_hd-gWR#z#cTeHA4TJ^4vIbOfQiKd{r_PX3mrVee*gax)_ zZP8~7Ihk>q8uTu@BmQ^iO?kpH7w>Nt)T6oPm?eRnAphf0fss&@&&{Ah$exb9ZrXo9 z*;*Kj=!{&mvQID82YUxR2tpP<2&~g?rkjd!K!*~*lR`9>;JvIIw78|D)(-*994t?e z(|Fd$$KyH3>Fk@9yrE}w{N&iMD@y?y&tawPiro^|(+Zm;TAKkLPR?B;9RZupBr%;e zpz+oEO&Z9)&P@rLvx?i(+K2|WXS|*sego+>zOj&$7H5P#RF1U)eqkgoT-EkY#_yq} zAK;NBVvHi)UG1&?NJUBcZD>_2IkVhk_w9nDaesXxHNS zjzlr%)d3Sqc+g<8a4w0eawHNI)6dK753pf_3>OuY5oGB2^knxZ;SAV zc+9-xM)XF75e3!Qz-+W~3K3#*U=x0;V;UA+IAJ-`p79hqmQh&bXt8%x&^!%OQ}FNP z*Jd5huUjl2!nS+QKTW|0dQbC&SP)b9kQg^+3`eKJFl%yZa8-6z}%(E81@Z=durP`SI4Ge_5z=N-tAn zoqBhaHTClE3Kt9DP%*qe!Ov|-ulYQ3D}>T2Ah|93C0#W4Es&rVWZb!h(p&|dQ>V$Q z_^4S`=kgR0AZA|CzVs*i0DxWQxV{)amM1;^8L4~AGs<-D%KGyj6doUafbB-P=@HPRr3F;9F}LiyZdv0lV%~k9OrW*Tpf0H zt5TiQYP;t~3!Ls0q~cuPRBZ=lqHHs<�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 E0sZ>^-~a#s diff --git a/paradise.dme b/paradise.dme index d87c2bf23db..14306bb981e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -734,6 +734,7 @@ #include "code\game\objects\effects\spawners\random_spawners.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" #include "code\game\objects\effects\spawners\windowspawner.dm" +#include "code\game\objects\effects\temporary_visuals\clockcult.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" #include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" From 8f26d5b8b691eba43346b19c62ee5a33f12f6383 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Sun, 11 Feb 2018 03:20:38 +0500 Subject: [PATCH 09/32] rename __DEFINES/mob.dm to __DEFINES/mobs.dm make environment_smash into bitflags add obj_damage for simple animals make default max_integrity and obj_integrity INFINITY for non-defined objects, until we can move more objects to obj_integrity/take_damage() system adds examining objects to roughly check damage more obj_defense.dm procs tables can be attacked with items, glass tables have a narsie_act() fixes, changes to make it compile --- code/__DEFINES/construction.dm | 5 + code/__DEFINES/{mob.dm => mobs.dm} | 6 + code/_onclick/hud/screen_objects.dm | 3 + code/_onclick/item_attack.dm | 19 +-- code/game/atoms.dm | 5 +- code/game/gamemodes/blob/blobs/blob_mobs.dm | 5 +- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 1 + .../gamemodes/miniantags/guardian/guardian.dm | 1 + .../miniantags/guardian/types/assassin.dm | 6 +- .../miniantags/guardian/types/ranged.dm | 4 + .../miniantags/guardian/types/standard.dm | 1 + code/game/gamemodes/miniantags/morph/morph.dm | 1 + .../miniantags/slaughter/slaughter.dm | 3 +- .../shadowling/ascendant_shadowling.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/machinery.dm | 15 +- code/game/objects/effects/effects.dm | 8 ++ code/game/objects/obj_defense.dm | 89 +++++++++++- code/game/objects/objs.dm | 2 +- code/game/objects/structures.dm | 21 +++ code/game/objects/structures/girders.dm | 4 +- code/game/objects/structures/grille.dm | 40 +----- code/game/objects/structures/inflatable.dm | 2 +- code/game/objects/structures/table_frames.dm | 1 + code/game/objects/structures/tables_racks.dm | 128 +++--------------- code/game/objects/structures/window.dm | 2 +- code/game/objects/weapons.dm | 4 +- code/game/turfs/simulated/walls.dm | 4 +- code/modules/fish/fishtank.dm | 2 +- .../mining/lavaland/loot/colossus_loot.dm | 1 + code/modules/mining/mine_turfs.dm | 2 +- code/modules/mining/minebot.dm | 1 + code/modules/mob/living/carbon/slime/slime.dm | 4 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/constructs.dm | 4 +- .../living/simple_animal/friendly/lizard.dm | 2 +- .../mob/living/simple_animal/hostile/alien.dm | 2 + .../mob/living/simple_animal/hostile/bear.dm | 1 + .../mob/living/simple_animal/hostile/bees.dm | 1 + .../mob/living/simple_animal/hostile/carp.dm | 3 +- .../living/simple_animal/hostile/creature.dm | 1 + .../simple_animal/hostile/deathsquid.dm | 2 +- .../living/simple_animal/hostile/faithless.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 1 + .../living/simple_animal/hostile/headcrab.dm | 1 + .../living/simple_animal/hostile/hostile.dm | 3 +- .../living/simple_animal/hostile/illusion.dm | 1 + .../simple_animal/hostile/megafauna/dragon.dm | 1 + .../hostile/megafauna/megafauna.dm | 3 +- .../mob/living/simple_animal/hostile/mimic.dm | 1 + .../simple_animal/hostile/mining/hivelord.dm | 1 + .../simple_animal/hostile/mining_mobs.dm | 3 + .../living/simple_animal/hostile/mushroom.dm | 1 + .../living/simple_animal/hostile/pirate.dm | 1 + .../simple_animal/hostile/retaliate/clown.dm | 1 + .../living/simple_animal/hostile/statue.dm | 1 + .../living/simple_animal/hostile/syndicate.dm | 1 + .../hostile/terror_spiders/prince.dm | 2 +- .../hostile/terror_spiders/purple.dm | 2 +- .../hostile/terror_spiders/queen.dm | 2 +- .../simple_animal/hostile/venus_human_trap.dm | 1 + .../mob/living/simple_animal/simple_animal.dm | 1 + .../computers/item/computer_damage.dm | 52 ++----- code/modules/shuttle/shuttle.dm | 3 + paradise.dme | 2 +- 65 files changed, 265 insertions(+), 234 deletions(-) rename code/__DEFINES/{mob.dm => mobs.dm} (96%) diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index fc7fc98e25f..1e5599a998d 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -27,6 +27,11 @@ #define PLASTIC_FLAPS_NORMAL 0 #define PLASTIC_FLAPS_DETACHED 1 +//other construction-related things + +//windows affected by nar-sie turn this color. +#define NARSIE_WINDOW_COLOUR "#7D1919" + //Material defines, for determining how much of a given material an item contains #define MAT_METAL "$metal" #define MAT_GLASS "$glass" diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mobs.dm similarity index 96% rename from code/__DEFINES/mob.dm rename to code/__DEFINES/mobs.dm index 1b85e76c772..5bf38e54ad8 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mobs.dm @@ -107,6 +107,12 @@ #define AI_CHECK_WIRELESS 1 #define AI_CHECK_RADIO 2 +//determines if a mob can smash through it +#define ENVIRONMENT_SMASH_NONE 0 +#define ENVIRONMENT_SMASH_STRUCTURES 1 //crates, lockers, ect +#define ENVIRONMENT_SMASH_WALLS 2 //walls +#define ENVIRONMENT_SMASH_RWALLS 4 //rwalls + #define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets #define DEFAULT_ITEM_STRIP_DELAY 40 //time taken (in deciseconds) to strip somebody diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 977b68ae5a3..545dcfd0380 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -16,6 +16,9 @@ var/datum/hud/hud = null appearance_flags = NO_CLIENT_COLOR +/obj/screen/take_damage() + return + /obj/screen/Destroy() master = null return ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index bf6c7b5531f..723bf48e7e8 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -13,15 +13,9 @@ return TRUE //return FALSE to avoid calling attackby after this proc does stuff // No comment -/atom/proc/attackby(obj/item/W, mob/living/user, params) +/atom/proc/attackby(obj/item/W, mob/user, params) return -/atom/movable/attackby(obj/item/W, mob/living/user, params) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(!(W.flags&NOBLUDGEON)) - visible_message("[src] has been hit by [user] with [W].") - /obj/attackby(obj/item/I, mob/living/user, params) return I.attack_obj(src, user) @@ -94,7 +88,8 @@ /obj/attacked_by(obj/item/I, mob/living/user) if(I.force) - user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + user.visible_message("[src] has been hit by [user] with [I]!", "You hit [src] with [I]!") + take_damage(I.force, I.damtype, "melee", 1) /mob/living/attacked_by(obj/item/I, mob/living/user, def_zone) send_item_attack_message(I, user) @@ -142,9 +137,9 @@ var/message_hit_area = "" if(hit_area) message_hit_area = " in the [hit_area]" - var/attack_message = "[src] has been [message_verb][message_hit_area] with [I]." + var/attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!" if(user in viewers(src, null)) - attack_message = "[src] has been [message_verb][message_hit_area] with [I] by [user]!" - visible_message("[attack_message]", - "[attack_message]") + attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!" + visible_message("[attack_message]",\ + "[attack_message]") return 1 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bf02fa02ed8..33265ff8a49 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -153,9 +153,8 @@ /atom/proc/emp_act(var/severity) return -/atom/proc/bullet_act(var/obj/item/projectile/Proj, def_zone) - Proj.on_hit(src, 0, def_zone) - return 0 +/atom/proc/bullet_act(obj/item/projectile/P, def_zone) + . = P.on_hit(src, 0, def_zone) /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index c9e15d20f38..c6dc0833afb 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -34,6 +34,8 @@ maxHealth = 40 melee_damage_lower = 2 melee_damage_upper = 4 + obj_damage = 20 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES attacktext = "hits" attack_sound = 'sound/weapons/genhit1.ogg' speak_emote = list("pulses") @@ -158,6 +160,7 @@ maxHealth = 240 melee_damage_lower = 20 melee_damage_upper = 20 + obj_damage = 60 attacktext = "hits" attack_sound = 'sound/effects/blobattack.ogg' speak_emote = list("gurgles") @@ -165,7 +168,7 @@ maxbodytemp = 360 force_threshold = 10 mob_size = MOB_SIZE_LARGE - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE pressure_resistance = 100 //100 kPa difference required to push throw_pressure_limit = 120 //120 kPa difference required to throw diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index e80ba05eccb..be18793554f 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -90,6 +90,7 @@ melee_damage_upper = 15 melee_damage_type = STAMINA damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + obj_damage = 0 environment_smash = 0 attacktext = "shocks" attack_sound = 'sound/effects/EMPulse.ogg' diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 89be0391463..ed79a826608 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -22,6 +22,7 @@ maxHealth = INFINITY //The spirit itself is invincible health = INFINITY environment_smash = 0 + obj_damage = 40 melee_damage_lower = 15 melee_damage_upper = 15 AIStatus = AI_OFF diff --git a/code/game/gamemodes/miniantags/guardian/types/assassin.dm b/code/game/gamemodes/miniantags/guardian/types/assassin.dm index 28626133557..426824f2e8c 100644 --- a/code/game/gamemodes/miniantags/guardian/types/assassin.dm +++ b/code/game/gamemodes/miniantags/guardian/types/assassin.dm @@ -45,6 +45,8 @@ melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) armour_penetration = initial(armour_penetration) + obj_damage = initial(obj_damage) + environment_smash = initial(environment_smash) alpha = initial(alpha) if(!forced) to_chat(src, "You exit stealth.") @@ -61,7 +63,9 @@ melee_damage_lower = 50 melee_damage_upper = 50 armour_penetration = 100 - new /obj/effect/temp_visual/guardian/phase(get_turf(src)) + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + new /obj/effect/temp_visual/guardian/phase/out(get_turf(src)) alpha = 15 if(!forced) to_chat(src, "You enter stealth, empowering your next attack.") diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 648339743fd..695782728fa 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -32,6 +32,8 @@ ranged = 1 melee_damage_lower = 10 melee_damage_upper = 10 + obj_damage = initial(obj_damage) + environment_smash = initial(environment_smash) alpha = 255 range = 13 incorporeal_move = 0 @@ -41,6 +43,8 @@ ranged = 0 melee_damage_lower = 0 melee_damage_upper = 0 + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE alpha = 60 range = 255 incorporeal_move = 1 diff --git a/code/game/gamemodes/miniantags/guardian/types/standard.dm b/code/game/gamemodes/miniantags/guardian/types/standard.dm index 10327778a65..8dfc3d39796 100644 --- a/code/game/gamemodes/miniantags/guardian/types/standard.dm +++ b/code/game/gamemodes/miniantags/guardian/types/standard.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile/guardian/punch melee_damage_lower = 20 melee_damage_upper = 20 + obj_damage = 80 damage_transfer = 0.4 playstyle_string = "As a Standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 28456e39984..def7f1fdd76 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -23,6 +23,7 @@ maxHealth = 150 health = 150 environment_smash = 1 + obj_damage = 50 melee_damage_lower = 20 melee_damage_upper = 20 see_in_dark = 8 diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 416610dd1c2..3c0523daa3c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -29,6 +29,7 @@ health = 200 environment_smash = 1 //universal_understand = 1 + obj_damage = 50 melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 @@ -114,7 +115,7 @@ health = 500 melee_damage_upper = 60 melee_damage_lower = 60 - environment_smash = 3 //Smashes through EVERYTHING - r-walls included + environment_smash = ENVIRONMENT_SMASH_RWALLS //Smashes through EVERYTHING - r-walls included faction = list("cult") playstyle_string = "You are a Harbringer of the Slaughter. Brought forth by the servants of Nar-Sie, you have a single purpose: slaughter the heretics \ who do not worship your master. You may use the ability 'Blood Crawl' near a pool of blood to enter it and become incorporeal. Using the ability again near a blood pool will allow you \ diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index a957c16c50e..f640174d537 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -28,7 +28,7 @@ minbodytemp = 0 maxbodytemp = INFINITY - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS faction = list("faithless") diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 89157003e5f..9d19ba79408 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -194,7 +194,7 @@ if(user.can_advanced_admin_interact()) return attack_hand(user) -/obj/machinery/door/window/proc/attack_generic(mob/user, damage = 0) +/obj/machinery/door/window/attack_generic(mob/user, damage = 0) if(operating) return user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f74ef8717a7..5c29343020a 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -497,7 +497,20 @@ Class Procs: to_chat(user, "[bicon(C)] [C.name]") /obj/machinery/examine(mob/user) - ..(user) + ..() + if(stat & BROKEN) + to_chat(user, "It looks broken and non-functional.") + if(!(resistance_flags & INDESTRUCTIBLE)) + if(burn_state == ON_FIRE) + to_chat(user, "It's on fire!") + var/healthpercent = (obj_integrity/max_integrity) * 100 + switch(healthpercent) + if(50 to 99) + to_chat(user, "It looks slightly damaged.") + if(25 to 50) + to_chat(user, "It appears heavily damaged.") + if(0 to 25) + to_chat(user, "It's falling apart!") if(user.research_scanner && component_parts) display_parts(user) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index d88965fbbbf..467858ad670 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -4,3 +4,11 @@ /obj/effect icon = 'icons/effects/effects.dmi' + burn_state = LAVA_PROOF | FIRE_PROOF + resistance_flags = INDESTRUCTIBLE + +/obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + return + +/obj/effect/fire_act() + return \ No newline at end of file diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 8ad7e8c9b91..a7a0e2699b2 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -19,11 +19,8 @@ //returns the damage value of the attack after processing the obj's various armor protections /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) - switch(damage_type) - if(BRUTE) - if(BURN) - else - return 0 + if(!(damage_type in list(BRUTE, BURN))) + return 0 var/armor_protection = 0 if(damage_flag) armor_protection = armor[damage_flag] @@ -52,6 +49,86 @@ tforce = O.throwforce take_damage(tforce, BRUTE, "melee", 1, get_dir(src, AM)) +/obj/ex_act(severity, target) + if(resistance_flags & INDESTRUCTIBLE) + return + ..() //contents explosion + if(target == src) + obj_integrity = 0 + qdel(src) + return + switch(severity) + if(1) + obj_integrity = 0 + qdel(src) + if(2) + take_damage(rand(100, 250), BRUTE, "bomb", 0) + if(3) + take_damage(rand(10, 90), BRUTE, "bomb", 0) + +/obj/bullet_act(obj/item/projectile/P) + . = ..() + playsound(src, P.hitsound, 50, 1) + visible_message("[src] is hit by \a [P]!") + take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) + +/obj/blob_act(obj/structure/blob/B) + if(isturf(loc)) + var/turf/T = loc + if(T.intact && level == 1) //the blob doesn't destroy thing below the floor + return + take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) + +/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) + +/obj/attack_alien(mob/living/carbon/alien/humanoid/user) + if(attack_generic(user, 60, BRUTE, "melee", 0)) + playsound(loc, 'sound/weapons/slash.ogg', 100, 1) + +/obj/attack_animal(mob/living/simple_animal/M) + if(!M.melee_damage_upper && !M.obj_damage) + M.custom_emote(1, "[M.friendly] [src]") + return 0 + else + var/play_soundeffect = 1 + if(M.environment_smash) + play_soundeffect = 0 + if(M.obj_damage) + . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) + else + . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) + if(. && !play_soundeffect) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + +/obj/attack_slime(mob/living/carbon/slime/user) + if(!user.is_adult) + return + attack_generic(user, rand(10, 15), "melee", 1) + +/obj/mech_melee_attack(obj/mecha/M) + M.do_attack_animation(src) + var/play_soundeffect = 0 + var/mech_damtype = M.damtype + if(M.selected) + mech_damtype = M.selected.damtype + play_soundeffect = 1 + else + switch(M.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 50, 1) + if(TOX) + playsound(src, 'sound/effects/spray2.ogg', 50, 1) + return 0 + else + return 0 + visible_message("[M.name] has hit [src].") + return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. + /obj/singularity_act() ex_act(1) if(src && !qdeleted(src)) @@ -101,7 +178,7 @@ //what happens when the obj's integrity reaches zero. /obj/proc/obj_destruction(damage_flag) - if(damage_flag == "fire") + if(damage_flag == BURN) burn() else deconstruct(FALSE) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2bbadfcd0ba..20cc3afc756 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -14,7 +14,7 @@ var/force = 0 var/list/armor var/obj_integrity //defaults to max_integrity - var/max_integrity = 500 + var/max_integrity = INFINITY var/integrity_failure = 0 //0 if we have no special broken behavior var/resistance_flags = NONE // INDESTRUCTIBLE diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index a775fec0095..00860477833 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -165,3 +165,24 @@ return 0 return 1 +/obj/structure/examine(mob/user) + ..() + if(!(resistance_flags & INDESTRUCTIBLE)) + if(burn_state == ON_FIRE) + to_chat(user, "It's on fire!") + if(broken) + to_chat(user, "It appears to be broken.") + var/examine_status = examine_status(user) + if(examine_status) + to_chat(user, examine_status) + +/obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls. + var/healthpercent = (obj_integrity/max_integrity) * 100 + switch(healthpercent) + if(50 to 99) + return "It looks slightly damaged." + if(25 to 50) + return "It appears heavily damaged." + if(0 to 25) + if(!broken) + return "It's falling apart!" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 42f6a20e261..938bd0d5472 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -32,8 +32,8 @@ /obj/structure/girder/attack_animal(mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) - if(M.environment_smash >= 1) - if(M.environment_smash == 3) + if((M.environment_smash & ENVIRONMENT_SMASH_STRUCTURES) || (M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS)) + if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS) ex_act(2) M.visible_message("[M] smashes through \the [src].", "You smash through \the [src].") else diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 9af91affa52..e492f96a3c2 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -15,7 +15,7 @@ var/rods_type = /obj/item/stack/rods var/rods_amount = 2 var/rods_broken = 1 - var/grille_type = null + var/grille_type var/broken_type = /obj/structure/grille/broken /obj/structure/grille/fence/ @@ -95,36 +95,6 @@ if(!shock(user, 70)) take_damage(20, BRUTE, "melee", 1) -/obj/structure/grille/attack_slime(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - var/mob/living/carbon/slime/S = user - if(!S.is_adult) - return - - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - user.visible_message("[user] smashes against [src].", \ - "You smash against [src].", \ - "You hear twisting metal.") - - take_damage(rand(1,2)) - -/obj/structure/grille/attack_animal(mob/living/simple_animal/M) - if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) - return - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - M.visible_message("[M] smashes against [src].", \ - "You smash against [src].", \ - "You hear twisting metal.") - - take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", 1) - -/obj/structure/grille/mech_melee_attack(obj/mecha/M) - if(..()) - take_damage(M.force * 0.5, M.damtype) - /obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -142,10 +112,6 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSGRILLE) -/obj/structure/grille/bullet_act(obj/item/projectile/Proj) - . = ..() - take_damage(Proj.damage*0.3, Proj.damage_type) - /obj/structure/grille/attackby(obj/item/weapon/W, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) @@ -155,7 +121,7 @@ deconstruct() else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) - playsound(loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) anchored = !anchored user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ "You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.") @@ -177,7 +143,7 @@ //window placing end else if(istype(W, /obj/item/weapon/shard) || !shock(user, 70)) - return attacked_by(W, user) + return ..() /obj/structure/grille/proc/build_window(obj/item/stack/sheet/S, mob/user) if(!istype(S) || !user) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 2cdcfc18376..0c5373558ae 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -66,7 +66,7 @@ add_fingerprint(user) return -/obj/structure/inflatable/proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime +/obj/structure/inflatable/attack_generic(mob/user, damage = 0) //used by attack_alien, attack_animal, and attack_slime health -= damage if(health <= 0) user.visible_message("[user] tears open [src]!") diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index 6f5a70af404..1786d8cc8ff 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -128,6 +128,7 @@ desc = "Four pieces of brass arranged in a square. It's slightly warm to the touch." icon_state = "brass_frame" burn_state = FIRE_PROOF + unacidable = 1 framestack = /obj/item/stack/tile/brass framestackamount = 1 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 5005d9e4aff..d856ab6f9eb 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -82,42 +82,6 @@ new /obj/structure/table/reinforced/brass(loc) qdel(src) -/obj/structure/table/ex_act(severity) - switch(severity) - if(1) - qdel(src) - return - if(2) - if(prob(50)) - qdel(src) - return - if(3) - if(prob(25)) - deconstruct(FALSE) - else - return - -/obj/structure/table/blob_act() - if(prob(75)) - qdel(src) - -/obj/structure/table/attack_alien(mob/living/user) - user.do_attack_animation(src) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1) - visible_message("[user] slices [src] apart!") - deconstruct(FALSE) - -/obj/structure/table/mech_melee_attack(obj/mecha/M) - visible_message("[M] smashes [src] apart!") - deconstruct(FALSE) - -/obj/structure/table/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.do_attack_animation(src) - playsound(loc, 'sound/weapons/Genhit.ogg', 50, 1) - visible_message("[user] smashes [src] apart!") - deconstruct(FALSE) - /obj/structure/table/attack_hand(mob/living/user) if(HULK in user.mutations) user.do_attack_animation(src) @@ -254,18 +218,7 @@ if(isrobot(user)) return - if(istype(I, /obj/item/weapon/melee/energy/blade)) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, loc) - spark_system.start() - playsound(loc, I.usesound, 50, 1) - playsound(loc, "sparks", 50, 1) - for(var/mob/O in viewers(user, 4)) - O.show_message("The [src] was sliced apart by [user]!", 1, "You hear [src] coming apart.", 2) - deconstruct(FALSE) - return - - if(!(I.flags & ABSTRACT)) + if(user.a_intent != INTENT_HARM && !(I.flags & ABSTRACT)) if(user.drop_item()) I.Move(loc) var/list/click_params = params2list(params) @@ -275,8 +228,8 @@ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) I.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) I.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) - - return + else + return ..() /obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0) if(can_deconstruct) @@ -401,6 +354,7 @@ icon_state = "glass_table" buildstack = /obj/item/stack/sheet/glass max_integrity = 70 + unacidable = 1 canSmoothWith = null var/list/debris = list() @@ -465,6 +419,11 @@ debris -= AM qdel(src) +/obj/structure/table/glass/narsie_act() + color = NARSIE_WINDOW_COLOUR + for(var/obj/item/weapon/shard/S in debris) + S.color = NARSIE_WINDOW_COLOUR + /* * Wooden tables */ @@ -602,8 +561,8 @@ icon = 'icons/obj/objects.dmi' icon_state = "rack" layer = TABLE_LAYER - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE pass_flags = LETPASSTHROW max_integrity = 20 @@ -611,28 +570,6 @@ ..() to_chat(user, "It's held together by a couple of bolts.") -/obj/structure/rack/ex_act(severity) - switch(severity) - if(1) - qdel(src) - if(2) - qdel(src) - if(prob(50)) - new /obj/item/weapon/rack_parts(loc) - if(3) - if(prob(25)) - qdel(src) - new /obj/item/weapon/rack_parts(loc) - -/obj/structure/rack/blob_act() - if(prob(75)) - qdel(src) - return - else if(prob(50)) - new /obj/item/weapon/rack_parts(loc) - qdel(src) - return - /obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -668,46 +605,21 @@ return if(isrobot(user)) return + if(user.a_intent == INTENT_HARM) + return ..() if(!(W.flags & ABSTRACT)) if(user.drop_item()) W.Move(loc) return -/obj/structure/rack/attack_hand(mob/user) - if(HULK in user.mutations) - visible_message("[user] smashes [src] apart!") - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - deconstruct() - else - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) - user.visible_message("[user] kicks [src].", \ - "You kick [src].") - obj_integrity -= rand(1,2) - healthcheck() - -/obj/structure/rack/mech_melee_attack(obj/mecha/M) - visible_message("[M] smashes [src] apart!") - deconstruct() - -/obj/structure/rack/attack_alien(mob/living/user) +/obj/structure/rack/attack_hand(mob/living/user) + if(user.weakened || user.resting || user.lying) + return + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - visible_message("[user] slices [src] apart!") - deconstruct() - -/obj/structure/rack/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.do_attack_animation(src) - visible_message("[user] smashes [src] apart!") - deconstruct() - -/obj/structure/rack/attack_tk() // no telehulk sorry - return - -/obj/structure/rack/proc/healthcheck() - if(obj_integrity <= 0) - deconstruct() + user.visible_message("[user] kicks [src].", \ + "You kick [src].") + take_damage(rand(4,8), BRUTE, "melee", 1) /obj/structure/rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 361b815a358..b45883162c6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -148,7 +148,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f return -/obj/structure/window/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime +/obj/structure/window/attack_generic(mob/living/user, damage = 0) //used by attack_alien, attack_animal, and attack_slime user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) health -= damage diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index bc64a4ab8f3..7772740a9f2 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -5,7 +5,7 @@ /obj/item/weapon/New() ..() if(!hitsound) - if(damtype == "fire") + if(damtype == BURN) hitsound = 'sound/items/welder.ogg' - if(damtype == "brute") + if(damtype == BRUTE) hitsound = "swing_hit" \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 234af2cfb72..73166ebe64b 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -216,8 +216,8 @@ /turf/simulated/wall/attack_animal(var/mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) - if(M.environment_smash >= 2) - if(M.environment_smash == 3) + if((M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS)) + if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS) dismantle_wall(1) to_chat(M, "You smash through the wall.") else diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 1b5294867d4..16ec28dc929 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -595,7 +595,7 @@ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) check_health() -/obj/machinery/fishtank/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime +/obj/machinery/fishtank/attack_generic(mob/living/user, damage = 0) //used by attack_alien, attack_animal, and attack_slime user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) cur_health -= damage diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index c1d8d2bdfde..425fbee2b8a 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -335,6 +335,7 @@ friendly = "mends" density = 0 flying = 1 + obj_damage = 0 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = 2 mob_size = MOB_SIZE_TINY diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d2f8e2c8bc1..94fa395e526 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -418,7 +418,7 @@ var/global/list/rockTurfEdgeCache = list( return /turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob) - if(user.environment_smash >= 2) + if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS)) gets_drilled() ..() diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index a9cdbffed7d..f60eba4a1bd 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -23,6 +23,7 @@ maxHealth = 125 melee_damage_lower = 15 melee_damage_upper = 15 + obj_damage = 0 environment_smash = 0 check_friendly_fire = 1 stop_automated_movement_when_pulled = 1 diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index f7e22f60b35..e9603666573 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -215,8 +215,8 @@ return // can't attack while eating! M.do_attack_animation(src) - visible_message(" The [M.name] has glomped [src]!", \ - " The [M.name] has glomped [src]!") + visible_message("[M.name] has glomped [src]!", \ + "[M.name] has glomped [src]!") var/damage = rand(1, 3) attacked += 5 if(M.is_adult) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 3cf6e92d5f1..7b902af2e7a 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -8,7 +8,7 @@ health = 100 maxHealth = 100 damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - + obj_damage = 60 environment_smash = 2 //Walls can't stop THE LAW mob_size = MOB_SIZE_LARGE diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index f94063a5a10..a3fdbde1d2b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -100,6 +100,7 @@ health = 250 response_harm = "harmlessly punches" harm_intent_damage = 0 + obj_damage = 90 melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "smashes their armoured gauntlet into" @@ -189,6 +190,7 @@ health = 50 response_harm = "viciously beats" harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 5 melee_damage_upper = 5 attacktext = "rams" @@ -302,7 +304,7 @@ melee_damage_lower = 1 melee_damage_upper = 5 attacktext = "prods" - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS see_in_dark = 8 attack_sound = 'sound/weapons/tap.ogg' const_type = "harvester" diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index ead59fa32d7..31d0b1f91c5 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -9,7 +9,7 @@ health = 5 maxHealth = 5 attacktext = "bites" - attacktext = "bites" + obj_damage = 0 melee_damage_lower = 1 melee_damage_upper = 2 response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 86dbc13b643..480647fe8a8 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -14,6 +14,7 @@ maxHealth = 100 health = 100 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" @@ -145,6 +146,7 @@ melee_damage_upper = 0 a_intent = INTENT_HELP friendly = "caresses" + obj_damage = 0 environment_smash = 0 icon_state = "maid" icon_living = "maid" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 798595a36e0..1e55fb58850 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -20,6 +20,7 @@ stop_automated_movement_when_pulled = 0 maxHealth = 60 health = 60 + obj_damage = 60 melee_damage_lower = 20 melee_damage_upper = 30 attacktext = "mauls" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index a2d6c915d77..557e9de9c48 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -29,6 +29,7 @@ health = 10 faction = list("hostile") move_to_delay = 0 + obj_damage = 0 environment_smash = 0 mouse_opacity = 2 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 2d0dd7a2380..be9f41e9625 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -18,6 +18,7 @@ health = 25 harm_intent_damage = 8 + obj_damage = 50 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "bites" @@ -70,6 +71,6 @@ health = 65 pixel_x = -16 mob_size = MOB_SIZE_LARGE - + obj_damage = 80 melee_damage_lower = 20 melee_damage_upper = 20 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 50aa20b60d0..13c695387bd 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -8,6 +8,7 @@ icon_dead = "otherthing-dead" health = 80 maxHealth = 80 + obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 50 attacktext = "chomps" diff --git a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm index e1fcfca518f..e825bb2d273 100644 --- a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm +++ b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm @@ -17,7 +17,7 @@ armour_penetration = 25 melee_damage_lower = 10 melee_damage_upper = 100 - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS force_threshold = 15 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 35926a602f2..f668312e88d 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -12,7 +12,7 @@ speed = 0 maxHealth = 80 health = 80 - + obj_damage = 50 harm_intent_damage = 10 melee_damage_lower = 15 melee_damage_upper = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index fb0d156cdbf..cc1726a6408 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -39,6 +39,7 @@ response_harm = "hits" maxHealth = 200 health = 200 + obj_damage = 60 melee_damage_lower = 15 melee_damage_upper = 20 heat_damage_per_tick = 20 //amount of damage applied if animal's body temperature is higher than maxbodytemp diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 9c9ec79fd34..0eea0eaef76 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -16,6 +16,7 @@ faction = list("creature") robust_searching = 1 stat_attack = 2 + obj_damage = 0 environment_smash = 0 speak_emote = list("squeaks") ventcrawler = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 50fab332201..a06ea9bd80d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile faction = list("hostile") stop_automated_movement_when_pulled = 0 + obj_damage = 40 environment_smash = 1 //Set to 1 to break closets,tables,racks, etc; 2 for walls; 3 for rwalls var/atom/target var/ranged = 0 @@ -241,7 +242,7 @@ if(target.loc != null && get_dist(targets_from, target.loc) <= vision_range) //We can't see our target, but he's in our vision range still if(ranged_ignores_vision && ranged_cooldown <= world.time) //we can't see our target... but we can fire at them! OpenFire(target) - if(environment_smash >= 2) //If we're capable of smashing through walls, forget about vision completely after finding our target + if((environment_smash & ENVIRONMENT_SMASH_WALLS) || (environment_smash & ENVIRONMENT_SMASH_RWALLS)) //If we're capable of smashing through walls, forget about vision completely after finding our target Goto(target,move_to_delay,minimum_distance) FindHidden() return 1 diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index 746c1789e16..9ed59fb4ab5 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -65,6 +65,7 @@ melee_damage_lower = 0 melee_damage_upper = 0 speed = -1 + obj_damage = 0 environment_smash = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 2ec7c213e1c..fe0374561a4 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -267,6 +267,7 @@ Difficulty: Medium maxHealth = 200 health = 200 faction = list("neutral") + obj_damage = 80 melee_damage_upper = 30 melee_damage_lower = 30 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index dba3121f3a7..19a00329e8f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -7,7 +7,8 @@ maxHealth = 1000 a_intent = INTENT_HARM sentience_type = SENTIENCE_BOSS - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS + obj_damage = 400 luminosity = 3 faction = list("mining", "boss") weather_immunities = list("lava","ash") diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 0b28722e497..d25b2e5c6d9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -225,6 +225,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(obj/O, mob/living/creator, destroy_original = 0) if(..()) emote_see = list("aims menacingly") + obj_damage = 0 environment_smash = 0 //needed? seems weird for them to do so ranged = 1 retreat_distance = 1 //just enough to shoot diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index a0f0a2b8b22..c874259f891 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -17,6 +17,7 @@ maxHealth = 75 health = 75 harm_intent_damage = 5 + obj_damage = 0 melee_damage_lower = 0 melee_damage_upper = 0 attacktext = "lashes out at" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 184f7b3ced3..2ff27c6fdfa 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -4,6 +4,7 @@ unsuitable_atmos_damage = 15 faction = list("mining") weather_immunities = list("lava","ash") + obj_damage = 30 environment_smash = 2 minbodytemp = 0 heat_damage_per_tick = 20 @@ -65,6 +66,7 @@ maxHealth = 200 health = 200 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 12 melee_damage_upper = 12 attacktext = "bites into" @@ -125,6 +127,7 @@ maxHealth = 300 health = 300 harm_intent_damage = 1 //Only the manliest of men can kill a Goliath with only their fists. + obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "pulverizes" diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 25311673076..3eaef32cafd 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -13,6 +13,7 @@ response_disarm = "gently pushes aside" response_harm = "whacks" harm_intent_damage = 5 + obj_damage = 0 melee_damage_lower = 1 melee_damage_upper = 1 attack_same = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 29c9923b5cd..4253d6bbf7f 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -14,6 +14,7 @@ health = 100 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "slashes" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index c2ba962e2e0..4fefd0ac4f6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -22,6 +22,7 @@ melee_damage_upper = 10 attacktext = "attacks" attack_sound = 'sound/items/bikehorn.ogg' + obj_damage = 0 environment_smash = 0 minbodytemp = 270 maxbodytemp = 370 diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 6ddb86fd818..b3bc11e6c1f 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -19,6 +19,7 @@ healable = 0 harm_intent_damage = 35 + obj_damage = 100 melee_damage_lower = 34 melee_damage_upper = 42 attacktext = "claws" diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 470163315f3..03f2497e9cc 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -112,6 +112,7 @@ pass_flags = PASSTABLE health = 15 maxHealth = 15 + obj_damage = 0 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "cuts" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm index 40e6515668f..afb2785bb10 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm @@ -24,7 +24,7 @@ move_to_delay = 4 // faster than normal ventcrawler = 0 ai_ventcrawls = 0 - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS loot = list(/obj/item/clothing/accessory/medal) idle_ventcrawl_chance = 0 spider_tier = TS_TIER_3 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm index 6b524872552..6a19cf1122c 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -25,7 +25,7 @@ spider_opens_doors = 2 ventcrawler = 0 ai_ventcrawls = 0 - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS idle_ventcrawl_chance = 0 // stick to the queen! var/dcheck_counter = 0 var/queen_visible = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index a9032b8a13d..ef285b488a6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -232,7 +232,7 @@ hasnested = 1 ventcrawler = 0 ai_ventcrawls = 0 - environment_smash = 3 + environment_smash = ENVIRONMENT_SMASH_RWALLS DoQueenScreech(8, 100, 8, 100) MassFlicker() to_chat(src, "You have matured to your egglaying stage. You can now smash through walls, and lay eggs, but can no longer ventcrawl.") diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index f27891f5965..9e6396dbde0 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -54,6 +54,7 @@ maxHealth = 50 ranged = 1 harm_intent_damage = 5 + obj_damage = 60 melee_damage_lower = 25 melee_damage_upper = 25 a_intent = INTENT_HARM diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index cf045091115..9d89c2c8b4c 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -46,6 +46,7 @@ //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly var/melee_damage_lower = 0 var/melee_damage_upper = 0 + var/obj_damage = 0 //how much damage this simple animal does to objects, if any var/armour_penetration = 0 //How much armour they ignore, as a flat reduction from the targets armour value var/melee_damage_type = BRUTE //Damage type of a simple mob's melee attack, should it do damage. var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) // 1 for full damage , 0 for none , -1 for 1:1 heal from that source diff --git a/code/modules/modular_computers/computers/item/computer_damage.dm b/code/modules/modular_computers/computers/item/computer_damage.dm index 2623794fa9d..b0358edc3c9 100644 --- a/code/modules/modular_computers/computers/item/computer_damage.dm +++ b/code/modules/modular_computers/computers/item/computer_damage.dm @@ -1,29 +1,3 @@ -/obj/item/device/modular_computer/emp_act(severity) - if(prob(20 / severity)) - take_damage(obj_integrity, BURN) - ..() - -/obj/item/device/modular_computer/ex_act(severity) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(25)) - qdel(src) - else if(prob(50)) - obj_integrity = 0 - if(3) - if(prob(25)) - obj_integrity = 0 - -/obj/item/device/modular_computer/bullet_act(obj/item/projectile/P) - take_damage(P.damage, P.damage_type) - ..() - -/obj/item/device/modular_computer/blob_act() - if(prob(75)) - take_damage(obj_integrity, BRUTE) - /obj/item/device/modular_computer/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) . = ..() var/component_probability = min(50, max(damage_amount*0.1, 1 - obj_integrity/max_integrity)) @@ -36,17 +10,21 @@ for(var/I in all_components) var/obj/item/weapon/computer_hardware/H = all_components[I] if(prob(component_probability)) - H.take_damage(round(damage_amount*0.5)) + H.take_damage(round(damage_amount*0.5), damage_type, damage_flag, 0) -/obj/item/device/modular_computer/proc/break_apart(damage = TRUE) - physical.visible_message("\The [src] breaks apart!") - var/turf/newloc = get_turf(src) - new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2)) - for(var/C in all_components) - var/obj/item/weapon/computer_hardware/H = all_components[C] - uninstall_component(H) - H.forceMove(newloc) - if(damage && prob(25)) - H.take_damage(rand(10, 30)) +/obj/item/device/modular_computer/deconstruct(disassembled = TRUE) + break_apart() + +/obj/item/device/modular_computer/proc/break_apart() + if(can_deconstruct) + physical.visible_message("\The [src] breaks apart!") + var/turf/newloc = get_turf(src) + new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2)) + for(var/C in all_components) + var/obj/item/weapon/computer_hardware/H = all_components[C] + uninstall_component(H) + H.forceMove(newloc) + if(prob(25)) + H.take_damage(rand(10,30), BRUTE, 0, 0) relay_qdel() qdel(src) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index d3406556e27..8e284cc3eea 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -33,6 +33,9 @@ return QDEL_HINT_LETMELIVE +/obj/docking_port/take_damage() + return + /obj/docking_port/singularity_pull() return diff --git a/paradise.dme b/paradise.dme index 14306bb981e..ef5b9d4d4a9 100644 --- a/paradise.dme +++ b/paradise.dme @@ -39,7 +39,7 @@ #include "code\__DEFINES\machines.dm" #include "code\__DEFINES\math.dm" #include "code\__DEFINES\misc.dm" -#include "code\__DEFINES\mob.dm" +#include "code\__DEFINES\mobs.dm" #include "code\__DEFINES\pda.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\process_scheduler.dm" From a2038d40b39054872bef0a8ea380f7caf39b5d33 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Sun, 11 Feb 2018 17:51:02 +0500 Subject: [PATCH 10/32] makes door code more OOP: reduced copypasta in shutter and poddoor code, they have their own icon files, changed name of icon_states in the maps added a few defines and helpers do_after family supports callbacks added airlock security levels to airlocks obj_integrity for doors, door assemblies, firelock frames vault door assembly is 8 plasteel up from 6 explosion_block works better heavy firelocks block explosions, firelock (de)construction uses crowbar instead of welder xenos can open airlocks minor change to attacking obj message --- .../MetaStation/MetaStation.v41A.II.dmm | 278 ++++---- _maps/map_files/RandomZLevels/example.dmm | 4 +- _maps/map_files/RandomZLevels/spacebattle.dmm | 4 +- _maps/map_files/cyberiad/cyberiad.dmm | 514 +++++++------- _maps/map_files/cyberiad/z2.dmm | 12 +- code/__DEFINES/combat.dm | 18 +- code/__DEFINES/is_helpers.dm | 2 + code/__DEFINES/layers.dm | 1 + code/__DEFINES/misc.dm | 3 + code/__HELPERS/mobs.dm | 21 +- code/_onclick/item_attack.dm | 2 +- code/datums/wires/airlock.dm | 7 +- code/game/machinery/doors/airlock.dm | 628 +++++++++++++----- code/game/machinery/doors/airlock_types.dm | 26 +- code/game/machinery/doors/door.dm | 239 ++++--- code/game/machinery/doors/firedoor.dm | 209 +++--- code/game/machinery/doors/poddoor.dm | 110 +-- code/game/machinery/doors/shutters.dm | 68 +- code/game/machinery/doors/unpowered.dm | 10 +- code/game/machinery/doors/windowdoor.dm | 375 +++++------ code/game/machinery/machinery.dm | 15 +- code/game/objects/explosion.dm | 14 +- .../items/stacks/sheets/sheet_types.dm | 4 +- code/game/objects/obj_defense.dm | 5 +- code/game/objects/structures/door_assembly.dm | 23 +- .../objects/structures/windoor_assembly.dm | 256 ++++--- icons/obj/doors/1x2blast_hor.dmi | Bin 2971 -> 1433 bytes icons/obj/doors/1x2blast_vert.dmi | Bin 5121 -> 1730 bytes icons/obj/doors/1x3blast_hor.dmi | Bin 4858 -> 1466 bytes icons/obj/doors/1x3blast_vert.dmi | Bin 6931 -> 2033 bytes icons/obj/doors/1x4blast_hor.dmi | Bin 5345 -> 1624 bytes icons/obj/doors/1x4blast_vert.dmi | Bin 8694 -> 2832 bytes icons/obj/doors/blastdoor.dmi | Bin 0 -> 2310 bytes icons/obj/doors/rapid_pdoor.dmi | Bin 18785 -> 0 bytes icons/obj/doors/shutters.dmi | Bin 0 -> 6465 bytes sound/machines/blastdoor.ogg | Bin 0 -> 12688 bytes 36 files changed, 1580 insertions(+), 1268 deletions(-) create mode 100644 icons/obj/doors/blastdoor.dmi delete mode 100644 icons/obj/doors/rapid_pdoor.dmi create mode 100644 icons/obj/doors/shutters.dmi create mode 100644 sound/machines/blastdoor.ogg diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index ee9761db620..85110ce9e74 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -2,9 +2,9 @@ "aab" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_n"; name = "north of station"; width = 18},/turf/space,/area/space) "aac" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aad" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate) -"aae" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) -"aaf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) -"aag" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"aae" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"aaf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"aag" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "aah" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aai" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate) "aaj" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -34,7 +34,7 @@ "aaH" = (/obj/effect/landmark{name = "Syndicate-Uplink"; tag = ""},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aaI" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aaJ" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"aaK" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"aaK" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "aaL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate) "aaM" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aaN" = (/obj/structure/closet/syndicate/suits,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -216,9 +216,9 @@ "aeh" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/vox) "aei" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aej" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25; req_access_txt = "152"},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"aek" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"ael" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"aem" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"aek" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ael" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"aem" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aen" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25; req_access_txt = "152"},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aeo" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aep" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/security/permabrig) @@ -229,9 +229,9 @@ "aeu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aev" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aew" = (/obj/machinery/door/airlock/external{name = "Escape Pod Two"},/turf/simulated/floor/plating,/area/security/permabrig) -"aex" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/permabrig) -"aey" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Justice Chamber"; req_access_txt = "3"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor{dir = 1; name = "Justice Chamber"; req_access_txt = "3"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) -"aez" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/permabrig) +"aex" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/permabrig) +"aey" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Justice Chamber"; req_access_txt = "3"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor{dir = 1; name = "Justice Chamber"; req_access_txt = "3"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) +"aez" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "executionfireblast"; layer = 2.9; name = "blast door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/permabrig) "aeA" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/security/permabrig) "aeB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/security/permabrig) "aeC" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating/airless/catwalk,/area/solar/auxstarboard) @@ -261,14 +261,14 @@ "afa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) "afb" = (/turf/simulated/wall,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "afc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall/r_wall,/area/security/permabrig) -"afd" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "permacell3"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt3"; name = "Cell 3"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afd" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "permacell3"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt3"; name = "Cell 3"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afe" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southwest_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aff" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access_txt = "152"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox) "afg" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox) -"afh" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"afh" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "afi" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "afj" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"afk" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"afk" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "afl" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/vox) "afm" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; req_one_access_txt = "152"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox) "afn" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southeast_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) @@ -278,8 +278,8 @@ "afr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/security/podbay) "afs" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/podbay) "aft" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/security/permabrig) -"afu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "permacell2"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt2"; name = "Cell 2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"afv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "permacell1"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt1"; name = "Cell 1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "permacell2"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt2"; name = "Cell 2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "permacell1"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{id_tag = "permabolt1"; name = "Cell 1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afw" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) "afx" = (/obj/structure/stool/bed,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/glasses/sunglasses/blindfold,/obj/item/clothing/mask/muzzle,/obj/machinery/camera{c_tag = "Prison Sanitatium"; dir = 4; network = list("SS13","Prison"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/permabrig) "afy" = (/obj/structure/stool/bed,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/glasses/sunglasses/blindfold,/obj/item/clothing/mask/muzzle,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/permabrig) @@ -294,10 +294,10 @@ "afH" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/pod_3) "afI" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/pod_3) "afJ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"afK" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"afK" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "afL" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "afM" = (/obj/item/clothing/head/collectable/petehat{desc = "It smells faintly of reptile."; name = "fancy leader hat"},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"afN" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"afN" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "afO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) "afP" = (/obj/structure/stool/bed,/obj/machinery/camera{c_tag = "Prison Cell 3"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/security/permabrig) @@ -308,10 +308,10 @@ "afV" = (/obj/structure/stool/bed,/obj/machinery/camera{c_tag = "Prison Cell 1"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afW" = (/obj/structure/stool,/obj/machinery/light/small{dir = 1},/obj/machinery/door_control{id = "permabolt1"; name = "Cell Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/permabrig) -"afY" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"afY" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) "afZ" = (/obj/machinery/flasher{id = "insaneflash"; pixel_x = 26},/obj/machinery/atmospherics/unary/vent_pump{dir = 7; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/permabrig) "aga" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/permabrig) -"agb" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"agb" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) "agc" = (/obj/machinery/camera{c_tag = "Atmospherics - Starboard Aft"; dir = 1; network = list("SS13")},/obj/structure/lattice,/turf/space,/area/security/armoury) "agd" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine,/area/security/podbay) "age" = (/obj/structure/table,/obj/item/weapon/storage/backpack/duffel/security{contents = newlist(/obj/item/weapon/scalpel,/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/item/weapon/circular_saw,/obj/item/weapon/surgical_drapes,/obj/item/clothing/mask/surgical); desc = "A large duffelbag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools."; name = "duffelbag"; pixel_y = 5},/obj/item/clothing/mask/balaclava,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 5},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) @@ -327,7 +327,7 @@ "ago" = (/obj/machinery/door_control{id = "prisonereducation"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) "agp" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/flasher{id = "PCell 3"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "agq" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"agr" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"agr" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosspace"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/hos) "ags" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/flasher{id = "PCell 2"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "agt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/wall,/area/security/permabrig) "agu" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) @@ -341,13 +341,13 @@ "agC" = (/turf/simulated/wall/r_wall,/area/security/hos) "agD" = (/obj/item/device/radio/intercom/department/security,/turf/simulated/wall/r_wall,/area/security/hos) "agE" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating/airless/catwalk,/area/solar/auxport) -"agF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"agF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "agG" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "agH" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 8},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_3) "agI" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_3) "agJ" = (/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "agK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"agL" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"agL" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "agM" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "agN" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) "agO" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "justice gas pump"},/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "gas ports"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/permabrig) @@ -374,7 +374,7 @@ "ahj" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ahk" = (/obj/effect/spawner/window/reinforced,/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ahl" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating/airless/catwalk,/area/solar/auxstarboard) -"ahm" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ahm" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahn" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aho" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weed_extract,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -384,7 +384,7 @@ "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ahz" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/permabrig) @@ -468,7 +468,7 @@ "aiZ" = (/obj/item/weapon/phone{desc = "Supposedly a direct line to NanoTrasen Central Command. It's not even plugged in."; pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/obj/structure/table/wood,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/hos) "aja" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "ajb" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"ajc" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"ajc" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "ajd" = (/obj/structure/closet/secure_closet/brig{anchored = 1},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/permabrig) "aje" = (/obj/structure/closet/secure_closet/brig{anchored = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/permabrig) "ajf" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/permabrig) @@ -510,9 +510,9 @@ "ajP" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/security,/obj/item/clothing/mask/gas/sechailer,/obj/item/clothing/head/helmet/space/hardsuit/security,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/security/permabrig) "ajQ" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/security,/obj/item/clothing/mask/gas/sechailer,/obj/item/clothing/head/helmet/space/hardsuit/security,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/security/permabrig) "ajR" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/permabrig) -"ajS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) -"ajT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) -"ajU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) +"ajS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) +"ajT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) +"ajU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/permabrig) "ajV" = (/turf/simulated/wall,/area/security/armoury) "ajW" = (/obj/structure/rack,/obj/item/weapon/storage/box/teargas,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/armoury) "ajX" = (/obj/structure/table/wood,/obj/machinery/recharger,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) @@ -543,7 +543,7 @@ "akw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "akx" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aky" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"akz" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"akz" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "akA" = (/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/armoury) "akB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/hostile/retaliate/araneus,/turf/simulated/floor/carpet,/area/security/hos) "akC" = (/obj/structure/table/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/clothing/head/beret/sec,/obj/item/clothing/suit/jacket/pilot,/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) @@ -568,7 +568,7 @@ "akV" = (/obj/machinery/photocopier,/obj/machinery/power/apc{dir = 4; name = "Head of Security's Office APC"; pixel_x = 24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door_control{id = "hosprivacy"; name = "Privacy Shutters Control"; pixel_x = 26; pixel_y = -26},/obj/machinery/camera{c_tag = "Head of Security's Office"; dir = 8; network = list("SS13")},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/hos) "akW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/machinery/flasher/portable,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/armoury) "akX" = (/obj/structure/closet/bombcloset,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/armoury) -"akY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"akY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "akZ" = (/obj/machinery/flasher/portable,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/armoury) "ala" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/armoury) "alb" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/carpet/arcade,/area/crew_quarters/fitness{name = "\improper Arcade"}) @@ -588,9 +588,9 @@ "alp" = (/obj/machinery/mass_driver{dir = 8; id_tag = "trash"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal) "alq" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/turf/simulated/floor/plating,/area/maintenance/disposal) "alr" = (/turf/simulated/floor/plating,/area/maintenance/disposal) -"als" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"als" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "alt" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"alu" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"alu" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hosprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "alv" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/auxsolarport) "alw" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "alx" = (/obj/structure/table,/obj/item/stack/medical/ointment{pixel_x = 3; pixel_y = -2},/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/epinephrine,/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 28},/obj/item/weapon/restraints/handcuffs/cable/pink,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -1312,7 +1312,7 @@ "azl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep) "azm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/crew_quarters/sleep) "azn" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboard) -"azo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) +"azo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) "azp" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/starboard) "azq" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) "azr" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) @@ -1449,10 +1449,10 @@ "aBS" = (/obj/structure/stool/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aBT" = (/obj/item/weapon/caution,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) "aBU" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/starboard) -"aBV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aBV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aBW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "aBX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) -"aBY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aBY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aBZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) "aCa" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/starboard) "aCb" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Engineering"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/maintenance/starboard) @@ -1501,7 +1501,7 @@ "aCS" = (/turf/simulated/wall,/area/security/detectives_office) "aCT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig) "aCU" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 26},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) -"aCV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aCV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aCW" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/sign/chinese{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aCX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep) "aCY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) @@ -1542,7 +1542,7 @@ "aDH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/security/nuke_storage) "aDI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/security/nuke_storage) "aDJ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/siberia) -"aDK" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aDK" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aDL" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) "aDM" = (/obj/machinery/flasher{id = "Cell 1"; pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "aDN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) @@ -1565,7 +1565,7 @@ "aEe" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 32},/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/carpet,/area/security/detectives_office) "aEf" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/fore) "aEg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) -"aEh" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aEh" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aEi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "aEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aEk" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) @@ -1577,7 +1577,7 @@ "aEq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aEr" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "aEs" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/starboard) -"aEt" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aEt" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aEu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "aEv" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) "aEw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -1651,7 +1651,7 @@ "aFM" = (/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3; tag = "icon-plant-20"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "aFN" = (/obj/structure/table/wood,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 1},/obj/machinery/photocopier/faxmachine/longrange,/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "aFO" = (/obj/structure/dispenser,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) -"aFP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aFP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) "aFQ" = (/obj/item/stack/sheet/plasteel{amount = 10; pixel_x = -2; pixel_y = 2},/obj/structure/table,/obj/item/stack/sheet/rglass{amount = 30; pixel_x = 2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "aFR" = (/turf/simulated/wall,/area/engine/engineering) "aFS" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering) @@ -1681,7 +1681,7 @@ "aGq" = (/obj/machinery/camera/motion{c_tag = "Vault"; dir = 1; network = list("MiniSat")},/obj/machinery/light,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/security/nuke_storage) "aGr" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "aGs" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/shuttle/plating,/area/shuttle/siberia) -"aGt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aGt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ceprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/chiefs_office) "aGu" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/construction/Storage{name = "Storage Wing"}) "aGv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering) "aGw" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/construction) @@ -1767,7 +1767,7 @@ "aHY" = (/obj/structure/closet/crate/internals,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aHZ" = (/obj/item/weapon/paper_bin{pixel_x = -4; pixel_y = 10},/obj/structure/table/wood,/obj/item/device/radio/intercom{broadcasting = 0; frequency = 1424; listening = 1; name = "Interrogation Intercom"; pixel_x = 0; pixel_y = -31},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/main) "aIa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -3; pixel_y = 2},/obj/item/weapon/storage/secure/briefcase{pixel_x = 2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"aIb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aIb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aIc" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -32},/obj/machinery/door_control{id = "Toilet3"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aId" = (/obj/machinery/door/airlock{id_tag = "Toilet3"; name = "Unit 3"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "aIe" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) @@ -1799,7 +1799,7 @@ "aIE" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/engineering) "aIF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/engine/engineering) "aIG" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/construction) -"aIH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aIH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) "aII" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/brig) "aIJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aIK" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/mining) @@ -1868,8 +1868,8 @@ "aJV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "aJW" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space) "aJX" = (/turf/simulated/floor/wood,/area/lawoffice) -"aJY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) -"aJZ" = (/obj/machinery/door/window/westleft{dir = 4; name = "Bridge Deliveries"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.6; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/bridge) +"aJY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.9; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) +"aJZ" = (/obj/machinery/door/window/westleft{dir = 4; name = "Bridge Deliveries"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.6; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/bridge) "aKa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Gear Room"; req_access_txt = "0"; req_one_access_txt = "1;4"},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/brig) "aKb" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig) "aKc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig) @@ -1886,7 +1886,7 @@ "aKn" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/public/glass{name = "Primary Tool Storage"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/storage/primary) "aKo" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/primary/fore) "aKp" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/quartermaster/storage) -"aKq" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"aKq" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) "aKr" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/camera{c_tag = "Storage Wing - Security Access Door"; dir = 4; network = list("SS13")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/fore) "aKs" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/fore) "aKt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/fore) @@ -2158,11 +2158,11 @@ "aPz" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/space) "aPA" = (/obj/machinery/light_construct{dir = 8},/turf/simulated/floor/plating,/area/construction) "aPB" = (/obj/item/weapon/crowbar/red,/turf/simulated/floor/plating,/area/construction) -"aPC" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"aPC" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) "aPD" = (/obj/machinery/light_construct{dir = 4},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel,/area/construction) "aPE" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/poddoor{id_tag = "QMLoaddoor2"; name = "supply dock loading door"},/turf/simulated/shuttle/plating,/area/shuttle/supply) -"aPF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) -"aPG" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"aPF" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"aPG" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hop"; layer = 2.9; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) "aPH" = (/obj/machinery/conveyor{dir = 10; id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage) "aPI" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "aPJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -2176,7 +2176,7 @@ "aPR" = (/obj/machinery/door/window/northleft{dir = 8; name = "MuleBot Supply Access"; req_access_txt = "50"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aPT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aPU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"aPU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "aPV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aPX" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) @@ -2225,7 +2225,7 @@ "aQO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 5},/area/hallway/secondary/construction{name = "\improper Garden"}) "aQP" = (/obj/machinery/door/firedoor/border_only{density = 1; dir = 8; icon_state = "door_closed"; name = "Animal Pen A"; opacity = 1},/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) "aQQ" = (/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) -"aQR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; open_layer = 2.9; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"aQR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; open_layer = 2.9; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "aQS" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/engine/engineering) "aQT" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/engine/engineering) "aQU" = (/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/engine/engineering) @@ -2243,7 +2243,7 @@ "aRg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "aRh" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/space) "aRi" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plating,/area/construction) -"aRj" = (/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"aRj" = (/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "aRk" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/shuttle/plating,/area/shuttle/supply) "aRl" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/quartermaster/storage) "aRm" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/quartermaster/storage) @@ -2398,7 +2398,7 @@ "aUf" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/item/weapon/cartridge/lawyer,/obj/item/weapon/pen/multi,/turf/simulated/floor/wood,/area/lawoffice) "aUg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/storage/primary) "aUh" = (/obj/structure/table,/obj/item/weapon/wirecutters,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Tool Storage"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary) -"aUi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) +"aUi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/command/glass{layer = 2.9; name = "Bridge Access"; req_access_txt = "19"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; layer = 2.7; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "aUj" = (/obj/structure/table,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/aiModule/quarantine,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aUk" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "aUl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) @@ -2425,7 +2425,7 @@ "aUG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) "aUH" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) "aUI" = (/obj/structure/rack,/obj/item/clothing/gloves/color/fyellow,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) -"aUJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "kitchenwindow"; layer = 2.9; name = "kitchen shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"aUJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "kitchenwindow"; layer = 2.9; name = "kitchen shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "aUK" = (/obj/machinery/computer/atmos_alert,/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) "aUL" = (/obj/machinery/computer/station_alert,/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) "aUM" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/computer/monitor{name = "Engineering Power Monitoring Console"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering - Power Monitoring"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) @@ -2439,7 +2439,7 @@ "aUU" = (/obj/structure/window/reinforced,/turf/space,/area/space) "aUV" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space) "aUW" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/shuttle/floor,/area/shuttle/pod_1) -"aUX" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "kitchenwindow"; layer = 2.9; name = "kitchen shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"aUX" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "kitchenwindow"; layer = 2.9; name = "kitchen shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "aUY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/construction) "aUZ" = (/obj/structure/table,/obj/item/stack/cable_coil{amount = 5},/obj/item/device/flashlight,/turf/simulated/floor/plasteel,/area/construction) "aVa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -3213,7 +3213,7 @@ "bjO" = (/obj/machinery/status_display{dir = 4; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bjP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bjQ" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/ai) -"bjR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "AI Core Shutters"; name = "AI Chamber Entrance Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/turret_protected/ai) +"bjR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "AI Core Shutters"; name = "AI Chamber Entrance Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/turret_protected/ai) "bjS" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "vault"},/area/turret_protected/ai) "bjT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bjU" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) @@ -3266,8 +3266,8 @@ "bkP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bkQ" = (/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "bkR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/tools) -"bkS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) -"bkT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"bkS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"bkT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "bkU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) "bkV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) "bkW" = (/turf/simulated/wall/r_wall,/area/bridge) @@ -3293,8 +3293,8 @@ "blq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Tech Storage"; req_access_txt = "0"; req_one_access_txt = "23;30"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/storage/tech) "blr" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/incinerator) "bls" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room) -"blt" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) -"blu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"blt" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"blu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) "blv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) "blw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Engineering Security Post"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/checkpoint/engineering) "blx" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) @@ -3413,7 +3413,7 @@ "bnG" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) "bnH" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_4) "bnI" = (/obj/machinery/door/airlock/external{name = "Escape Pod Four"; req_access = null; req_access_txt = "32"},/turf/simulated/floor/plating,/area/maintenance/starboard) -"bnJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "AI Chamber Entrance Shutters"; name = "AI Chamber Entrance Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/flasher{id = "AI"; pixel_x = -25; pixel_y = 0},/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"bnJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "AI Chamber Entrance Shutters"; name = "AI Chamber Entrance Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/flasher{id = "AI"; pixel_x = -25; pixel_y = 0},/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "bnK" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bnL" = (/obj/machinery/porta_turret{dir = 8},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) "bnM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -3678,7 +3678,7 @@ "bsL" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/space,/area/space) "bsM" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer{name = "\improper MiniSat Teleporter Foyer"}) "bsN" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/turf/space,/area/space) -"bsO" = (/obj/structure/table/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "hop"; layer = 3.1; name = "privacy shutters"; opacity = 0},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northleft{dir = 2; icon_state = "left"; name = "Reception Window"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) +"bsO" = (/obj/structure/table/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "hop"; layer = 3.1; name = "privacy shutters"; opacity = 0},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northleft{dir = 2; icon_state = "left"; name = "Reception Window"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bsP" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-SW"},/obj/structure/lattice,/turf/space,/area/space) "bsQ" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) "bsR" = (/obj/structure/transit_tube{icon_state = "E-SW"; tag = "icon-E-NW"},/obj/structure/lattice,/turf/space,/area/space) @@ -3700,7 +3700,7 @@ "bth" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "bti" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station) "btj" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/arrival/station) -"btk" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/blueshield) +"btk" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/blueshield) "btl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry{name = "Arrivals"}) "btm" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "btn" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/primary/port) @@ -3805,9 +3805,9 @@ "bvi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bvj" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/camera{c_tag = "Arrivals - Station Entrance"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bvk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) -"bvl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/blueshield) +"bvl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/blueshield) "bvm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Transit Tube"; req_one_access_txt = "32;19"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) -"bvn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "transittube"; name = "Transit Tube Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"bvn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "transittube"; name = "Transit Tube Blast Door"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) "bvo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) "bvp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/break_room) "bvq" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) @@ -3818,7 +3818,7 @@ "bvv" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "bvw" = (/obj/structure/transit_tube,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "bvx" = (/obj/machinery/door_control{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "12"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"bvy" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/ntrep) +"bvy" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/ntrep) "bvz" = (/obj/item/toy/cards/deck{pixel_y = 4},/obj/structure/table/wood/poker,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bvA" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera{c_tag = "Arrivals - Lounge"; dir = 4; network = list("SS13")},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/primary/port) "bvB" = (/turf/simulated/floor/carpet,/area/hallway/primary/port) @@ -3862,7 +3862,7 @@ "bwn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bwo" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/displaycase/captains_laser,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bwp" = (/obj/structure/table/wood,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Maltese Falcon - Backroom"; dir = 2; network = list("SS13")},/obj/item/device/eftpos,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bwq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) +"bwq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) "bwr" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/power/apc{dir = 8; name = "Captain's Quarters APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/light/small{dir = 8},/obj/item/weapon/paper{info = "Congratulations,

Your station has been selected to carry out the Gateway Project.

The equipment will be shipped to you at the start of the next quarter.
You are to prepare a secure location to house the equipment as outlined in the attached documents.

--Nanotrasen Blue Space Research"; name = "Confidential Correspondence, Pg 1"; pixel_x = 0; pixel_y = 0},/obj/item/weapon/coin/plasma,/obj/item/weapon/melee/chainofcommand,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bws" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bwt" = (/obj/structure/table/wood,/obj/item/weapon/stamp/captain,/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) @@ -3902,7 +3902,7 @@ "bxb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/computer/drone_control,/turf/simulated/floor/plasteel,/area/engine/break_room) "bxc" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) "bxd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/break_room) -"bxe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "transittube"; name = "Transit Tube Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"bxe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "transittube"; name = "Transit Tube Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) "bxf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Transit Tube"; req_one_access_txt = "32;19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) "bxg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/break_room) "bxh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) @@ -4093,11 +4093,11 @@ "bAK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) "bAL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) "bAM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) -"bAN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/explab) +"bAN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/explab) "bAO" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/engine/break_room) -"bAP" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) -"bAQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) -"bAR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"bAP" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"bAQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) +"bAR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/break_room) "bAS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/engine/break_room) "bAT" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) "bAU" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/obj/machinery/light_switch{pixel_x = -8; pixel_y = -24},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 5; pixel_y = -26},/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/break_room) @@ -4187,7 +4187,7 @@ "bCA" = (/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 0; pixel_y = 28},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bCB" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Bar APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bCC" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bCD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/ntrep) +"bCD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/ntrep) "bCE" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Club - Fore"; dir = 2; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bCF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bCG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_Toxins = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -4255,7 +4255,7 @@ "bDQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "bDR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bDS" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/weapon/gun/projectile/revolver/russian,/obj/item/clothing/mask/cigarette/cigar/cohiba,/obj/item/toy/cards/deck/syndicate); name = "gambling valuables spawner"},/obj/structure/table/wood/poker,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bDT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) +"bDT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) "bDU" = (/obj/machinery/door/poddoor/shutters/preopen{dir = 2; id_tag = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bDV" = (/obj/structure/table/wood,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bDW" = (/obj/structure/table/wood,/obj/item/weapon/folder/yellow,/obj/machinery/firealarm{pixel_y = 28},/obj/item/weapon/book/manual/security_space_law{pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) @@ -4299,7 +4299,7 @@ "bEI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) "bEJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Arrivals - Middle Arm"; dir = 1; network = list("SS13")},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bEK" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/mask/gas,/obj/machinery/alarm{pixel_y = 23},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/simulated/floor/plasteel{dir = 9; icon_state = "caution"},/area/atmos) -"bEL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/item/clothing/glasses/meson,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) +"bEL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/item/clothing/glasses/meson,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) "bEM" = (/obj/machinery/computer/atmos_alert,/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/camera{c_tag = "Atmospherics - Control Room"; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "bEN" = (/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/obj/machinery/computer/atmoscontrol,/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "bEO" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = 32},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/obj/structure/table,/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/atmos) @@ -4307,7 +4307,7 @@ "bEQ" = (/obj/machinery/power/apc{cell_type = 10000; dir = 1; name = "Atmospherics APC"; pixel_x = 0; pixel_y = 28},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/camera{c_tag = "Atmospherics - Entrance"; network = list("SS13")},/turf/simulated/floor/plasteel,/area/atmos) "bER" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos) "bES" = (/obj/machinery/space_heater,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/atmos) -"bET" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"bET" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) "bEU" = (/obj/machinery/meter{frequency = 1443; id = "wloop_atm_meter"; name = "Waste Loop"},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "bEV" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/binary/volume_pump/on{dir = 8; name = "Distro to Waste"; on = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "bEW" = (/obj/machinery/meter{frequency = 1443; id = "dloop_atm_meter"; name = "Distribution Loop"},/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) @@ -4375,8 +4375,8 @@ "bGg" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bGh" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bGi" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area/crew_quarters/bar) -"bGj" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) -"bGk" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"bGj" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"bGk" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) "bGl" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bGm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/theatre) "bGn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/turf/simulated/floor/carpet,/area/crew_quarters/theatre) @@ -4386,7 +4386,7 @@ "bGr" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/window/reinforced{dir = 1},/obj/machinery/camera{c_tag = "Starboard Primary Hallway - Atmospherics"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 8},/area/hallway/primary/starboard) "bGs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/starboard) "bGt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/starboard) -"bGu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"bGu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) "bGv" = (/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/structure/table,/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bGw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos) "bGx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos) @@ -4442,7 +4442,7 @@ "bHv" = (/obj/machinery/vending/coffee,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/library) "bHw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/library) "bHx" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor/wood,/area/library) -"bHy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) +"bHy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "council blast"; layer = 2.9; name = "Council Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge) "bHz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/shutters/preopen{dir = 2; id_tag = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "loadingarea"; tag = "loading"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bHA" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar) "bHB" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) @@ -4510,8 +4510,8 @@ "bIL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bIM" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "bIN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/theatre) -"bIO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/explab) -"bIP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/explab) +"bIO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/explab) +"bIP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "telelab"; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/explab) "bIQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/security/vacantoffice) "bIR" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/security/vacantoffice) "bIS" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/wood,/area/security/vacantoffice) @@ -4669,7 +4669,7 @@ "bLO" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/hallway/primary/starboard) "bLP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/starboard) "bLQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/starboard) -"bLR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Atmospherics"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos) +"bLR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 4; location = "Atmospherics"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos) "bLS" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bLT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos) "bLU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/atmos) @@ -4718,7 +4718,7 @@ "bML" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;37"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bMM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/carpet,/area/library) "bMN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/wood,/area/library) -"bMO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) +"bMO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/engine/engineering) "bMP" = (/obj/machinery/bookbinder,/turf/simulated/floor/wood,/area/library) "bMQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bMR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) @@ -5053,7 +5053,7 @@ "bTi" = (/obj/item/stack/sheet/cardboard,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "bTj" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fore) "bTk" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/fore) -"bTl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) +"bTl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "bTm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = -32},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-03"; layer = 4.1; tag = "icon-plant-03"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/hallway/secondary/entry{name = "Arrivals"}) "bTn" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/wood,/area/security/vacantoffice) "bTo" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/wood,/area/security/vacantoffice) @@ -5147,7 +5147,7 @@ "bUY" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/item/weapon/folder/blue{pixel_x = 4; pixel_y = 6},/obj/item/weapon/paper/blueshield,/turf/simulated/floor/plasteel{icon_state = "bcarpet05"},/area/blueshield) "bUZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "bcarpet05"},/area/blueshield) "bVa" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/blueshield) -"bVb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) +"bVb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.9; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "bVc" = (/obj/structure/table/wood,/obj/machinery/computer/skills{req_access_txt = "57"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/ntrep) "bVd" = (/obj/structure/table/wood,/obj/item/weapon/folder,/obj/item/weapon/stamp/centcom,/obj/item/weapon/pen/multi/fountain,/turf/simulated/floor/carpet,/area/ntrep) "bVe" = (/obj/machinery/door/window{dir = 1; name = "Desk Door"; req_access_txt = "73"},/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 0},/turf/simulated/floor/wood,/area/ntrep) @@ -5336,7 +5336,7 @@ "bYF" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) "bYG" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/starboard) "bYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) -"bYI" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bYI" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bYJ" = (/obj/structure/closet/fireaxecabinet{pixel_x = -32; pixel_y = 0},/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bYK" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "bYL" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11},/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos) @@ -5351,8 +5351,8 @@ "bYU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bYV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bYW" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"bYX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bYY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bYX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bYY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bYZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bZa" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -4; pixel_y = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/quartermaster/qm) "bZb" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/library) @@ -5456,14 +5456,14 @@ "caV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/hydroponics) "caW" = (/obj/item/trash/candy,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "caX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/starboard) -"caY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"caY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) "caZ" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/starboard) "cba" = (/obj/item/device/radio/intercom{pixel_y = -25},/obj/machinery/camera{c_tag = "Kitchen"; dir = 1; network = list("SS13")},/obj/machinery/kitchen_machine/grill,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "cbb" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/kitchen_machine/oven,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "cbc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cbd" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/atmos) "cbe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/crew_quarters/locker) -"cbf" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"cbf" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "rdprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/hor) "cbg" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cbh" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel,/area/atmos) "cbi" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 8; tag = ""},/turf/simulated/floor/plasteel,/area/atmos) @@ -5509,7 +5509,7 @@ "cbW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering) "cbX" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/starboard) "cbY" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) -"cbZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"}) +"cbZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cca" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/turf/simulated/floor/plasteel{dir = 9; icon_state = "caution"},/area/atmos) "ccb" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) "ccc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) @@ -5573,7 +5573,7 @@ "cdi" = (/obj/machinery/seed_extractor,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hydroponics) "cdj" = (/obj/structure/closet/secure_closet/hydroponics,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/item/weapon/storage/backpack/satchel_hyd,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "cdk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/firealarm{pixel_y = 29},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) -"cdl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters/preopen{dir = 8; id_tag = "toxins_blastdoor"; name = "biohazard containment shutters"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Toxins Lab"; req_access_txt = "8"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"cdl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters/preopen{dir = 8; id_tag = "toxins_blastdoor"; name = "biohazard containment shutters"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Toxins Lab"; req_access_txt = "8"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cdm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/starboard) "cdn" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cdo" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -5600,7 +5600,7 @@ "cdJ" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cdK" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cdL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cdM" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"}) +"cdM" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cdN" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cdO" = (/obj/structure/girder,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cdP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/public/glass{name = "Locker Room"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/crew_quarters/locker) @@ -5656,7 +5656,7 @@ "ceN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "ceO" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/poster/random_contraband,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "ceP" = (/obj/machinery/light/small,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/engineering) -"ceQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access"; req_access_txt = "8"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"ceQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "toxins_blastdoor"; layer = 2.7; name = "privacy shutters"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access"; req_access_txt = "8"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "ceR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "ceS" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Security Post - Cargo"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint/supply{name = "Security Post - Cargo"}) "ceT" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -5729,7 +5729,7 @@ "cgi" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -4; pixel_y = 10},/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "cgj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "cgk" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -4; pixel_y = 10},/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos) -"cgl" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos) +"cgl" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos) "cgm" = (/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "cgn" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plating,/area/atmos) "cgo" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -6191,8 +6191,8 @@ "cpc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/bridge/meeting_room{name = "\improper Command Hallway"}) "cpd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/glass,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cpe" = (/obj/machinery/reagentgrinder,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cpf" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cpg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cpf" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cpg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cph" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1441; id = "n2_in"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cpi" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cpj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; frequency = 1441; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) @@ -6213,7 +6213,7 @@ "cpy" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "cpz" = (/obj/machinery/door_control{id = "acutesep"; name = "Acute Separation Shutters Control"; pixel_x = -23; pixel_y = 23},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/exam_room) "cpA" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cpB" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/exam_room) +"cpB" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/exam_room) "cpC" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/exam_room) "cpD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical/glass{id_tag = null; name = "Medbay Storage"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/medbay2{name = "Medbay Storage"}) "cpE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2{name = "Medbay Storage"}) @@ -6240,14 +6240,14 @@ "cpZ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "cqa" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/exam_room) "cqb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/exam_room) -"cqc" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cqc" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cqd" = (/obj/machinery/computer/rdconsole/core,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) "cqe" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) "cqf" = (/obj/machinery/r_n_d/circuit_imprinter{pixel_y = 4},/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/lab) "cqg" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/lab) "cqh" = (/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/lab) "cqi" = (/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/lab) -"cqj" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #2"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cqj" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #2"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cqk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"}) "cql" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cqm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"}) @@ -6273,7 +6273,7 @@ "cqG" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cqH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 4; pixel_y = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = -1},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 6},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cqI" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "turbine_control"; name = "Gas Turbine Airlock Control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/obj/structure/sign/fire{pixel_x = 32},/turf/simulated/floor/engine,/area/maintenance/incinerator) -"cqJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cqJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cqK" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cqL" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cqM" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - N2"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) @@ -6287,7 +6287,7 @@ "cqU" = (/turf/simulated/floor/plasteel{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cqV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cqW" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/atmos) -"cqX" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cqX" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio8"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cqY" = (/obj/structure/closet/secure_closet/bar{pixel_x = -3; pixel_y = -1; req_access_txt = "25"},/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "cqZ" = (/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "cra" = (/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6295,10 +6295,10 @@ "crc" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft{name = "Aft Maintenance"}) "crd" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/exam_room) "cre" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/exam_room) -"crf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"crf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "crg" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/exam_room) "crh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/medical/reception) -"cri" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"cri" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "crj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/reception) "crk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/reception) "crl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/reception) @@ -6308,7 +6308,7 @@ "crp" = (/obj/machinery/power/apc{dir = 1; name = "Medbay Central APC"; pixel_y = 24},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Medbay Hallway Fore"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/reception) "crq" = (/obj/machinery/door_control{id = "telelab"; name = "Test Chamber Blast Doors"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/dropper,/obj/item/stack/medical/bruise_pack/advanced,/obj/item/stack/medical/ointment/advanced,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) "crr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"crs" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"crs" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "crt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/medical/reception) "cru" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/reception) "crv" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6345,16 +6345,16 @@ "csa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/noticeboard{pixel_y = -32},/obj/machinery/light,/obj/machinery/camera{c_tag = "Research Division - Break Room"; dir = 1; network = list("SS13","RD")},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "csb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "csc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/toxins/explab) -"csd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"cse" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #3"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"csf" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #4"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"cse" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #3"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csf" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #4"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csh" = (/obj/machinery/door/airlock/maintenance{icon_state = "door_closed"; locked = 0; name = "Storage Room"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) "csj" = (/obj/effect/decal/cleanable/blood,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csk" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/mask/surgical,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csl" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"csm" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csm" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csn" = (/obj/item/stack/packageWrap,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cso" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/binary/pump/on,/turf/space,/area/space) "csp" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space) @@ -6368,24 +6368,24 @@ "csx" = (/obj/machinery/light_construct/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "csy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/disposalpipe/segment,/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "csz" = (/obj/machinery/door/airlock/maintenance{name = "Experimentation Lab Maintenance"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/toxins/explab) -"csA" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"csB" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csA" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csB" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csC" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24; shock_proof = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/exam_room) -"csD" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csD" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/exam_room) -"csF" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #5"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csF" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #5"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/exam_room) "csH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/exam_room) -"csI" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"csI" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "csJ" = (/turf/simulated/wall,/area/medical/cmo) -"csK" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #6"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"csL" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) -"csM" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csK" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #6"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csL" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csM" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; layer = 2.5; name = "containment blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 2; initialize_directions = 11},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/exam_room) "csO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/reception) -"csP" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"csP" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "csQ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) -"csR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"csR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "csS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "csT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/sign/science{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/aft) "csU" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/lab) @@ -6397,14 +6397,14 @@ "cta" = (/obj/machinery/door/window/westleft{dir = 2; name = "Research Division Deliveries"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/maintenance/aft{name = "Aft Maintenance"}) "ctb" = (/obj/machinery/door/airlock{name = "Research Emergency Storage"; req_access_txt = "0"; req_one_access_txt = "47"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "ctc" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{id_tag = ""; name = "Research Break Room"; req_access_txt = "0"; req_one_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) -"ctd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"ctd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cte" = (/turf/simulated/wall,/area/toxins/explab) "ctf" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) "ctg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "cth" = (/obj/structure/table/reinforced,/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) "cti" = (/obj/machinery/computer/rdconsole/experiment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) "ctj" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/book/manual/experimentor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) -"ctk" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"ctk" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "ctl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) "ctm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "ctn" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6433,14 +6433,14 @@ "ctK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/reception) "ctL" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/medical/cryo) "ctM" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/reception) -"ctN" = (/obj/machinery/door/window/southleft{dir = 2; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"ctN" = (/obj/machinery/door/window/southleft{dir = 2; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "ctO" = (/obj/structure/table,/obj/machinery/door/window/eastright{name = "Medical Reception"; req_access_txt = "5"},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "ctP" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/reception) "ctQ" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "ctR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "ctS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "ctT" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) -"ctU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) +"ctU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Xenolab"; layer = 2.5; name = "test chamber blast door"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "ctV" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "ctW" = (/obj/machinery/computer/operating,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "ctX" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) @@ -6500,9 +6500,9 @@ "cuZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cva" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cvb" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) -"cvc" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "acute2"; name = "Acute 2 Privacy Shutters"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Acute Treatment 2"; req_access_txt = "5"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) -"cvd" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acute2"; name = "Acute 2 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) -"cve" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"cvc" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "acute2"; name = "Acute 2 Privacy Shutters"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Acute Treatment 2"; req_access_txt = "5"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"cvd" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "acute2"; name = "Acute 2 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) +"cve" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "acute1"; name = "Acute 1 Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "cvf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Acute Treatment 1"; req_access_txt = "5"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/exam_room) "cvg" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/medbay3) "cvh" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3) @@ -6668,11 +6668,11 @@ "cyl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/aft{name = "Aft Maintenance"}) "cym" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cyn" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"cyo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery1) +"cyo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery1) "cyp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cyq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/carpet/arcade,/area/crew_quarters/fitness{name = "\improper Arcade"}) "cyr" = (/obj/machinery/door/firedoor,/obj/machinery/status_display{dir = 4; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay3) -"cys" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "cmoprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) +"cys" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "cmoprivacy"; layer = 2.7; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "cyt" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3) "cyu" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay3) "cyv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay3) @@ -6781,7 +6781,7 @@ "cAu" = (/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/genetics) "cAv" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/aft) "cAw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cAx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/surgeryobs) +"cAx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/surgeryobs) "cAy" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "cAz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/surgeryobs) "cAA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/aft) @@ -7017,7 +7017,7 @@ "cEW" = (/obj/machinery/computer/cloning,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/medical/genetics_cloning) "cEX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft) "cEY" = (/turf/simulated/wall,/area/medical/surgery2) -"cEZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery2) +"cEZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery2) "cFa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery1"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "cFb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/power/apc{dir = 4; name = "Cloning Lab APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable/yellow,/obj/machinery/camera{c_tag = "Genetics Cloning Lab"; dir = 8; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/genetics_cloning) "cFc" = (/obj/machinery/status_display{dir = 4; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay3) @@ -7563,7 +7563,7 @@ "cPw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/morgue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cPx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cPy" = (/turf/simulated/wall,/area/medical/medbay3) -"cPz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay3) +"cPz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay3) "cPA" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3) "cPB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay3) "cPC" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","RD")},/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) @@ -8032,7 +8032,7 @@ "cYz" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=14.8-Dorms-Lockers"; location = "14.5-Recreation"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "cYA" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "aftstarboard"; name = "Aft-Starboard Solar Array"},/turf/simulated/floor/plating/airless{icon_state = "solarpanel"},/area/solar/starboard) "cYB" = (/turf/simulated/floor/plating/airless/catwalk,/area/solar/starboard) -"cYC" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/psych) +"cYC" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/psych) "cYD" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/escape) "cYE" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/escape) "cYF" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape) @@ -8367,7 +8367,7 @@ "deY" = (/obj/structure/stool,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) "deZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfa" = (/obj/machinery/computer/rdconsole/mechanics,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) -"dfb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) +"dfb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfc" = (/obj/machinery/spod_part_fabricator,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfd" = (/obj/machinery/camera,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfe" = (/obj/structure/table,/obj/item/pod_parts/core,/obj/item/weapon/circuitboard/mecha/pod,/obj/item/clothing/glasses/welding{pixel_y = 12},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) @@ -8375,7 +8375,7 @@ "dfg" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfh" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfi" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/trash/cheesie,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"dfj" = (/obj/effect/decal/warning_stripes/west,/obj/effect/decal/warning_stripes/north,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"dfj" = (/obj/effect/decal/warning_stripes/west,/obj/effect/decal/warning_stripes/north,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfk" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfl" = (/obj/structure/spacepoddoor,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 7; on = 1},/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) @@ -8386,8 +8386,8 @@ "dfr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) "dfs" = (/obj/machinery/door/airlock/centcom{name = "Chapel Office"; opacity = 1; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "dft" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) -"dfu" = (/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) -"dfv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "chapelparlourshutters"; layer = 2.7; name = "chapel shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/main) +"dfu" = (/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"dfv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "chapelparlourshutters"; layer = 2.7; name = "chapel shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/main) "dfw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) "dfx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) @@ -8401,7 +8401,7 @@ "dfG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "dfH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "Mechanic Workshop APC"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) -"dfJ" = (/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"dfJ" = (/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "dfL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "dfM" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating{icon_state = "floorgrime"},/area/shuttle/escape) @@ -8480,7 +8480,7 @@ "dhh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/escape) "dhi" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) "dhj" = (/obj/structure/bookcase{name = "Holy Bookcase"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"dhl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "chapelspaceshutters"; layer = 2.7; name = "chapel shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/main) +"dhl" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "chapelspaceshutters"; layer = 2.7; name = "chapel shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/main) "dhn" = (/turf/space,/area/chapel/main) "dho" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 4},/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 8},/obj/item/weapon/pen{pixel_x = -3; pixel_y = 5},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "dhv" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/item/weapon/paper_bin{pixel_x = -4; pixel_y = 10},/turf/simulated/shuttle/floor,/area/shuttle/escape) diff --git a/_maps/map_files/RandomZLevels/example.dmm b/_maps/map_files/RandomZLevels/example.dmm index 4eb912a767f..56051520f37 100644 --- a/_maps/map_files/RandomZLevels/example.dmm +++ b/_maps/map_files/RandomZLevels/example.dmm @@ -48,8 +48,8 @@ "aV" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) "aW" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) "aX" = (/obj/machinery/door/airlock/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) -"aY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) -"aZ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) +"aY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "open"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) +"aZ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "open"; id_tag = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example) "ba" = (/obj/machinery/door_control{id = "example"; name = "Privacy Shutters"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) "bb" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) "bc" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/example) diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index aa1ef17a354..fbf5d6d3221 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -107,7 +107,7 @@ "cc" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/spacebattle/cruiser) "cd" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "ce" = (/turf/simulated/floor/plasteel{tag = "icon-damaged5"; icon_state = "damaged5"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) -"cf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "spacebattlepod"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) +"cf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "spacebattlepod"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) "cg" = (/turf/simulated/floor/plasteel{tag = "icon-damaged4"; icon_state = "damaged4"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) "ch" = (/mob/living/simple_animal/hostile/syndicate/melee/space,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "ci" = (/turf/simulated/floor/plasteel{tag = "icon-damaged2"; icon_state = "damaged2"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) @@ -168,7 +168,7 @@ "dl" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/awaymission/spacebattle/cruiser) "dm" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/awaymission/spacebattle/cruiser) "dn" = (/turf/simulated/floor/plasteel{tag = "icon-damaged4"; icon_state = "damaged4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) -"do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "spacebattlepod2"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) +"do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "spacebattlepod2"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) "dp" = (/turf/simulated/floor/plasteel{tag = "icon-damaged1"; icon_state = "damaged1"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) "dq" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/spacebattle/cruiser) "dr" = (/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/spacebattle/cruiser) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index d1558f77020..2487ab2a3cb 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -83,15 +83,15 @@ "abE" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/plating,/area/shuttle/abandoned) "abF" = (/obj/machinery/door_control{id = "whiteshippoddoor"; name = "Pod Door Control"; pixel_y = -24},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "abG" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"abH" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"abH" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "abI" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate) -"abJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) -"abK" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"abJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"abK" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "abL" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "abM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/wall/r_wall,/area/security/permabrig) "abN" = (/turf/simulated/wall/r_wall,/area/security/permabrig) -"abO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) -"abP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) +"abO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) +"abP" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) "abQ" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate) "abR" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "abS" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) @@ -116,17 +116,17 @@ "acl" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "acm" = (/obj/item/device/radio/intercom/syndicate{pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "acn" = (/obj/structure/closet/syndicate/personal,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"aco" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/permabrig) +"aco" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/permabrig) "acp" = (/obj/machinery/hydroponics/soil,/turf/simulated/floor/grass,/area/security/permabrig) "acq" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/syndicate) "acr" = (/obj/machinery/door/window{dir = 2; name = "Cockpit"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "acs" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "act" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"acu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) +"acu" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/permabrig) "acv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "acw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "acx" = (/obj/machinery/biogenerator,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"acy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/permabrig) +"acy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/permabrig) "acz" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "acA" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "acB" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/camera{c_tag = "Prison Garden"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) @@ -153,8 +153,8 @@ "acW" = (/turf/simulated/wall,/area/security/permabrig) "acX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/public/glass{name = "Prison Garden"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "acY" = (/obj/machinery/door/airlock/public/glass{name = "Prison Garden"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"acZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) -"ada" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) +"acZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) +"ada" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig) "adb" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "adc" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom/locked/prison{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "add" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/permabrig) @@ -181,7 +181,7 @@ "ady" = (/obj/structure/stool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "adz" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "adA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate) -"adB" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) +"adB" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate) "adC" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "adD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/stool,/obj/item/device/radio/intercom/locked/prison{pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "adE" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4; frequency = 1443; id = "air_in"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) @@ -222,7 +222,7 @@ "aen" = (/obj/machinery/camera{c_tag = "Prison West"; dir = 1; network = list("SS13")},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aeo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/security/permabrig) "aep" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aeq" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/permabrig) +"aeq" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/permabrig) "aer" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/security/permabrig) "aes" = (/obj/machinery/door/window{dir = 4; name = "Equipment Room"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aet" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "synd_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -246,7 +246,7 @@ "aeL" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/holofloor,/area/security/permabrig) "aeM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/security/permabrig) "aeN" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/holofloor,/area/security/permabrig) -"aeO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) +"aeO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/permabrig) "aeP" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Equipment Room"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aeQ" = (/obj/effect/spawner/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "aeR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -256,14 +256,14 @@ "aeV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aeW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aeX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aeY" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 1"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"aeY" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Lockdown 1"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "aeZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/permabrig) -"afa" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 2"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afa" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Lockdown 2"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afb" = (/obj/machinery/flasher{id = "permaflash1"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"afc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Lockdown 3"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Lockdown 3"; name = "Prison Lockdown Door"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Cell Door"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afd" = (/obj/machinery/flasher{id = "permaflash2"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afe" = (/obj/machinery/flasher{id = "permaflash3"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"aff" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/permabrig) +"aff" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/permabrig) "afg" = (/obj/item/device/radio/intercom/syndicate{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "afh" = (/obj/machinery/vending/sustenance,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) @@ -271,9 +271,9 @@ "afk" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig) "afl" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/security/permabrig) "afm" = (/obj/structure/grille,/obj/structure/sign/securearea{pixel_x = -30},/turf/simulated/floor/plating/airless,/area/space) -"afn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 1"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"afo" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 2"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) -"afp" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 3"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 1"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afo" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 2"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) +"afp" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison 3"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afq" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior East"; dir = 4; network = list("SS13")},/turf/space,/area/security/permabrig) "afr" = (/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior North"; dir = 2; network = list("SS13")},/obj/structure/lattice,/turf/space,/area/security/permabrig) "afs" = (/obj/machinery/door_control{id = "Prison Lockdown 1"; name = "Cell 1 Lockdown"; pixel_x = -3; pixel_y = 24; range = 5; req_access_txt = "2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) @@ -293,9 +293,9 @@ "afG" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/assembly/infra,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "afH" = (/obj/structure/table,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "afI" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank,/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"afJ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) -"afK" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) -"afL" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"afJ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/security/permabrig) +"afK" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) +"afL" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/permabrig) "afM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afN" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig) "afO" = (/turf/simulated/floor/plating/airless,/area/space) @@ -335,9 +335,9 @@ "agw" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/vox) "agx" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25; req_access_txt = "152"},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "agy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"agz" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"agA" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"agB" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"agz" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"agA" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"agB" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_mid"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "agC" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25; req_access_txt = "152"},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "agD" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "agE" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) @@ -371,15 +371,15 @@ "ahg" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ahh" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/obj/machinery/light/spot,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ahi" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"ahj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"ahk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"ahj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"ahk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "ahl" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access_txt = "152"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox) "ahm" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southwest_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahn" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox) -"aho" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"aho" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahp" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahq" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahr" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ahr" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahs" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/vox) "aht" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; req_one_access_txt = "152"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox) "ahu" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southeast_lock"; locked = 1; req_access_txt = "152"; req_one_access = null; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) @@ -397,10 +397,10 @@ "ahG" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/obj/machinery/light{dir = 1; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/mindshield,/turf/simulated/floor/plasteel,/area/security/armoury) "ahH" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/armoury) "ahI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"ahJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ahJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahK" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahL" = (/obj/item/clothing/head/collectable/petehat{desc = "It smells faintly of reptile."; name = "fancy leader hat"},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahM" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"ahM" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahN" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/shuttle/syndicate) "ahO" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/syndicate) "ahP" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/shuttle/syndicate) @@ -418,7 +418,7 @@ "aib" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) "aic" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plating,/area/security/permabrig) "aid" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"aie" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Solitary Confinement"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) +"aie" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Solitary Confinement"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) "aif" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/armoury) "aig" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "aih" = (/turf/simulated/wall/r_wall,/area/security/hos) @@ -442,7 +442,7 @@ "aiz" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/armoury) "aiA" = (/obj/effect/decal/warning_stripes/east,/obj/effect/decal/warning_stripes/west,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera/motion{c_tag = "Secure Armory"; dir = 4; network = list("SS13")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "aiB" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) -"aiC" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"aiC" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aiD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aiE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aiF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weed_extract,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -452,16 +452,16 @@ "aiJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aiK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aiL" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"aiM" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) +"aiM" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "aiN" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = -3},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) "aiO" = (/obj/effect/decal/warning_stripes/west,/obj/effect/decal/warning_stripes/east,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "aiP" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/vacantoffice{name = "\improper Security Toilet"}) "aiQ" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/vacantoffice{name = "\improper Security Toilet"}) "aiR" = (/obj/machinery/shower,/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/vacantoffice{name = "\improper Security Toilet"}) "aiS" = (/obj/structure/urinal{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/vacantoffice{name = "\improper Security Toilet"}) -"aiT" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) -"aiU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) -"aiV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) +"aiT" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) +"aiU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) +"aiV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/main) "aiW" = (/obj/item/toy/prize/honk,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aiX" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/glasses/sunglasses/blindfold,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "aiY" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) @@ -560,11 +560,11 @@ "akN" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/newscaster{pixel_y = 30},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "akO" = (/obj/structure/stool/bed/chair/e_chair{dir = 4},/obj/effect/landmark{name = "revenantspawn"},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/obj/effect/decal/warning_stripes/west,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "akP" = (/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) -"akQ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Execution Shutter"; name = "Execution Decency Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/execution{name = "\improper Prisoner Transfer Center"}) +"akQ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Execution Shutter"; name = "Execution Decency Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/execution{name = "\improper Prisoner Transfer Center"}) "akR" = (/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 2},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "akS" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/obj/effect/decal/warning_stripes/east,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "akT" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) -"akU" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) +"akU" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "akV" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "akW" = (/turf/simulated/wall,/area/security/range) "akX" = (/obj/effect/decal/warning_stripes/northwest,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/range) @@ -607,7 +607,7 @@ "alI" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/security/podbay) "alJ" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/security/podbay) "alK" = (/obj/machinery/camera{c_tag = "Prison Execution Chamber"; dir = 1; network = list("Prison","SS13")},/obj/effect/decal/warning_stripes/southwest,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_CO2 = 0; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) -"alL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Execution Shutter"; name = "Execution Decency Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/execution{name = "\improper Prisoner Transfer Center"}) +"alL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Execution Shutter"; name = "Execution Decency Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/execution{name = "\improper Prisoner Transfer Center"}) "alM" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/effect/decal/warning_stripes/southeast,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "alN" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/obj/machinery/light/small,/obj/machinery/atmospherics/binary/pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "alO" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/warning_stripes/west,/obj/machinery/door_control{id = "Execution Vent"; name = "Execution Vent Control"; pixel_x = -5; pixel_y = -28; req_access_txt = "1"},/obj/machinery/door_control{id = "Execution Shutter"; name = "Execution Shutter Control"; pixel_x = 5; pixel_y = -28; req_access_txt = "1"},/obj/machinery/atmospherics/binary/valve{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) @@ -678,8 +678,8 @@ "anb" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/security/hos) "anc" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "and" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/keycard_auth{pixel_x = -28; pixel_y = 2},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/carpet,/area/security/hos) -"ane" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) -"anf" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/range) +"ane" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"anf" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/range) "ang" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/range) "anh" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/camera{c_tag = "Prisoner Lockers"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel,/area/security/prisonlockers) "ani" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/plasteel,/area/security/prisonlockers) @@ -726,7 +726,7 @@ "anX" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/sop_security,/obj/item/weapon/book/manual/sop_legal,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/carpet,/area/security/hos) "anY" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "anZ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door_control{desc = "A remote control-switch to lock down the prison wing's blast doors"; id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = 7; range = 20; req_access_txt = "2"},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -28; pixel_y = -3; range = 20; req_access_txt = "2"},/turf/simulated/floor/carpet,/area/security/hos) -"aoa" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) +"aoa" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos) "aob" = (/turf/simulated/floor/plasteel,/area/security/prisonlockers) "aoc" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/security/prisonlockers) "aod" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/security/prisonlockers) @@ -848,7 +848,7 @@ "aqp" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "aqq" = (/obj/machinery/door/airlock/security{name = "Execution Room"; req_access = null; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "aqr" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/range) -"aqs" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/security/permabrig) +"aqs" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/security/glass{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/security/permabrig) "aqt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical/glass{id_tag = null; name = "Brig Medical Bay"; req_access_txt = "0"; req_one_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "aqu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical/glass{id_tag = null; name = "Brig Medical Bay"; req_access_txt = "0"; req_one_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "aqv" = (/turf/simulated/wall/r_wall,/area/security/warden) @@ -1039,19 +1039,19 @@ "atY" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/plasteel,/area/security/range) "atZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/security/range) "aua" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/security/range) -"aub" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Prisoner Processing"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) +"aub" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Prisoner Processing"; req_access_txt = "1"},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) "auc" = (/turf/simulated/wall,/area/security/brig) "aud" = (/turf/simulated/wall,/area/security/prisonershuttle) "aue" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/courtroomdandp) -"auf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/courtroomdandp) +"auf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/courtroomdandp) "aug" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/prison/cell_block/A) "auh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/prison/cell_block/A) "aui" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/seceqstorage) -"auj" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/lobby) -"auk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/lobby) +"auj" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/lobby) +"auk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigWest"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/lobby) "aul" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"aum" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/lobby) -"aun" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j1s"; name = "Brig Equipment Storage"; sortType = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/lobby) +"aum" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/lobby) +"aun" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j1s"; name = "Brig Equipment Storage"; sortType = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/security/glass{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/lobby) "auo" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "aup" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Security Pod"; dir = 2; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "auq" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/pod_3) @@ -1089,19 +1089,19 @@ "auW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/courtroomdandp) "auX" = (/obj/machinery/camera{c_tag = "Brig Security Courtroom Hall"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/courtroomdandp) "auY" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) -"auZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"auZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "ava" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_timer/cell_1{dir = 4; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) "avb" = (/obj/structure/closet/secure_closet/brig{id = "Cell 1"; name = "Cell 1 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 1"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison/cell_block/A) "avc" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/prison/cell_block/A) "avd" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/lobby) -"ave" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"ave" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "avf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/lobby) "avg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "avh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "darkred"},/area/security/brig) "avi" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkred"},/area/security/brig) "avj" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby) "avk" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"; name = "Cell 4 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 3"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prison/cell_block/B) -"avl" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"avl" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) "avm" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/prison/cell_block/B) "avn" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "avo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_timer/cell_4{dir = 8; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) @@ -1115,7 +1115,7 @@ "avw" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/shuttle/plating,/area/shuttle/pod_3) "avx" = (/obj/machinery/mineral/stacking_machine/laborstacker{input_dir = 2; output_dir = 1},/turf/simulated/shuttle/floor{icon = 'icons/turf/floors.dmi'; icon_state = "dark"},/area/shuttle/siberia) "avy" = (/turf/simulated/shuttle/wall,/area/shuttle/siberia) -"avz" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) +"avz" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) "avA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel,/area/security/processing) "avB" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/processing) "avC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/processing) @@ -1132,23 +1132,23 @@ "avN" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) "avO" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/courtroomdandp) "avP" = (/obj/machinery/light{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) -"avQ" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) +"avQ" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "avR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "avS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 4; pixel_y = 8},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison/cell_block/A) "avT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A) -"avU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"avV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"avU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"avV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "avW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "avX" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/brig) -"avY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"avY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "avZ" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkred"},/area/security/brig) "awa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prison/cell_block/B) -"awb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) -"awc" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) +"awb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"awc" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "awd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B) "awe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "awf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) -"awg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) +"awg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) "awh" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/processing) "awi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/processing) "awj" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/processing) @@ -1190,7 +1190,7 @@ "awT" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/courtroomdandp) "awU" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) "awV" = (/turf/simulated/wall,/area/security/processing) -"awW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"awW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "awX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{id_tag = "Brig"; name = "Prisoner Processing"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/processing) "awY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/radio/intercom{pixel_x = 28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) "awZ" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison/cell_block/A) @@ -1209,13 +1209,13 @@ "axm" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/flasher{id = "gulagshuttleflasher"; pixel_x = 25},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/siberia) "axn" = (/obj/structure/lattice,/obj/item/stack/cable_coil,/turf/space,/area/space) "axo" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/siberia) -"axp" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"axp" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) "axq" = (/obj/machinery/power/treadmill{dir = 4},/obj/machinery/treadmill_monitor{id = "Cell 4"; pixel_y = -32},/obj/structure/cable/yellow,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B) "axr" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "axs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "axt" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/turf/simulated/floor/plasteel,/area/security/processing) "axu" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/courtroomdandp) -"axv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) +"axv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Processing Shutter"; name = "Processing Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/security/processing) "axw" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/processing) "axx" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plasteel,/area/security/processing) "axy" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/processing) @@ -1227,8 +1227,8 @@ "axE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) "axF" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) "axG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) -"axH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/detectives_office) -"axI" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/detectives_office) +"axH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/detectives_office) +"axI" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/detectives_office) "axJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/security/prisonershuttle) "axK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prisonershuttle) "axL" = (/turf/simulated/floor/plasteel,/area/security/lobby) @@ -1239,12 +1239,12 @@ "axQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) "axR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "axS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) -"axT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/courtroomdandp) -"axU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) -"axV" = (/obj/structure/table/reinforced{layer = 2.5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Security Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) -"axW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) -"axX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) -"axY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"axT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Courtroom Prosecution and Defense"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkred"},/area/security/courtroomdandp) +"axU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"axV" = (/obj/structure/table/reinforced{layer = 2.5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/window/brigdoor{dir = 2; name = "Security Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/brig) +"axW" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"axX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) +"axY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "axZ" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/lobby) "aya" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/B) "ayb" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -1313,19 +1313,19 @@ "azm" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/security/courtroomdandp) "azn" = (/obj/structure/table/wood,/obj/structure/window/reinforced,/obj/item/weapon/folder{pixel_x = -4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/courtroomdandp) "azo" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24; shock_proof = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Brig Cell Block A"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/A) -"azp" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) +"azp" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "azq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "azr" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/wood,/obj/structure/window/reinforced,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/courtroomdandp) "azs" = (/obj/structure/table/wood,/obj/structure/window/reinforced,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/courtroomdandp) "azt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison/cell_block/A) "azu" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/lobby) -"azv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"azv" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "azw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/lobby) "azx" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/lobby) "azy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/lobby) "azz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prison/cell_block/B) -"azA" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) -"azB" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 5"; name = "Cell 5"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) +"azA" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/B) +"azB" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 5"; name = "Cell 5"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "azC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "azD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "azE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/processing) @@ -1422,7 +1422,7 @@ "aBr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "aBs" = (/turf/simulated/wall,/area/security/interrogation) "aBt" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 1; location = "Security"},/obj/structure/plasticflaps{opacity = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/processing) -"aBu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "63"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"aBu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "63"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aBv" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall,/area/maintenance/fsmaint) "aBw" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aBx" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk14"; icon_state = "catwalk14"},/area/solar/auxstarboard) @@ -1452,7 +1452,7 @@ "aBV" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aBW" = (/obj/structure/sink/kitchen{pixel_y = 25},/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aBX" = (/obj/item/trash/liquidfood,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) -"aBY" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "syndicate_elite"; name = "Side Hull Door"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite) +"aBY" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "syndicate_elite"; name = "Side Hull Door"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite) "aBZ" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "13"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport) "aCa" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/courtroom) "aCb" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/camera{c_tag = "Courtroom Judge Committee"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom) @@ -1465,14 +1465,14 @@ "aCi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/wood,/area/crew_quarters/courtroom) "aCj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/courtroom) "aCk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/courtroom) -"aCl" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 3"; name = "Cell 3"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) +"aCl" = (/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 3"; name = "Cell 3"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "aCm" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/A) "aCn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 4; pixel_y = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison/cell_block/A) -"aCo" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) +"aCo" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/A) "aCp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security/glass{name = "Security Lobby"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/lobby) "aCq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "aCr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prison/cell_block/B) -"aCs" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 6"; name = "Cell 6"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) +"aCs" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 6"; name = "Cell 6"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "aCt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "aCu" = (/obj/machinery/computer/med_data,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 6; icon_state = "green"},/area/bridge) "aCv" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/interrogation) @@ -1503,9 +1503,9 @@ "aCU" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aCV" = (/obj/structure/table/wood,/obj/item/trash/plate,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aCW" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) -"aCX" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "syndicate_elite"; name = "Side Hull Door"; opacity = 0; req_access_txt = "150"},/obj/docking_port/mobile{dir = 8; dwidth = 3; height = 5; id = "sst"; name = "SST shuttle"; roundstart_move = "sst_away"; width = 11},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "sst_home"; name = "northwest of station"; width = 11},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite) +"aCX" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "syndicate_elite"; name = "Side Hull Door"; opacity = 0; req_access_txt = "150"},/obj/docking_port/mobile{dir = 8; dwidth = 3; height = 5; id = "sst"; name = "SST shuttle"; roundstart_move = "sst_away"; width = 11},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "sst_home"; name = "northwest of station"; width = 11},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite) "aCY" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) -"aCZ" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "syndicate_sit_1"; name = "Side Hull Door"; opacity = 0; req_access_txt = "150"},/obj/docking_port/mobile{dir = 8; dwidth = 3; height = 5; id = "sit"; name = "SIT shuttle"; roundstart_move = "sit_away"; width = 11},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "sit_arrivals"; name = "Cyberiad Arrivals"; width = 11},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) +"aCZ" = (/obj/machinery/door/airlock/external{id_tag = "s_docking_airlock"; name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "syndicate_sit_1"; name = "Side Hull Door"; opacity = 0; req_access_txt = "150"},/obj/docking_port/mobile{dir = 8; dwidth = 3; height = 5; id = "sit"; name = "SIT shuttle"; roundstart_move = "sit_away"; width = 11},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "sit_arrivals"; name = "Cyberiad Arrivals"; width = 11},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) "aDa" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aDb" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aDc" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/machinery/camera{c_tag = "Courtroom"; dir = 1; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/courtroom) @@ -1521,9 +1521,9 @@ "aDm" = (/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/treadmill_monitor{id = "Cell 6"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/prison/cell_block/B) "aDn" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) "aDo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) -"aDp" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) -"aDq" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) -"aDr" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) +"aDp" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) +"aDq" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) +"aDr" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "Interrogation"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/interrogation) "aDs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aDt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Courtroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) "aDu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Courtroom"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/crew_quarters/courtroom) @@ -1720,7 +1720,7 @@ "aHd" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHe" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway West"; dir = 4; network = list("SS13")},/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "aHf" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) -"aHg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "magistrate2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/magistrateoffice) +"aHg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "magistrate2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/magistrateoffice) "aHh" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aHi" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "aHj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) @@ -1739,7 +1739,7 @@ "aHw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/carpet,/area/magistrateoffice) "aHx" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/hallway/primary/fore) "aHy" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) -"aHz" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "magistrate2"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Magistrate's Office"; req_access_txt = "74"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/magistrateoffice) +"aHz" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "magistrate2"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/airlock/public/glass{name = "Magistrate's Office"; req_access_txt = "74"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/magistrateoffice) "aHA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aHB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aHC" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (NORTH)"; icon_state = "wooden_chair_wings"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) @@ -1774,7 +1774,7 @@ "aIf" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aIg" = (/obj/structure/sign/chinese{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aIh" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mimeoffice) -"aIi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "magistrate"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/magistrateoffice) +"aIi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "magistrate"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/magistrateoffice) "aIj" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aIk" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aIl" = (/turf/simulated/wall,/area/magistrateoffice) @@ -1826,7 +1826,7 @@ "aJf" = (/obj/machinery/photocopier,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 27},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aJg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aJh" = (/obj/machinery/vending/coffee,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) -"aJi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "lawyer"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/lawoffice) +"aJi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "lawyer"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/lawoffice) "aJj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/secure/briefcase{pixel_x = 5; pixel_y = -5},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/lawoffice) "aJk" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "aJl" = (/obj/structure/stool/bed/chair/comfy/black,/obj/effect/landmark/start{name = "Civilian"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/carpet/arcade,/area/crew_quarters/fitness{name = "\improper Arcade"}) @@ -2166,10 +2166,10 @@ "aPH" = (/mob/living/simple_animal/crab/Coffee,/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/fitness) "aPI" = (/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/fitness) "aPJ" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/fitness) -"aPK" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint3"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aPK" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint3"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aPL" = (/obj/machinery/computer/HolodeckControl,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "aPM" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"aPN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint3"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aPN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint3"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aPO" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/maintenance/electrical) "aPP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aPQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -2377,8 +2377,8 @@ "aTK" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "aTL" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) "aTM" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) -"aTN" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical{name = "Coroner"; req_access_txt = "5"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/starboard/west) -"aTO" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/starboard/west) +"aTN" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical{name = "Coroner"; req_access_txt = "5"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/starboard/west) +"aTO" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/starboard/west) "aTP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/weapon/twohanded/required/kirbyplants,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "aTQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "aTR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/starboard/east) @@ -2392,8 +2392,8 @@ "aTZ" = (/obj/structure/closet,/obj/effect/decal/cleanable/cobweb,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUa" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUb" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aUc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aUd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aUc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aUd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUe" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/drinks/cans/badminbrew,/obj/effect/landmark{name = "blobstart"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUf" = (/obj/effect/spawner/window,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUg" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -2431,7 +2431,7 @@ "aUM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/fore) "aUN" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) "aUO" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/light{dir = 1; in_use = 1},/obj/machinery/camera{c_tag = "Medbay Lobby West"; network = list("SS13")},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/reception) -"aUP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/cups{pixel_x = 6; pixel_y = 6},/obj/item/weapon/storage/box/beakers{pixel_x = -5; pixel_y = 7},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/reception) +"aUP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/cups{pixel_x = 6; pixel_y = 6},/obj/item/weapon/storage/box/beakers{pixel_x = -5; pixel_y = 7},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/reception) "aUQ" = (/turf/simulated/wall,/area/crew_quarters/toilet) "aUR" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aUS" = (/turf/simulated/wall,/area/crew_quarters/bar) @@ -2476,7 +2476,7 @@ "aVF" = (/obj/machinery/camera{c_tag = "Bar Storage"; network = list("SS13")},/obj/structure/table/wood,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVH" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"aVI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "shutter0"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/structure/sign/chemistry,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) +"aVI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "open"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/structure/sign/chemistry,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) "aVJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aVK" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "aVL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) @@ -2484,8 +2484,8 @@ "aVN" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aVO" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aVP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/grille/broken,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/fsmaint2) -"aVQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint1"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aVR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint1"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aVQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint1"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aVR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "maint1"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aVS" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station) "aVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "aVU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) @@ -3320,22 +3320,22 @@ "blR" = (/turf/simulated/wall,/area/storage/emergency2) "blS" = (/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/hallway/primary/central/nw) "blT" = (/turf/simulated/wall,/area/civilian/pet_store) -"blU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) +"blU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge) "blV" = (/obj/machinery/door/airlock/public/glass{name = "Pet Store"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/civilian/pet_store) "blW" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/hallway/primary/port) "blX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/hallway/primary/port) -"blY" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/turf/simulated/floor/plating,/area/bridge) +"blY" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/turf/simulated/floor/plating,/area/bridge) "blZ" = (/turf/simulated/wall,/area/hallway/primary/central/nw) -"bma" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/bridge) +"bma" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/bridge) "bmb" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central/nw) "bmc" = (/turf/simulated/wall/r_wall,/area/bridge) -"bmd" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/bridge) -"bme" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/status_display{density = 0; layer = 4},/turf/simulated/floor/plating,/area/bridge) +"bmd" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/bridge) +"bme" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/status_display{density = 0; layer = 4},/turf/simulated/floor/plating,/area/bridge) "bmf" = (/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/hallway/primary/central/ne) "bmg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bmh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bmi" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central/ne) -"bmj" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/light{dir = 1},/obj/machinery/door/window{dir = 4; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bmj" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/light{dir = 1},/obj/machinery/door/window{dir = 4; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bmk" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32},/obj/structure/stool,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bml" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bmm" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) @@ -3436,7 +3436,7 @@ "bod" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central/ne) "boe" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) "bof" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bog" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/eastleft{base_state = "right"; icon_state = "right"; layer = 3; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bog" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/eastleft{base_state = "right"; icon_state = "right"; layer = 3; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "boh" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/wrench,/obj/item/device/assembly/timer,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor/plasteel,/area/bridge) "boi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "boj" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/kitchen_machine/grill,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) @@ -3521,7 +3521,7 @@ "bpK" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/stool/bed/chair/wood/wings,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bpL" = (/obj/structure/foodcart,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bpM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bpN" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window{dir = 4; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bpN" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window{dir = 4; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bpO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bpP" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bpQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -3657,7 +3657,7 @@ "bsq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/storage/tools) "bsr" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/storage/tools) "bss" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/central/nw) -"bst" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bst" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "bsu" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/bridge) "bsv" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/bridge) "bsw" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/bridge) @@ -3672,7 +3672,7 @@ "bsF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel,/area/bridge) "bsG" = (/turf/simulated/floor/plasteel{tag = "icon-browncorner (EAST)"; icon_state = "browncorner"; dir = 4},/area/bridge) "bsH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/bridge) -"bsI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bsI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "bsJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/hallway/primary/central/ne) "bsK" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/hallway/primary/central/ne) "bsL" = (/obj/machinery/camera{c_tag = "Bridge East Entrance"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/hallway/primary/central/ne) @@ -3742,7 +3742,7 @@ "btX" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/hallway/primary/central/nw) "btY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "btZ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) -"bua" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bua" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "bub" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/port) "buc" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/storage/tools) "bud" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel,/area/storage/tools) @@ -3765,7 +3765,7 @@ "buu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/bridge) "buv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/bridge) "buw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/bridge) -"bux" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bux" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "buy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/airlock/command/glass{name = "Bridge"; req_access_txt = "19"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/bridge) "buz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/hallway/primary/central/ne) "buA" = (/obj/machinery/door/airlock/command/glass{name = "Bridge"; req_access_txt = "19"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/bridge) @@ -3836,7 +3836,7 @@ "bvN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/central/nw) "bvO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/hallway/primary/central/nw) "bvP" = (/obj/machinery/camera{c_tag = "Bridge West Entrance"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/hallway/primary/central/nw) -"bvQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bvQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "bvR" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/bridge) "bvS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) "bvT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/bridge) @@ -3850,7 +3850,7 @@ "bwb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bwc" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) "bwd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) -"bwe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) +"bwe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) "bwf" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/hallway/primary/central/ne) "bwg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/bridge) "bwh" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/hallway/primary/central/ne) @@ -3931,9 +3931,9 @@ "bxE" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bxF" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/vending/dinnerware,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bxG" = (/obj/machinery/icemachine,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bxH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westleft{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bxI" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westleft{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bxJ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westright{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bxH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westleft{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bxI" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westleft{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bxJ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/door/window/westright{dir = 1; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bxK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Library"; req_access_txt = "0"},/turf/simulated/floor/carpet,/area/library) "bxL" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Botanist"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/hydroponics) "bxM" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/hydroponics) @@ -4045,7 +4045,7 @@ "bzO" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bzP" = (/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bzQ" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bzR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "heads_meeting"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"bzR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "heads_meeting"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room) "bzS" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bzT" = (/obj/structure/table,/obj/item/weapon/aiModule/quarantine,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bzU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/bridge/meeting_room) @@ -4141,8 +4141,8 @@ "bBG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bBH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bBI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) -"bBJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) -"bBK" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "mechbay"; name = "Mech Bay"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/chargebay) +"bBJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) +"bBK" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "mechbay"; name = "Mech Bay"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/chargebay) "bBL" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bBM" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24; shock_proof = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) "bBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) @@ -4213,13 +4213,13 @@ "bDa" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "bDb" = (/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/hallway/primary/starboard/west) "bDc" = (/obj/effect/decal/warning_stripes/blue/partial{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "white"},/area/medical/reception) -"bDd" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 4; icon_state = "left"; name = "Medical Reception"; req_access_txt = "5"},/obj/item/weapon/folder/white,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) +"bDd" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 4; icon_state = "left"; name = "Medical Reception"; req_access_txt = "5"},/obj/item/weapon/folder/white,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bDe" = (/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/reception) "bDf" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "white"},/area/medical/reception) "bDg" = (/obj/effect/decal/warning_stripes/blue/partial{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "white"},/area/medical/reception) "bDh" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "white"},/area/medical/reception) "bDi" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) -"bDj" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "shutter0"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) +"bDj" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "open"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bDk" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "bDl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bDm" = (/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/machinery/chem_dispenser,/turf/simulated/floor/plasteel,/area/medical/chemistry) @@ -4382,28 +4382,28 @@ "bGn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bGo" = (/obj/machinery/atmospherics/pipe/simple/insulated{dir = 4},/turf/space,/area/space) "bGp" = (/obj/machinery/atmospherics/pipe/simple/insulated{dir = 6},/turf/simulated/wall/r_wall,/area/maintenance/asmaint2) -"bGq" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) +"bGq" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bGr" = (/turf/simulated/wall/r_wall,/area/assembly/chargebay) "bGs" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/plating/airless,/area/toxins/mixing) "bGt" = (/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/reception) "bGu" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bGv" = (/obj/structure/table/glass,/obj/item/clothing/glasses/science{pixel_y = -3},/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science{pixel_y = 3},/obj/item/stack/sheet/mineral/plasma,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) "bGw" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) -"bGx" = (/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "shutter0"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/smartfridge/medbay,/obj/machinery/door/window/eastright{dir = 4; name = "Chemistry Desk"; req_access_txt = "33"},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating,/area/medical/chemistry) +"bGx" = (/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "open"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/smartfridge/medbay,/obj/machinery/door/window/eastright{dir = 4; name = "Chemistry Desk"; req_access_txt = "33"},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating,/area/medical/chemistry) "bGy" = (/obj/effect/decal/warning_stripes/south,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/chem_heater,/turf/simulated/floor/plasteel,/area/medical/chemistry) "bGz" = (/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plasteel,/area/medical/chemistry) "bGA" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics Requests Console"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) -"bGB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "robotics"; name = "Robotics Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics) +"bGB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "robotics"; name = "Robotics Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics) "bGC" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bGD" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/storage/belt/utility,/obj/item/clothing/gloves/color/latex,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) -"bGE" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "robotics"; name = "Robotics Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics) +"bGE" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "robotics"; name = "Robotics Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics) "bGF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard/east) "bGG" = (/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGH" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint2) "bGI" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/floor/plasteel{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "bGJ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape) -"bGK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "rdlab"; name = "Research and Development Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/lab) -"bGL" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "rdlab"; name = "Research and Development Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/lab) +"bGK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "rdlab"; name = "Research and Development Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/lab) +"bGL" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "rdlab"; name = "Research and Development Lab Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/lab) "bGM" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGO" = (/obj/machinery/sleeper{tag = "icon-sleeper (NORTH)"; icon_state = "sleeper"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) @@ -4468,7 +4468,7 @@ "bHV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bHW" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) "bHX" = (/turf/simulated/floor/plasteel,/area/assembly/chargebay) -"bHY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) +"bHY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) "bHZ" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "bIa" = (/turf/simulated/wall,/area/assembly/robotics) "bIb" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/glasses/welding,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) @@ -4549,15 +4549,15 @@ "bJy" = (/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/wood,/obj/machinery/photocopier/faxmachine/longrange{department = "Captain's Office"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJz" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Captain's Desk Door"; req_access_txt = "20"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJA" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) -"bJB" = (/obj/machinery/computer/crew,/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) -"bJC" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Medical Reception"; req_access_txt = "5"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) +"bJB" = (/obj/machinery/computer/crew,/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) +"bJC" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Medical Reception"; req_access_txt = "5"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bJD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bJG" = (/obj/machinery/light,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bJI" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/se) -"bJJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/computer/guestpass,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) +"bJJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/computer/guestpass,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) "bJK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/reception) "bJL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bJM" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/shuttle/constructionsite) @@ -4571,7 +4571,7 @@ "bJU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/fitness) "bJV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bJW" = (/obj/structure/closet/wardrobe/chemistry_white,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) -"bJX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "shutter0"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) +"bJX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; desc = "Lube off, pal."; dir = 8; icon_state = "open"; id_tag = "imnotmakingyoulubepissoff"; name = "Chemistry Privacy Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry) "bJY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bJZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bKa" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) @@ -4602,7 +4602,7 @@ "bKz" = (/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bKA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bKB" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) -"bKC" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Disposal Exit"; layer = 3; name = "Disposal Exit Vent"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/disposal) +"bKC" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Disposal Exit"; layer = 3; name = "Disposal Exit Vent"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/disposal) "bKD" = (/obj/machinery/driver_button{id_tag = "trash"; pixel_x = -26; pixel_y = -6},/obj/machinery/door_control{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/disposal) "bKE" = (/obj/machinery/light_switch{pixel_x = 30},/obj/machinery/camera{c_tag = "Disposals"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/blood/oil,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/disposal) "bKF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/port) @@ -4647,7 +4647,7 @@ "bLs" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "bLt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/paramedic) "bLu" = (/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/paramedic) -"bLv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/floor/plating,/area/medical/reception) +"bLv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/floor/plating,/area/medical/reception) "bLw" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/paramedic) "bLx" = (/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bLy" = (/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/reception) @@ -4744,7 +4744,7 @@ "bNl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door_control{id = "paramedic"; name = "Garage Door Control"; pixel_x = 24; pixel_y = 1; req_access_txt = "66"},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "bNm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/paramedic) "bNn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/stool/bed/amb_trolley,/obj/effect/decal/warning_stripes/west,/obj/effect/decal/warning_stripes/east,/obj/effect/decal/warning_stripes/north,/obj/machinery/door_control{id = "paramedic"; name = "Garage Door Control"; pixel_x = -24; pixel_y = 1; req_access_txt = "66"},/obj/machinery/light_switch{pixel_x = -23; pixel_y = -8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/paramedic) -"bNo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) +"bNo" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) "bNp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/structure/closet/paramedic,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/paramedic) "bNq" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception) "bNr" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/reception) @@ -4844,20 +4844,20 @@ "bPh" = (/obj/structure/table,/obj/item/roller,/obj/machinery/computer/mob_healer_terminal{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/reception) "bPi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bPj" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "Research Division"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) -"bPk" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access_txt = "47"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"bPk" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access_txt = "47"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "bPl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bPm" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/reception) "bPn" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/assembly/robotics) "bPo" = (/turf/simulated/floor/plasteel,/area/assembly/robotics) "bPp" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel,/area/assembly/robotics) "bPq" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) -"bPr" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) +"bPr" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bPs" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/assembly/robotics) "bPt" = (/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "bPu" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) -"bPv" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception) +"bPv" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception) "bPw" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) -"bPx" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/reception) +"bPx" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyerPort"; name = "Medbay Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/reception) "bPy" = (/obj/structure/table,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bPz" = (/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bPA" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4891,10 +4891,10 @@ "bQc" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"; tag = "icon-pipe-j2"},/turf/simulated/floor/plasteel,/area/quartermaster/office) "bQd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bQe" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access_txt = "50"},/obj/structure/noticeboard{pixel_y = 27},/turf/simulated/floor/plasteel,/area/quartermaster/office) -"bQf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hopqueue"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw) +"bQf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "hopqueue"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw) "bQg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bQh" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/hallway/primary/central/sw) -"bQi" = (/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/flasher{id = "hopflash"; pixel_y = 28},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 4; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Head of Personnel's Desk"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) +"bQi" = (/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/flasher{id = "hopflash"; pixel_y = 28},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 4; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Head of Personnel's Desk"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bQj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/space,/area/space) "bQk" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/crew_quarters/heads) "bQl" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads) @@ -4923,7 +4923,7 @@ "bQI" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "bQJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Medbay Morgue South"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "bQK" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) -"bQL" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;29"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/assembly/chargebay) +"bQL" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;29"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/assembly/chargebay) "bQM" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bQN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bQO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) @@ -4951,8 +4951,8 @@ "bRk" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/stack/medical/bruise_pack/advanced{pixel_x = -4; pixel_y = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) "bRl" = (/obj/effect/decal/warning_stripes/east,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor/plasteel,/area/assembly/robotics) "bRm" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/machinery/newscaster{pixel_x = 26; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) -"bRn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) -"bRo" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Research Hallway Entrance"; dir = 2; network = list("Research","SS13")},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) +"bRn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) +"bRo" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Research Hallway Entrance"; dir = 2; network = list("Research","SS13")},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) "bRp" = (/obj/machinery/door_control{id = "rdlab2"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = -24; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bRq" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/obj/item/stack/tape_roll,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bRr" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/assembly/robotics) @@ -4991,7 +4991,7 @@ "bRY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/sw) "bRZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/central/sw) "bSa" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/heads) -"bSb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bSb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bSc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bSd" = (/obj/machinery/computer/card,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) "bSe" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) @@ -5042,13 +5042,13 @@ "bSX" = (/obj/effect/decal/warning_stripes/blue/partial,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bSY" = (/obj/machinery/door_control{id = "robotics2"; name = "Robotics Lab Shutters Control"; pixel_x = 24; pixel_y = -24; req_access_txt = "29"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bSZ" = (/obj/machinery/light{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitecorner"},/area/medical/research{name = "Research Division"}) -"bTa" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "robotics2"; name = "Robotics Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/assembly/robotics) +"bTa" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "robotics2"; name = "Robotics Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/assembly/robotics) "bTb" = (/turf/simulated/wall,/area/toxins/lab) "bTc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/medical/research{name = "Research Division"}) "bTd" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/toxins/lab) "bTe" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/toxins/lab) "bTf" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/medical/research{name = "Research Division"}) -"bTg" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "rdlab2"; name = "Research and Development Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) +"bTg" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "rdlab2"; name = "Research and Development Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bTh" = (/obj/machinery/light{dir = 1; in_use = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "bTi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/central/sw) "bTj" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/research/glass{name = "Research and Development"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) @@ -5070,7 +5070,7 @@ "bTz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central/sw) "bTA" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Cargo Office"; dir = 4; network = list("SS13")},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bTB" = (/obj/structure/disposalpipe/segment,/mob/living/simple_animal/pet/sloth/paperwork,/turf/simulated/floor/plasteel,/area/quartermaster/office) -"bTC" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bTC" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "hop"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bTD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bTE" = (/obj/structure/closet/secure_closet/hop,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bTF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/photocopier,/turf/simulated/floor/carpet,/area/crew_quarters/heads) @@ -5100,7 +5100,7 @@ "bUd" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 1},/area/medical/genetics) "bUe" = (/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "bUf" = (/obj/machinery/door/window/southright{dir = 2; name = "Primate Pen"; req_access_txt = "9"},/turf/simulated/floor/plasteel{dir = 1},/area/medical/genetics) -"bUg" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/hallway/primary/central/se) +"bUg" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/hallway/primary/central/se) "bUh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/east,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "bUi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bUj" = (/obj/effect/decal/warning_stripes/blue,/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) @@ -5136,7 +5136,7 @@ "bUN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bUO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/noticeboard{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bUP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bUQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/primary/central/se) +"bUQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/medical/glass{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/primary/central/se) "bUR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/warning_stripes/east,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "bUS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bUT" = (/obj/effect/decal/warning_stripes/blue,/obj/effect/decal/warning_stripes/west,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) @@ -5196,7 +5196,7 @@ "bVV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical/glass{id_tag = "GeneticsDoor"; name = "Genetics"; req_access_txt = "9"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/genetics) "bVW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/genetics) "bVX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/genetics) -"bVY" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/research{name = "Genetics Research"; req_access_txt = "47;9"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) +"bVY" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/research{name = "Genetics Research"; req_access_txt = "47;9"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bVZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/genetics) "bWa" = (/turf/simulated/wall,/area/medical/cryo) "bWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5278,7 +5278,7 @@ "bXz" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central/south) "bXA" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "bXB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR: EMERGENCY ENTRANCE'."; name = "KEEP CLEAR: EMERGENCY ENTRANCE"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) -"bXC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bXC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXD" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/sleeper) "bXE" = (/obj/item/roller,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/sleeper) "bXF" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/sleeper) @@ -5295,8 +5295,8 @@ "bXQ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bXR" = (/obj/structure/closet/walllocker/emerglocker/north{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "bXS" = (/turf/simulated/wall/r_wall,/area/medical/genetics_cloning) -"bXT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) -"bXU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/cmo) +"bXT" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) +"bXU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/cmo) "bXV" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/item/roller,/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "bXW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5344,7 +5344,7 @@ "bYN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bYO" = (/obj/machinery/camera{c_tag = "Cargo Bay Entrance"; dir = 4; network = list("SS13")},/obj/machinery/atm{pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/sw) "bYP" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock) -"bYQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hopqueue"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw) +"bYQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "hopqueue"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw) "bYR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/hallway/primary/central/sw) "bYS" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel Requests Console"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1; network = list("SS13")},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bYT" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) @@ -5379,7 +5379,7 @@ "bZw" = (/obj/machinery/computer/card/minor/cmo,/obj/machinery/camera{c_tag = "Medbay Chief Medical Officer's Office"; dir = 4; network = list("SS13")},/obj/item/device/radio/intercom/department/medbay{pixel_x = -32; pixel_y = 5},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -32; pixel_y = -8},/turf/simulated/floor/plasteel{dir = 9; icon_state = "darkblue"},/area/medical/cmo) "bZx" = (/obj/machinery/light{dir = 1; in_use = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"},/area/medical/cmo) "bZy" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"},/area/medical/cmo) -"bZz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) +"bZz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) "bZA" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 26},/obj/machinery/light_switch{pixel_x = -10; pixel_y = 28},/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/medical/cmo) "bZB" = (/obj/machinery/dna_scannernew,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplefull"; tag = "icon-whitepurple (WEST)"},/area/medical/genetics) "bZC" = (/obj/machinery/camera{c_tag = "Central Primary Hallway South-West"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central/sw) @@ -5423,7 +5423,7 @@ "cao" = (/obj/structure/filingcabinet,/turf/simulated/floor/plasteel,/area/quartermaster/qm) "cap" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel,/area/quartermaster/qm) "caq" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/plasteel,/area/quartermaster/qm) -"car" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/floor/plating,/area/shuttle/administration) +"car" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (WEST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 8},/turf/simulated/floor/plating,/area/shuttle/administration) "cas" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{name = "Mining Dock"; req_access_txt = "48"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "cat" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/quartermaster/qm) "cau" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/server) @@ -5452,7 +5452,7 @@ "caR" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"},/area/medical/cmo) "caS" = (/obj/structure/table/glass,/obj/machinery/door_control{id = "cmooffice"; name = "Privacy Shutters Control"; pixel_y = -3},/obj/machinery/door_control{id = "Biohazard_medi"; name = "Emergency Medbay Quarantine"; pixel_y = 7},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkbluecorners"},/area/medical/cmo) "caT" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/medical/cmo) -"caU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/medical/cmo) +"caU" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/medical/cmo) "caV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"},/area/medical/cmo) "caW" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/medical/genetics) "caX" = (/obj/machinery/computer/scan_consolenew,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplefull"; tag = "icon-whitepurple (WEST)"},/area/medical/genetics) @@ -5484,7 +5484,7 @@ "cbx" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "cby" = (/obj/machinery/computer/shuttle/admin,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "cbz" = (/obj/machinery/door/airlock/centcom{id_tag = "adminshuttle"; name = "Bridge"; opacity = 1; req_access_txt = "106"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) -"cbA" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/floor/plating,/area/shuttle/administration) +"cbA" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/floor/plating,/area/shuttle/administration) "cbB" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{tag = "icon-swall_f10"; icon_state = "swall_f10"},/area/shuttle/supply) "cbC" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor,/area/shuttle/supply) "cbD" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/shuttle/supply) @@ -5542,7 +5542,7 @@ "ccD" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/wall,/area/medical/cryo) "ccE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) "ccF" = (/obj/structure/table/glass,/obj/item/weapon/stamp/cmo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"},/area/medical/cmo) -"ccG" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/medical/cmo) +"ccG" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/medical/cmo) "ccH" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/item/weapon/reagent_containers/glass/bottle/morphine{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"},/area/medical/cmo) "ccI" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"},/area/medical/cmo) "ccJ" = (/obj/machinery/power/apc{dir = 4; name = "east bump Important Area"; pixel_x = 24; shock_proof = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"},/area/medical/cmo) @@ -5580,7 +5580,7 @@ "cdp" = (/obj/machinery/clonepod/upgraded,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "cdq" = (/obj/machinery/computer/card/centcom,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "cdr" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "adminshuttleshutters"; name = "remote shutter control"; req_access_txt = "106"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) -"cds" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/floor/plating,/area/shuttle/administration) +"cds" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "adminshuttleshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/floor/plating,/area/shuttle/administration) "cdt" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"; dir = 2},/area/shuttle/supply) "cdu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/supply) "cdv" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/supply) @@ -5696,10 +5696,10 @@ "cfB" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central/se) "cfC" = (/obj/structure/table/glass,/obj/item/weapon/hemostat{pixel_x = 6},/obj/item/weapon/retractor{pixel_x = -6; pixel_y = 6},/obj/item/weapon/scalpel,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/surgery1) "cfD" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/camera{c_tag = "Medbay Surgery Observation"; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"},/area/medical/ward) -"cfE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery1) +"cfE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery1) "cfF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/ward) "cfG" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/ward) -"cfH" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery2) +"cfH" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "open"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery2) "cfI" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"},/area/medical/ward) "cfJ" = (/obj/structure/table/glass,/obj/item/weapon/hemostat{pixel_x = 6},/obj/item/weapon/retractor{pixel_x = -6; pixel_y = 6},/obj/item/weapon/scalpel,/obj/machinery/alarm{pixel_y = 25},/obj/item/stack/medical/bruise_pack/advanced,/turf/simulated/floor/plasteel{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/surgery2) "cfK" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/door_control{id = "surgeryobs2"; name = "Privacy Shutters Control"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/surgery2) @@ -5742,7 +5742,7 @@ "cgv" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "cgw" = (/obj/machinery/bodyscanner,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "cgx" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) -"cgy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{id_tag = "ToxinsVenting"; name = "Toxins Venting Bay Door"; use_power = 0},/turf/simulated/floor/engine/insulated/vacuum,/area/toxins/mixing) +"cgy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor{id_tag = "ToxinsVenting"; name = "Toxins Venting Bay Door"; use_power = 0},/turf/simulated/floor/engine/insulated/vacuum,/area/toxins/mixing) "cgz" = (/obj/structure/window/plasmareinforced{color = "#FF0000"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "cgA" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "cgB" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining) @@ -5764,12 +5764,12 @@ "cgR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/engine/break_room) "cgS" = (/turf/simulated/wall,/area/blueshield) "cgT" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) -"cgU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/blueshield) -"cgV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/blueshield) +"cgU" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/blueshield) +"cgV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "blueshield"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/blueshield) "cgW" = (/turf/simulated/wall,/area/ntrep) "cgX" = (/obj/machinery/light_switch{pixel_y = -23},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/janitor) -"cgY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/ntrep) -"cgZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/ntrep) +"cgY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/ntrep) +"cgZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "representative"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/ntrep) "cha" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central/south) "chb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/janitor) "chc" = (/turf/simulated/wall,/area/janitor) @@ -5795,7 +5795,7 @@ "chw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "chx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) "chy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/medical/cmo) -"chz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) +"chz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) "chA" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"},/area/medical/cmo) "chB" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Chief Medical Officer's Office"},/obj/machinery/light,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"},/area/medical/cmo) "chC" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) @@ -5869,13 +5869,13 @@ "ciS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/medical/surgery2) "ciT" = (/obj/machinery/light{dir = 4},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Secondary Hallway North"; dir = 8; network = list("SS13")},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "ciU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) -"ciV" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/cmo) -"ciW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/medical/cmo) -"ciX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) +"ciV" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/cmo) +"ciW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/medical/cmo) +"ciX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) "ciY" = (/turf/simulated/wall,/area/maintenance/genetics) "ciZ" = (/obj/structure/barricade/wooden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/genetics) "cja" = (/obj/effect/spawner/random_barrier/obstruction,/turf/simulated/floor/plating,/area/maintenance/genetics) -"cjb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/explab_chamber) +"cjb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/explab_chamber) "cjc" = (/obj/structure/sign/poster/random{pixel_x = 32},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/blueshield) "cjd" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/ntrep) "cje" = (/obj/structure/table/wood,/obj/item/weapon/clipboard{pixel_x = -2},/obj/item/weapon/folder,/obj/item/weapon/stamp/centcom,/obj/item/weapon/pen/multi/fountain,/turf/simulated/floor/carpet,/area/ntrep) @@ -6141,16 +6141,16 @@ "cof" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology/lab{name = "\improper Virology Lobby"}) "cog" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/toxins/explab) "coh" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) -"coi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/engine,/area/toxins/explab) +"coi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/engine,/area/toxins/explab) "coj" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "cok" = (/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "col" = (/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/mixing) -"com" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/mixing) +"com" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/mixing) "con" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/mixing) "coo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/mixing) "cop" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/mixing) "coq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) -"cor" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Mixing Room"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/toxins/mixing) +"cor" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Mixing Room"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/toxins/mixing) "cos" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "cot" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/window/eastright{name = "Toxins Mixing Room"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing) "cou" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) @@ -6167,7 +6167,7 @@ "coF" = (/obj/machinery/camera{c_tag = "Research Toxins Launch Room"; dir = 4; network = list("Research","SS13"); pixel_y = -22},/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel,/area/toxins/launch{name = "Toxins Launch Room"}) "coG" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 32; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel,/area/toxins/launch{name = "Toxins Launch Room"}) "coH" = (/obj/machinery/driver_button{dir = 2; id_tag = "toxinsdriver"; pixel_y = 24; range = 18},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/toxins/launch{name = "Toxins Launch Room"}) -"coI" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"coI" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) "coJ" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area) "coK" = (/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/maintenance/apmaint) "coL" = (/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -6209,7 +6209,7 @@ "cpv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cpw" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/camera{c_tag = "Medbay Surgery West Storage"; dir = 1; network = list("SS13"); pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/medical/surgery1) "cpx" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/medical/surgery1) -"cpy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "viroshutters"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/virology) +"cpy" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "viroshutters"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/virology) "cpz" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/syringes{pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/effect/decal/warning_stripes/southeastcorner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/medical/virology/lab{name = "\improper Virology Lobby"}) "cpA" = (/obj/effect/decal/warning_stripes/southwestcorner,/obj/machinery/light_switch{pixel_x = 27},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/medical/virology/lab{name = "\improper Virology Lobby"}) "cpB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology/lab{name = "\improper Virology Lobby"}) @@ -6265,7 +6265,7 @@ "cqz" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cqA" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cqB" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"cqC" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"cqC" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) "cqD" = (/turf/simulated/floor/plasteel/airless{dir = 8; icon_state = "warning"},/area/toxins/test_area) "cqE" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/apmaint) "cqF" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -6358,7 +6358,7 @@ "cso" = (/obj/machinery/light/small{dir = 1},/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/apmaint) "csp" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "csq" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/toxins/launch{name = "Toxins Launch Room"}) -"csr" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"csr" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) "css" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warning"},/area/toxins/test_area) "cst" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/toxins/test_area) "csu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -6433,9 +6433,9 @@ "ctL" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "ctM" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/apmaint) "ctN" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"ctO" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) -"ctP" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/item/device/radio/intercom,/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) -"ctQ" = (/obj/machinery/door/window/southright{name = "Toxins Launcher"; req_access_txt = "7"; req_one_access_txt = "0"},/obj/machinery/door/window/southright{dir = 1; name = "Toxins Launcher"; req_access_txt = "7"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"ctO" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"ctP" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/item/device/radio/intercom,/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) +"ctQ" = (/obj/machinery/door/window/southright{name = "Toxins Launcher"; req_access_txt = "7"; req_one_access_txt = "0"},/obj/machinery/door/window/southright{dir = 1; name = "Toxins Launcher"; req_access_txt = "7"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/launch{name = "Toxins Launch Room"}) "ctR" = (/turf/simulated/wall/r_wall,/area/blueshield) "ctS" = (/turf/simulated/floor/plasteel/airless{dir = 6; icon_state = "warning"},/area/toxins/test_area) "ctT" = (/turf/simulated/floor/plasteel/airless{dir = 10; icon_state = "warning"},/area/toxins/test_area) @@ -6455,7 +6455,7 @@ "cuh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) "cui" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/computer/security/engineering,/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/engine/controlroom) "cuj" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) -"cuk" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cuk" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cul" = (/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = -30},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper/precision,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) "cum" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cun" = (/obj/structure/table/glass,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/hud/health,/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "viro_lab_airlock_control"; name = "Virology Lab Access Console"; pixel_x = 24; pixel_y = 0; req_one_access_txt = "39"; tag_exterior_door = "viro_lab_airlock_exterior"; tag_interior_door = "viro_lab_airlock_interior"},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) @@ -6464,7 +6464,7 @@ "cuq" = (/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology) "cur" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology) "cus" = (/obj/structure/closet/emcloset,/obj/structure/sign/biohazard{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/virology) -"cut" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/psych) +"cut" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "open"; id_tag = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/psych) "cuu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Psych Office"; req_access_txt = "64"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/medical/psych) "cuv" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "cuw" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/medical,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/hardsuit/medical,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/cmostore) @@ -6570,8 +6570,8 @@ "cws" = (/obj/structure/table,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{dir = 6; icon_state = "blue"},/area/medical/cmostore) "cwt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall/r_wall,/area/atmos/control) "cwu" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"}) -"cww" = (/obj/machinery/light,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"}) +"cwv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"}) +"cww" = (/obj/machinery/light,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"}) "cwx" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cwy" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cwz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -6584,7 +6584,7 @@ "cwG" = (/obj/structure/table,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/maintenance/consarea) "cwH" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area/maintenance/consarea) "cwI" = (/turf/simulated/floor/plating,/area/maintenance/consarea) -"cwJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cwJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cwK" = (/obj/machinery/meter,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cwL" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "warning"},/area/toxins/test_area) "cwM" = (/turf/simulated/floor/plasteel/airless{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/test_area) @@ -6936,9 +6936,9 @@ "cDv" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cDw" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/misc_lab) "cDx" = (/obj/machinery/atmospherics/binary/volume_pump/on{name = "Waste In"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cDy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cDz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cDA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cDy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cDz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cDA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cDB" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/misc_lab) "cDC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/misc_lab) "cDD" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/toxins/misc_lab) @@ -7075,7 +7075,7 @@ "cGf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cGg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/camera{c_tag = "Mechanic's Workshop West"; dir = 2; network = list("SS13")},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cGh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/engine/mechanic_workshop) -"cGi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"cGi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cGj" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/podtracker,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/mechanic_workshop) "cGk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "cGl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Mechanic's Workshop East"; dir = 2; network = list("SS13")},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/mechanic_workshop) @@ -7146,7 +7146,7 @@ "cHy" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cHz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "cHA" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/engine/mechanic_workshop) -"cHB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"cHB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cHC" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/mechanic_workshop) "cHD" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "cHE" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) @@ -7214,7 +7214,7 @@ "cIQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "cIR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "cIS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/stool/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Mechanic"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) -"cIT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"cIT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cIU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/engine/mechanic_workshop) "cIV" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Mechanic's Desk"; req_access = null; req_access_txt = "70"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/cell_charger,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "cIW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -7240,7 +7240,7 @@ "cJv" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/asmaint) "cJw" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cJx" = (/obj/effect/spawner/random_spawners/blood_maybe,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/asmaint) -"cJy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) +"cJy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cJz" = (/obj/machinery/chem_heater,/turf/simulated/floor/plating,/area/maintenance/genetics) "cJA" = (/obj/structure/table,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/stock_parts/cell/high,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cJB" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/computer/monitor{name = "Engine Power Monitoring Computer"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7256,12 +7256,12 @@ "cJL" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cJM" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) "cJN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cJO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research/glass{name = "Test Chamber"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/misc_lab) +"cJO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research/glass{name = "Test Chamber"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/misc_lab) "cJP" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/misc_lab) "cJQ" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cJR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"cJR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/floor/engine,/area/toxins/misc_lab) "cJS" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/mechanic_workshop) -"cJT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"cJT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "RnDChem"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) "cJU" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/engine/mechanic_workshop) "cJV" = (/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "cJW" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) @@ -7290,7 +7290,7 @@ "cKv" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/maintenance/asmaint) "cKw" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/asmaint) "cKx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engineering"; req_access_txt = "32"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) -"cKy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) +"cKy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cKz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/computer/security/engineering,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel,/area/atmos/control) "cKA" = (/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/carpet,/area/maintenance/asmaint) "cKB" = (/obj/structure/table,/obj/item/weapon/poster/random_contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -7314,7 +7314,7 @@ "cKT" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/hardsuit/engineering,/obj/machinery/power/apc{dir = 1; name = "north bump Engineering"; pixel_x = 0; pixel_y = 24; shock_proof = 1},/obj/structure/cable/yellow{d1 = 0; d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cKU" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 4; network = list("SS13")},/obj/structure/dispenser,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cKV" = (/obj/machinery/disposal,/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"cKW" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cKW" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cKX" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cKY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/newscaster{pixel_y = 34},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cKZ" = (/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -7361,7 +7361,7 @@ "cLT" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/hallway/primary/aft) "cLV" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "cLW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos/control) -"cLX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) +"cLX" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cLY" = (/obj/item/stack/sheet/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/asmaint) "cLZ" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood,/area/maintenance/asmaint) "cMa" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 24; pixel_y = 8; req_access_txt = "24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos/control) @@ -7374,7 +7374,7 @@ "cMh" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/genetics) "cMj" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "cMk" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cMl" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cMl" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cMm" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/engine,/area/toxins/test_chamber) "cMn" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/test_chamber) "cMo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -28; pixel_y = 8; req_access_txt = "55"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access_txt = "55"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -7403,7 +7403,7 @@ "cMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel,/area/atmos/control) "cMO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) "cMP" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/machinery/power/apc{dir = 8; name = "west bump Engineering"; pixel_x = -24; shock_proof = 1},/turf/simulated/floor/plasteel,/area/engine/break_room) -"cMR" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/atmos/control) +"cMR" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/atmos/control) "cMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) "cMT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/secure) "cMU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7424,19 +7424,19 @@ "cNj" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cNk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cNl" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) -"cNm" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cNm" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cNn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cNo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cNp" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "xeno_airlock_exterior"; id_tag = "xeno_airlock_control"; tag_interior_door = "xeno_airlock_interior"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/toxins/xenobiology) "cNq" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/camera{c_tag = "Xenobiology Module North"; dir = 2; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cNr" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/effect/decal/warning_stripes/northwestcorner,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/toxins/xenobiology) "cNs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/toxins/xenobiology) -"cNt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cNt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cNu" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/test_chamber) "cNv" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cNw" = (/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating,/area/space) -"cNx" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cNy" = (/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cNx" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cNy" = (/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio7"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cNz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/sparker{id = "testigniter"; name = "Test Igniter"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cNA" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/aft) "cNB" = (/turf/simulated/floor/plating,/area/maintenance/aft) @@ -7463,7 +7463,7 @@ "cNW" = (/obj/effect/decal/warning_stripes/east,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cNX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/engine/engineering) "cNY" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cNZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) +"cNZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "cOa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cOb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/engineering) "cOc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7528,7 +7528,7 @@ "cPj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cPk" = (/obj/machinery/door_control{id = "Singularity"; name = "Singularity Blast Doors"; pixel_x = 25; pixel_y = 0; req_access_txt = "10"},/obj/effect/decal/warning_stripes/northeastcorner,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/engine/engineering) "cPl" = (/obj/machinery/disposal,/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cPm" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cPm" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cPn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cPo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cPp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -7580,7 +7580,7 @@ "cQj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "engineering_east_airlock"; name = "interior access button"; pixel_x = -20; pixel_y = -20; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/engineering) "cQk" = (/turf/simulated/wall/r_wall,/area/medical/virology) "cQl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cQm" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) +"cQm" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cQn" = (/turf/simulated/wall,/area/medical/virology) "cQo" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6; level = 2},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cQp" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/space,/area/space) @@ -7591,7 +7591,7 @@ "cQu" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cQv" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/wall/r_wall,/area/toxins/test_chamber) "cQw" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cQx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cQx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cQy" = (/turf/simulated/wall/r_wall,/area/maintenance/aft) "cQz" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cQA" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -7603,29 +7603,29 @@ "cQG" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line) "cQH" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line) "cQI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft) -"cQJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) -"cQK" = (/obj/structure/sign/securearea,/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) +"cQJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) +"cQK" = (/obj/structure/sign/securearea,/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) "cQL" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/warning_stripes/blue/hollow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cQM" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/warning_stripes/blue/hollow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"cQN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) +"cQN" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) "cQO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/genetics) "cQP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/atmos) "cQQ" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel,/area/atmos) "cQR" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cQS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) +"cQS" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/equipmentstorage) "cQT" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cQU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) +"cQU" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering/glass{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "cQV" = (/turf/simulated/floor/plasteel,/turf/simulated/floor/plasteel{tag = "icon-siding8 (NORTH)"; icon_state = "siding8"; dir = 1},/area/atmos) "cQW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/genetics) "cQX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/genetics) "cQY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_west_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "cQZ" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "cRa" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cRb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) -"cRc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10; initialize_directions = 10; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) +"cRb" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) +"cRc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10; initialize_directions = 10; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cRd" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Mix to Gas Turbine"},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cRe" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/space) -"cRf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) +"cRf" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "cRg" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/crowbar,/obj/machinery/light_switch{pixel_x = -27},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/engine/engineering) "cRh" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_east_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "cRi" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) @@ -7649,7 +7649,7 @@ "cRA" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) "cRB" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/maintenance/aft) "cRC" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/assembly/assembly_line) -"cRD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cRD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cRE" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/assembly_line) "cRF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/assembly_line) "cRG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/assembly/assembly_line) @@ -7688,7 +7688,7 @@ "cSn" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) "cSo" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Air to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cSp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/binary/valve/digital{color = ""; dir = 4; name = "Gas Mix Outlet Valve"},/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cSq" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) +"cSq" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cSr" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/atmos/distribution) "cSs" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"; network = list("SS13")},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cSt" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering) @@ -7741,7 +7741,7 @@ "cTo" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 1},/turf/simulated/floor/plating,/area/atmos) "cTp" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 4; tag = "icon-manifold-g (NORTH)"},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cTq" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1; tag = "icon-manifold-g (NORTH)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cTr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) +"cTr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cTs" = (/obj/item/weapon/wrench,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_east_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = 20; req_access_txt = "10;13"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTt" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cTu" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/atmos/distribution) @@ -7759,7 +7759,7 @@ "cTG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cTH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cTI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/monkey_recycler,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cTJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cTJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cTK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cTL" = (/obj/structure/rack,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cTM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/computer/camera_advanced/xenobio,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -7830,7 +7830,7 @@ "cVa" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cVb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; name = "Engineering Main"; sortType = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "cVd" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cVe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cVe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cVf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cVg" = (/obj/machinery/camera{c_tag = "Xenobiology Module East"; dir = 8; network = list("Research","SS13"); pixel_y = -22},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cVh" = (/obj/machinery/computer/security/engineering,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7857,13 +7857,13 @@ "cVO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cVP" = (/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; level = 2},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/atmos/distribution) "cVQ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/atmos/distribution) -"cVR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 4; initialize_directions = 11; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) +"cVR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 4; initialize_directions = 11; level = 2},/turf/simulated/floor/plating,/area/atmos/distribution) "cVU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "cVV" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=HOP2"; location = "Stbd"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "cWf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cWg" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cWh" = (/obj/machinery/camera{c_tag = "Xenobiology Module South"; dir = 4; network = list("Research","SS13"); pixel_x = 0},/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cWi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cWj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cWk" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/aft) "cWl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/aft) @@ -7876,7 +7876,7 @@ "cWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/engine/hardsuitstorage) "cWt" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/plasteel,/area/engine/hardsuitstorage) "cWu" = (/turf/simulated/floor/plasteel,/area/engine/hardsuitstorage) -"cWw" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWw" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cWx" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/port) "cWy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cWz" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/computer/monitor{name = "Grid Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7906,7 +7906,7 @@ "cWZ" = (/turf/simulated/floor/engine/n20,/area/atmos) "cXa" = (/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "N2O to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cXb" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 1; level = 2},/turf/simulated/floor/plasteel,/area/atmos) -"cXc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) +"cXc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) "cXd" = (/obj/machinery/atmospherics/binary/valve/digital{color = ""; dir = 4; name = "N2O Outlet Valve"},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 5},/area/atmos) "cXe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/n20,/area/atmos) "cXm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) @@ -7947,7 +7947,7 @@ "cXY" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Air to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cXZ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "cYa" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Pure to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"cYb" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) +"cYb" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) "cYc" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos) "cYf" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) "cYi" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -7991,24 +7991,24 @@ "cZb" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Waste to Port"},/turf/simulated/floor/plasteel,/area/atmos) "cZc" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11; level = 2},/turf/simulated/floor/plasteel,/area/atmos) "cZd" = (/obj/machinery/atmospherics/trinary/filter{density = 0; dir = 1; filter_type = 4; name = "Gas filter (N2O tank)"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cZe" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) +"cZe" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) "cZf" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/west) "cZg" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "cZh" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/space,/area/space) "cZi" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "n2o_in"; on = 1; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "cZj" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/central/west) -"cZq" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cZr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cZs" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cZt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZq" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZr" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZs" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cZt" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cZu" = (/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cZv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZv" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cZw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cZx" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cZy" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cZz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cZA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cZB" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cZy" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cZz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cZB" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cZC" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cZF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) "cZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/poster/official/random{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -8032,7 +8032,7 @@ "daf" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/hardsuit/atmos,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/atmos) "dag" = (/obj/machinery/atmospherics/binary/volume_pump/on{dir = 8; name = "Port to Filter"},/turf/simulated/floor/plasteel,/area/atmos) "dah" = (/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/atmos) -"dai" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) +"dai" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plating,/area/atmos) "daj" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/binary/volume_pump/on{dir = 8; name = "Space Loop Out"},/turf/simulated/floor/plasteel,/area/atmos) "dao" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "dap" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) @@ -8082,15 +8082,15 @@ "dbu" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity West"; dir = 4; network = list("Singularity","SS13")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "dbv" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "dbw" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/hardsuit/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/hardsuit/engineering,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) -"dby" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engineering) +"dby" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engineering) "dbz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/engineering) "dbA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/engine/engineering) "dbB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) -"dbC" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/machinery/door/airlock/engineering/glass{name = "Engine Room"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plating,/area/engine/engineering) +"dbC" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/obj/machinery/door/airlock/engineering/glass{name = "Engine Room"; req_access_txt = "10"; req_one_access_txt = null},/turf/simulated/floor/plating,/area/engine/engineering) "dbD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engineering) -"dbE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/engineering) -"dbF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) -"dbG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/engine/engineering) +"dbE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/engineering) +"dbF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"dbG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/engine/engineering) "dbH" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes/engineering,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering) "dbI" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space) "dbJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/wall/r_wall,/area/engine/engineering) @@ -8151,7 +8151,7 @@ "ddb" = (/obj/structure/particle_accelerator/end_cap,/turf/simulated/floor/plating,/area/engine/engineering) "ddm" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/atmos) "ddp" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/engineering) -"ddr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engineering) +"ddr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engineering) "dds" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos) "ddt" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "ddu" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/effect/decal/warning_stripes/southwest,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -8190,7 +8190,7 @@ "deA" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/engine/engineering) "deB" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/engineering) "deC" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel,/area/engine/engineering) -"deF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) +"deF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Singularity"; layer = 2.7; name = "Singularity Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) "deH" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "deI" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plasteel,/area/atmos) "deJ" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) @@ -8229,7 +8229,7 @@ "dfy" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/atmos) "dfz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/wall/r_wall,/area/engine/engineering) "dfB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{level = 2},/turf/simulated/floor/plasteel,/area/atmos) -"dfE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "24"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/atmos) +"dfE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/external{name = "Engineering Escape Pod"; req_access = null; req_access_txt = "24"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/atmos) "dfF" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/atmos) "dfG" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "dfH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) @@ -8287,7 +8287,7 @@ "dgT" = (/turf/simulated/wall,/area/maintenance/turbine) "dgU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/maintenance/turbine) "dgV" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9; level = 2},/turf/simulated/floor/plasteel,/area/atmos) -"dgW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9; level = 2},/turf/simulated/floor/plating,/area/atmos) +"dgW" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9; level = 2},/turf/simulated/floor/plating,/area/atmos) "dgX" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dgY" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/turf/simulated/floor/plating,/area/maintenance/asmaint) "dgZ" = (/obj/item/weapon/c_tube,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -8316,7 +8316,7 @@ "dhF" = (/obj/machinery/atmospherics/binary/valve/digital/open{name = "Oxygen Outlet Valve"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/atmos) "dhG" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "arrival"},/area/atmos) "dhH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{level = 2},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 10},/area/atmos) -"dhI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) +"dhI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) "dhJ" = (/obj/machinery/camera{c_tag = "Atmospherics South-East"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/binary/valve/digital/open{name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/atmos) "dhK" = (/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/space) "dhL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/wall/r_wall,/area/maintenance/turbine) @@ -8341,17 +8341,17 @@ "die" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dif" = (/turf/simulated/shuttle/wall{tag = "icon-swall2"; icon_state = "swall2"; dir = 2},/area/shuttle/constructionsite) "dig" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/storage/secure) -"dij" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9},/turf/simulated/floor/plating,/area/atmos) -"dik" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 6},/turf/simulated/floor/plating,/area/atmos) +"dij" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9},/turf/simulated/floor/plating,/area/atmos) +"dik" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 6},/turf/simulated/floor/plating,/area/atmos) "dil" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine) "dim" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine) "din" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine) -"dio" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/atmos) -"dip" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{level = 2},/turf/simulated/floor/plating,/area/atmos) +"dio" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/atmos) +"dip" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/yellow{level = 2},/turf/simulated/floor/plating,/area/atmos) "diq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/maintenance/asmaint) "dir" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint) "dis" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/aisat{name = "\improper AI Satellite Hallway"}) -"dit" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/turf/simulated/floor/plating,/area/atmos) +"dit" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green{level = 2},/turf/simulated/floor/plating,/area/atmos) "diu" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6; level = 2},/obj/structure/lattice,/turf/space,/area/space) "div" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine) "diw" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to MiniSat"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 98f541c4425..8aaac8eb3d9 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -1105,7 +1105,7 @@ "wN" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) "wO" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/evac) "wP" = (/turf/unsimulated/floor{icon_state = "green"; dir = 5},/area/centcom/evac) -"xc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) +"xc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) "xd" = (/obj/effect/spawner/window/reinforced,/turf/unsimulated/floor,/area/centcom/evac) "xe" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = -4; req_access_txt = "104"},/obj/machinery/door/window/southleft{dir = 1; name = "security checkpoint"; req_access_txt = "104"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) "xf" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/evac) @@ -1275,7 +1275,7 @@ "Ex" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "Ey" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "Ez" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) -"EB" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"EB" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "EC" = (/obj/machinery/door/airlock/hatch{name = "External Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "ED" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/turf/unsimulated/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; dir = 8; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; name = "window"; opacity = 0; tag = "icon-window5_end (WEST)"},/area/admin) "EE" = (/obj/machinery/chem_dispenser{desc = "It appears Fox is doing more fruit chemistry today!"; hackedcheck = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) @@ -1299,7 +1299,7 @@ "EX" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/infra,/obj/item/device/assembly/infra,/obj/item/device/assembly/infra,/obj/item/device/assembly/infra,/obj/item/device/assembly/infra,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "EY" = (/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5"; name = "window"; opacity = 0; tag = "icon-window5 (EAST)"},/area/admin) "EZ" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/turf/unsimulated/wall{dir = 2; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5"; name = "window"; opacity = 0; tag = "icon-window5"},/area/admin) -"Fa" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINCHEMLOCKDOWN"; name = "Security Doors"; opacity = 0},/obj/machinery/door/airlock/hatch{name = "Chem Lab"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) +"Fa" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ADMINCHEMLOCKDOWN"; name = "Security Doors"; opacity = 0},/obj/machinery/door/airlock/hatch{name = "Chem Lab"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "Fb" = (/obj/structure/rack,/obj/item/ammo_box/magazine/mm556x45,/obj/item/ammo_box/magazine/mm556x45,/obj/item/ammo_box/magazine/mm556x45,/obj/item/ammo_box/magazine/mm556x45,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/weapon/gun/projectile/automatic/l6_saw{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Fc" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic/proto,/obj/item/weapon/gun/projectile/automatic/proto{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Fd" = (/obj/structure/rack,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/magazine/m556,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/ammo_box/a40mm,/obj/item/weapon/gun/projectile/automatic/m90,/obj/item/weapon/gun/projectile/automatic/m90{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) @@ -1344,7 +1344,7 @@ "FR" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2; pixel_z = 0},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "FS" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/obj/item/toy/cards/deck/syndicate/black,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "FU" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) -"FV" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINCHEMLOCKDOWN"; name = "Security Doors"; opacity = 0},/obj/machinery/door/airlock/hatch{desc = "Uh oh."; name = "Operating Theater"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) +"FV" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ADMINCHEMLOCKDOWN"; name = "Security Doors"; opacity = 0},/obj/machinery/door/airlock/hatch{desc = "Uh oh."; name = "Operating Theater"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) "FW" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin) "FX" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/admin) "FY" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/turf/unsimulated/wall{dir = 2; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin) @@ -1362,7 +1362,7 @@ "Gk" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/turf/unsimulated/wall{dir = 2; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5"; name = "window"; opacity = 0; tag = "icon-window5"},/area/admin) "Gl" = (/obj/structure/stool/bed/chair/comfy/black,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/admin) "Gm" = (/obj/machinery/computer/card,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"Go" = (/obj/machinery/door/airlock/public/glass{name = "Computer Hub"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"Go" = (/obj/machinery/door/airlock/public/glass{name = "Computer Hub"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Gp" = (/obj/effect/landmark{name = "aroomwarp"; tag = ""},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Gq" = (/obj/machinery/door/airlock/hatch{desc = "For all your shady business needs"; name = "Gambling Den"; req_access_txt = "0"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/admin) "Gr" = (/obj/structure/table/wood,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/admin) @@ -1461,7 +1461,7 @@ "In" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/tdome/arena) "Io" = (/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "Ip" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/energy/sword/saber/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) -"Iq" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Access"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"Iq" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Access"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "ADMINLOCKDOWN"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "Ir" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) "Is" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "It" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 3a8f30f254a..8b7f4830c13 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -76,9 +76,17 @@ #define EMBEDDED_UNSAFE_REMOVAL_TIME 30 //A Time in ticks, total removal time = (this*item.w_class) //Gun Stuff - #define SAWN_INTACT 0 - #define SAWN_OFF 1 +#define SAWN_INTACT 0 +#define SAWN_OFF 1 - #define WEAPON_LIGHT 0 - #define WEAPON_MEDIUM 1 - #define WEAPON_HEAVY 2 \ No newline at end of file +#define WEAPON_LIGHT 0 +#define WEAPON_MEDIUM 1 +#define WEAPON_HEAVY 2 + +#define EXPLODE_NONE 0 //Don't even ask me why we need this. +#define EXPLODE_DEVASTATE 1 +#define EXPLODE_HEAVY 2 +#define EXPLODE_LIGHT 3 + +#define EMP_HEAVY 1 +#define EMP_LIGHT 2 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 5c807520b7d..b7ebec30f1e 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -12,6 +12,8 @@ //Objects +#define ismecha(A) (istype(A, /obj/mecha)) + #define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable #define is_pen(W) (istype(W, /obj/item/weapon/pen)) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 08a267322db..e2e3420950d 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -21,6 +21,7 @@ #define LOW_OBJ_LAYER 2.5 #define BELOW_OPEN_DOOR_LAYER 2.6 +#define SHUTTER_LAYER 2.65 //Prevents shutters from being placed above doors. It's overridden by /obj/machinery/door/New() & poddoor/shutters/New() #define OPEN_DOOR_LAYER 2.7 #define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible #define TABLE_LAYER 2.8 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d83512ae2b2..4f38a183a80 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -341,5 +341,8 @@ #define BLOOD_STATE_XENO "xeno" #define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" +//for obj explosion block calculation +#define EXPLOSION_BLOCK_PROC -1 + // The SQL version required by this version of the code #define SQL_VERSION 2 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index cf030dc65ed..94b7a9b4255 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -268,7 +268,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul return msg_admin_attack("[key_name_admin(user)] [what_done] [key_name_admin(target)][object ? " with [object]" : " "][addition]") -/proc/do_mob(var/mob/user, var/mob/target, var/time = 30, var/uninterruptible = 0, progress = 1) +/proc/do_mob(var/mob/user, var/mob/target, var/time = 30, var/uninterruptible = 0, progress = 1, datum/callback/extra_checks = null) if(!user || !target) return 0 var/user_loc = user.loc @@ -301,13 +301,13 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul drifting = 0 user_loc = user.loc - if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying ) + if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke())) . = 0 break if(progress) qdel(progbar) -/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1) +/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null) if(!user) return 0 var/atom/Tloc = null @@ -342,7 +342,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul drifting = 0 Uloc = user.loc - if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc)) + if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc)|| (extra_checks && !extra_checks.Invoke())) . = 0 break @@ -370,6 +370,19 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul if(H.get_species() == species_name) . = TRUE +/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE, list/extra_args) + var/turf/T = get_turf(target) + if(!T) + CRASH("attempt to spawn atom type: [spawn_type] in nullspace") + + var/list/new_args = list(T) + if(extra_args) + new_args += extra_args + + for(var/j in 1 to amount) + var/atom/X = new spawn_type(arglist(new_args)) + X.admin_spawned = admin_spawn + /proc/admin_mob_info(mob/M, mob/user = usr) if(!ismob(M)) to_chat(user, "This can only be used on instances of type /mob") diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 723bf48e7e8..dde94eca18a 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -88,7 +88,7 @@ /obj/attacked_by(obj/item/I, mob/living/user) if(I.force) - user.visible_message("[src] has been hit by [user] with [I]!", "You hit [src] with [I]!") + user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") take_damage(I.force, I.damtype, "melee", 1) /mob/living/attacked_by(obj/item/I, mob/living/user, def_zone) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index ece19c01e88..cef139cc476 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -164,9 +164,10 @@ var/const/AIRLOCK_WIRE_LIGHT = 512 //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not), //raises them if they are down (only if power's on) if(!A.locked) - A.lock() - else - A.unlock() + if(A.lock()) + A.audible_message("You hear a click from the bottom of the door.", null, 1) + else if(A.unlock()) + A.audible_message("You hear a click from the bottom of the door.", null, 1) if(AIRLOCK_WIRE_BACKUP_POWER1) //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 5f12a4f0076..7faedcdd5fe 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -24,42 +24,59 @@ #define AIRLOCK_OPENING 4 #define AIRLOCK_DENY 5 #define AIRLOCK_EMAG 6 + +#define AIRLOCK_SECURITY_NONE 0 //Normal airlock //Wires are not secured +#define AIRLOCK_SECURITY_METAL 1 //Medium security airlock //There is a simple metal over wires (use welder) +#define AIRLOCK_SECURITY_PLASTEEL_I_S 2 //Sliced inner plating (use crowbar), jumps to 0 +#define AIRLOCK_SECURITY_PLASTEEL_I 3 //Removed outer plating, second layer here (use welder) +#define AIRLOCK_SECURITY_PLASTEEL_O_S 4 //Sliced outer plating (use crowbar) +#define AIRLOCK_SECURITY_PLASTEEL_O 5 //There is first layer of plasteel (use welder) +#define AIRLOCK_SECURITY_PLASTEEL 6 //Max security airlock //Fully secured wires (use wirecutters to remove grille, that is electrified) + +#define AIRLOCK_INTEGRITY_N 300 // Normal airlock integrity +#define AIRLOCK_INTEGRITY_MULTIPLIER 1.5 // How much reinforced doors health increases +#define AIRLOCK_DAMAGE_DEFLECTION_N 21 // Normal airlock damage deflection +#define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection var/list/airlock_overlays = list() /obj/machinery/door/airlock name = "airlock" icon = 'icons/obj/doors/airlocks/station/public.dmi' icon_state = "closed" - autoclose = 1 + max_integrity = 300 + integrity_failure = 70 + damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N + autoclose = TRUE explosion_block = 1 assemblytype = /obj/structure/door_assembly normalspeed = 1 + var/security_level = 0 //How much are wires secured var/aiControlDisabled = FALSE //If TRUE, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. var/hackProof = FALSE // if TRUE, this door can't be hacked by the AI var/electrified_until = 0 // World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. var/main_power_lost_until = 0 //World time when main power is restored. var/backup_power_lost_until = -1 //World time when backup power is restored. - var/electrified_timer = null - var/main_power_timer = null - var/backup_power_timer = null + var/electrified_timer + var/main_power_timer + var/backup_power_timer var/spawnPowerRestoreRunning = 0 - var/locked = 0 - var/lights = 1 // bolt lights show by default - var/datum/wires/airlock/wires = null + var/lights = TRUE // bolt lights show by default + var/datum/wires/airlock/wires var/aiDisabledIdScanner = 0 var/aiHacking = 0 - var/obj/machinery/door/airlock/closeOther = null - var/closeOtherId = null + var/obj/machinery/door/airlock/closeOther + var/closeOtherId var/lockdownbyai = 0 var/justzap = 0 - var/safe = 1 - var/obj/item/weapon/airlock_electronics/electronics = null + var/obj/item/weapon/airlock_electronics/electronics var/hasShocked = 0 //Prevents multiple shocks from happening var/obj/item/weapon/note //Any papers pinned to the airlock var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to - var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass" + var/airlock_material //material of inner filling; if its an airlock with glass, this should be set to "glass" var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock + var/normal_integrity = AIRLOCK_INTEGRITY_N + var/prying_so_hard = FALSE var/image/old_frame_overlay //keep those in order to prevent unnecessary updating var/image/old_filling_overlay @@ -67,6 +84,7 @@ var/list/airlock_overlays = list() var/image/old_panel_overlay var/image/old_weld_overlay var/image/old_sparks_overlay + var/image/old_dam_overlay var/image/old_note_overlay var/doorOpen = 'sound/machines/airlock_open.ogg' @@ -100,14 +118,25 @@ About the new airlock wires panel: /obj/machinery/door/airlock/initialize() . = ..() if(closeOtherId != null) - for(var/obj/machinery/door/airlock/A in airlocks) - if(A.closeOtherId == closeOtherId && A != src) - closeOther = A - break + addtimer(src, "update_other_id", 5) if(glass) airlock_material = "glass" + if(security_level > AIRLOCK_SECURITY_METAL) + obj_integrity = normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER + max_integrity = normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER + else + obj_integrity = normal_integrity + max_integrity = normal_integrity + if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL) + damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R update_icon() +/obj/machinery/door/airlock/proc/update_other_id() + for(var/obj/machinery/door/airlock/A in airlocks) + if(A.closeOtherId == closeOtherId && A != src) + closeOther = A + break + /obj/machinery/door/airlock/Destroy() QDEL_NULL(electronics) QDEL_NULL(wires) @@ -299,6 +328,7 @@ About the new airlock wires panel: var/image/lights_overlay var/image/panel_overlay var/image/weld_overlay + var/image/damag_overlay var/image/sparks_overlay var/image/note_overlay var/notetype = note_type() @@ -311,10 +341,17 @@ About the new airlock wires panel: else filling_overlay = get_airlock_overlay("fill_closed", icon) if(panel_open) - panel_overlay = get_airlock_overlay("panel_closed", overlays_file) + if(security_level) + panel_overlay = get_airlock_overlay("panel_closed_protected", overlays_file) + else + panel_overlay = get_airlock_overlay("panel_closed", overlays_file) if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) - if(lights) + if(obj_integrity

+

21 March 2018

+

MarsM0nd updated:

+
    +
  • Xray machines now have xray vision, and check contents of an item, instead of just the item.
  • +
+

20 March 2018

MarsM0nd updated: