From 9e38a049f76160b6ca752ff17eefee9e415c0ac7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 8 Feb 2017 11:45:50 -0500 Subject: [PATCH 001/308] REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --- code/modules/mob/living/status_procs.dm | 4 ++++ code/modules/mob/mob_helpers.dm | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 402f94e837e..7dc2d1b8d58 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -103,6 +103,7 @@ // Booleans var/resting = FALSE + var/rest_CD = 0 /* STATUS EFFECTS @@ -140,12 +141,15 @@ /mob/living/proc/StartResting(updating = 1) var/val_change = !resting resting = TRUE + rest_CD = world.time + 20//this is for tracking it for the verb + to_chat(src, "You are now resting.") if(updating && val_change) update_canmove() /mob/living/proc/StopResting(updating = 1) var/val_change = !!resting resting = FALSE + to_chat(src, "You are now getting up.") if(updating && val_change) update_canmove() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 95fce0b9399..dc33990dcca 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -361,9 +361,10 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) set name = "Rest" set category = "IC" - resting = !resting - update_canmove() - to_chat(src, "You are now [resting ? "resting" : "getting up"].") + if(!resting) + StartResting() + else if(resting && !(rest_CD > world.time)) + StopResting() /proc/is_blind(A) if(iscarbon(A)) From 01a660298e7ce4a893cb7bc899348d2a421df26e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 8 Feb 2017 12:17:36 -0500 Subject: [PATCH 002/308] CD edits --- code/modules/mob/living/status_procs.dm | 2 +- code/modules/mob/mob_helpers.dm | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 7dc2d1b8d58..08eff7eada0 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -141,7 +141,7 @@ /mob/living/proc/StartResting(updating = 1) var/val_change = !resting resting = TRUE - rest_CD = world.time + 20//this is for tracking it for the verb + to_chat(src, "You are now resting.") if(updating && val_change) update_canmove() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index dc33990dcca..75f64c753e8 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -361,9 +361,11 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) set name = "Rest" set category = "IC" - if(!resting) + if(!resting && (world.time > rest_CD)) + rest_CD = world.time + 20 StartResting() - else if(resting && !(rest_CD > world.time)) + else if(resting && (world.time > rest_CD)) + rest_CD = world.time + 20 StopResting() /proc/is_blind(A) From 4a155bfb50adaa17db07a0e15e7adffda46a2eb2 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 8 Feb 2017 23:27:08 +0100 Subject: [PATCH 003/308] Admin interaction update --- code/game/machinery/buttons.dm | 73 +-- code/game/machinery/door_control.dm | 20 +- code/game/machinery/doors/airlock.dm | 191 ++++--- code/game/machinery/doors/brigdoors.dm | 15 +- code/game/machinery/doors/door.dm | 53 +- code/game/machinery/doors/firedoor.dm | 11 +- code/game/machinery/doors/windowdoor.dm | 164 +++--- code/game/machinery/flasher.dm | 68 ++- code/game/machinery/newscaster.dm | 513 +++++++++--------- code/game/machinery/vending.dm | 138 ++--- code/game/objects/structures/morgue.dm | 24 +- code/modules/admin/admin_verbs.dm | 24 +- code/modules/client/client defines.dm | 5 +- code/modules/hydroponics/biogenerator.dm | 5 +- code/modules/hydroponics/gene_modder.dm | 8 +- code/modules/hydroponics/seed_extractor.dm | 10 +- code/modules/mob/dead/observer/observer.dm | 2 +- .../mob/living/simple_animal/bot/bot.dm | 5 + code/modules/paperwork/faxmachine.dm | 5 +- code/modules/paperwork/photocopier.dm | 10 +- 20 files changed, 701 insertions(+), 643 deletions(-) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a5c65f7cae7..e28bf145b74 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -53,7 +53,11 @@ /obj/machinery/driver_button/attack_ai(mob/user as mob) - return src.attack_hand(user) + return attack_hand(user) + +/obj/machinery/driver_button/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) /obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob, params) @@ -72,7 +76,7 @@ qdel(src) return 1 - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/driver_button/multitool_menu(var/mob/user, var/obj/item/device/multitool/P) return {" @@ -84,7 +88,7 @@ /obj/machinery/driver_button/attack_hand(mob/user as mob) - src.add_fingerprint(usr) + add_fingerprint(usr) if(stat & (NOPOWER|BROKEN)) return if(active) @@ -95,8 +99,6 @@ launch_sequence() - return - /obj/machinery/driver_button/proc/launch_sequence() active = 1 icon_state = "launcheract" @@ -121,20 +123,20 @@ radio_connection.post_signal(src, signal, filter = RADIO_LOGIC) for(var/obj/machinery/door/poddoor/M in range(src,range)) - if(M.id_tag == src.id_tag && !M.protected) + if(M.id_tag == id_tag && !M.protected) spawn() M.open() sleep(20) for(var/obj/machinery/mass_driver/M in range(src,range)) - if(M.id_tag == src.id_tag) + if(M.id_tag == id_tag) M.drive() sleep(50) for(var/obj/machinery/door/poddoor/M in range(src,range)) - if(M.id_tag == src.id_tag && !M.protected) + if(M.id_tag == id_tag && !M.protected) spawn() M.close() return @@ -163,14 +165,17 @@ idle_power_usage = 2 active_power_usage = 4 -/obj/machinery/ignition_switch/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/ignition_switch/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/ignition_switch/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) -/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user as mob, params) - return src.attack_hand(user) - -/obj/machinery/ignition_switch/attack_hand(mob/user as mob) +/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user, params) + return attack_hand(user) +/obj/machinery/ignition_switch/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return if(active) @@ -182,12 +187,12 @@ icon_state = "launcheract" for(var/obj/machinery/sparker/M in world) - if(M.id == src.id) + if(M.id == id) spawn( 0 ) M.spark() for(var/obj/machinery/igniter/M in world) - if(M.id == src.id) + if(M.id == id) use_power(50) M.on = !( M.on ) M.icon_state = text("igniter[]", M.on) @@ -195,38 +200,4 @@ sleep(50) icon_state = "launcherbtt" - active = 0 - - return - -////////////////////////////////////// -// Flasher Button // -////////////////////////////////////// - -/obj/machinery/flasher_button - name = "flasher button" - desc = "A remote control switch for a mounted flasher." - icon = 'icons/obj/objects.dmi' - icon_state = "launcherbtt" - var/id = null - var/active = 0 - anchored = 1.0 - use_power = 1 - idle_power_usage = 2 - active_power_usage = 4 - -////////////////////////////////////// -// Crematorium Switch // -////////////////////////////////////// - -/obj/machinery/crema_switch - desc = "Burn baby burn!" - name = "crematorium igniter" - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" - anchored = 1.0 - req_access = list(access_crematorium) - var/on = 0 - var/area/area = null - var/otherarea = null - var/id = 1 \ No newline at end of file + active = 0 \ No newline at end of file diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index f952f8f2bc3..e9e4a40e465 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -33,7 +33,7 @@ /obj/machinery/door_control/attack_ai(mob/user as mob) if(wires & 2) - return src.attack_hand(user) + return attack_hand(user) else to_chat(user, "Error, no route to host.") @@ -54,22 +54,26 @@ */ if(istype(W, /obj/item/device/detective_scanner)) return - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/door_control/emag_act(user as mob) if(!emagged) emagged = 1 req_access = list() req_one_access = list() - playsound(src.loc, "sparks", 100, 1) + playsound(loc, "sparks", 100, 1) + +/obj/machinery/door_control/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) /obj/machinery/door_control/attack_hand(mob/user as mob) - src.add_fingerprint(usr) + add_fingerprint(usr) if(stat & (NOPOWER|BROKEN)) return - if(!allowed(user) && (wires & 1)) - to_chat(user, "\red Access Denied") + if(!allowed(user) && (wires & 1) && !user.can_admin_interact()) + to_chat(user, "Access Denied.") flick("doorctrl-denied",src) return @@ -79,7 +83,7 @@ if(normaldoorcontrol) for(var/obj/machinery/door/airlock/D in range(range)) - if(D.id_tag == src.id) + if(D.id_tag == id) if(specialfunctions & OPEN) if(D.density) spawn(0) @@ -110,7 +114,7 @@ else for(var/obj/machinery/door/poddoor/M in airlocks) - if(M.id_tag == src.id) + if(M.id_tag == id) if(M.density) spawn( 0 ) M.open() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 114bada5e19..549c99dfbd1 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -556,17 +556,10 @@ About the new airlock wires panel: flick("door_deny", src) return -/obj/machinery/door/airlock/attack_ai(mob/user as mob) - ui_interact(user) - -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/door/airlock/attack_ai(mob/user as mob) +/obj/machinery/door/airlock/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/door/airlock/attack_ai(mob/user) ui_interact(user) /obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) @@ -682,17 +675,17 @@ About the new airlock wires panel: return /obj/machinery/door/airlock/CanUseTopic(var/mob/user) - if(!issilicon(user)) + if(!issilicon(user) && !isobserver(user)) return STATUS_CLOSE if(operating < 0) //emagged to_chat(user, "Unable to interface: Internal error.") return STATUS_CLOSE - if(!src.canAIControl()) - if(src.canAIHack(user)) - src.hack(user) + if(!canAIControl() && !isobserver(user)) + if(canAIHack(user)) + hack(user) else - if(src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. + if(isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. to_chat(user, "Unable to interface: Connection timed out.") else to_chat(user, "Unable to interface: Connection refused.") @@ -709,27 +702,27 @@ About the new airlock wires panel: if("idscan") if(src.isWireCut(AIRLOCK_WIRE_IDSCAN)) to_chat(usr, "The IdScan wire has been cut - IdScan feature permanently disabled.") - else if(activate && src.aiDisabledIdScanner) - src.aiDisabledIdScanner = 0 + else if(activate && aiDisabledIdScanner) + aiDisabledIdScanner = 0 to_chat(usr, "IdScan feature has been enabled.") - else if(!activate && !src.aiDisabledIdScanner) - src.aiDisabledIdScanner = 1 + else if(!activate && !aiDisabledIdScanner) + aiDisabledIdScanner = 1 to_chat(usr, "IdScan feature has been disabled.") if("main_power") if(!main_power_lost_until) - src.loseMainPower() + loseMainPower() if("backup_power") if(!backup_power_lost_until) - src.loseBackupPower() + loseBackupPower() if("bolts") - if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + if(isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) to_chat(usr, "The door bolt control wire has been cut - Door bolts permanently dropped.") - else if(activate && src.lock()) + else if(activate && lock()) to_chat(usr, "The door bolts have been dropped.") - else if(!activate && src.unlock()) + else if(!activate && unlock()) to_chat(usr, "The door bolts have been raised.") if("electrify_temporary") - if(activate && src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) + if(activate && isWireCut(AIRLOCK_WIRE_ELECTRIFY)) to_chat(usr, text("The electrification wire is cut - Door permanently electrified.")) else if(!activate && electrified_until != 0) to_chat(usr, "The door is now un-electrified.") @@ -740,7 +733,7 @@ About the new airlock wires panel: to_chat(usr, "The door is now electrified for thirty seconds.") electrify(30) if("electrify_permanently") - if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) + if(isWireCut(AIRLOCK_WIRE_ELECTRIFY)) to_chat(usr, text("The electrification wire is cut - Cannot electrify the door.")) else if(!activate && electrified_until != 0) to_chat(usr, "The door is now un-electrified.") @@ -751,9 +744,9 @@ About the new airlock wires panel: to_chat(usr, "The door is now electrified.") electrify(-1) if("open") - if(src.welded) + if(welded) to_chat(usr, text("The airlock has been welded shut!")) - else if(src.locked) + else if(locked) to_chat(usr, text("The door bolts are down!")) else if(activate && density) open() @@ -761,33 +754,33 @@ About the new airlock wires panel: close() if("safeties") // Safeties! We don't need no stinking safeties! - if(src.isWireCut(AIRLOCK_WIRE_SAFETY)) + if(isWireCut(AIRLOCK_WIRE_SAFETY)) to_chat(usr, text("The safety wire is cut - Cannot secure the door.")) - else if(activate && src.safe) + else if(activate && safe) safe = 0 - else if(!activate && !src.safe) + else if(!activate && !safe) safe = 1 if("timing") // Door speed control - if(src.isWireCut(AIRLOCK_WIRE_SPEED)) + if(isWireCut(AIRLOCK_WIRE_SPEED)) to_chat(usr, text("The timing wire is cut - Cannot alter timing.")) - else if(activate && src.normalspeed) + else if(activate && normalspeed) normalspeed = 0 - else if(!activate && !src.normalspeed) + else if(!activate && !normalspeed) normalspeed = 1 if("lights") // Bolt lights - if(src.isWireCut(AIRLOCK_WIRE_LIGHT)) + if(isWireCut(AIRLOCK_WIRE_LIGHT)) to_chat(usr, "The bolt lights wire has been cut - The door bolt lights are permanently disabled.") - else if(!activate && src.lights) + else if(!activate && lights) lights = 0 to_chat(usr, "The door bolt lights have been disabled.") - else if(activate && !src.lights) + else if(activate && !lights) lights = 1 to_chat(usr, "The door bolt lights have been enabled.") if("emergency") // Emergency access - if(src.emergency) + if(emergency) emergency = 0 to_chat(usr, "Emergency access has been disabled.") else @@ -800,35 +793,35 @@ About the new airlock wires panel: /obj/machinery/door/airlock/attackby(C as obj, mob/user as mob, params) // to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 75)) + if(isElectrified()) + if(shock(user, 75)) return if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) return - src.add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) + add_fingerprint(user) + if((istype(C, /obj/item/weapon/weldingtool) && !( operating ) && density)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0,user)) if(frozen) frozen = 0 - if(!src.welded) - src.welded = 1 + if(!welded) + welded = 1 else - src.welded = null - src.update_icon() + welded = null + update_icon() return else return else if(istype(C, /obj/item/weapon/screwdriver)) - src.p_open = !( src.p_open ) - src.update_icon() + p_open = !( p_open ) + update_icon() else if(istype(C, /obj/item/weapon/wirecutters)) - return src.attack_hand(user) + return attack_hand(user) else if(istype(C, /obj/item/device/multitool)) - return src.attack_hand(user) + return attack_hand(user) else if(istype(C, /obj/item/device/assembly/signaler)) - return src.attack_hand(user) + return attack_hand(user) else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) @@ -838,13 +831,13 @@ About the new airlock wires panel: beingcrowbarred = 1 //derp, Agouri else beingcrowbarred = 0 - if( beingcrowbarred && src.p_open && (operating == -1 || (density && welded && operating != 1 && !src.arePowerSystemsOn() && !src.locked)) ) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + if( beingcrowbarred && p_open && (operating == -1 || (density && welded && operating != 1 && !arePowerSystemsOn() && !locked)) ) + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") if(do_after(user,40, target = src)) to_chat(user, "\blue You removed the airlock electronics!") - var/obj/structure/door_assembly/da = new assembly_type(src.loc) + var/obj/structure/door_assembly/da = new assembly_type(loc) da.anchored = 1 if(mineral) da.glass = mineral @@ -852,23 +845,23 @@ About the new airlock wires panel: else if(glass && !da.glass) da.glass = 1 da.state = 1 - da.created_name = src.name + da.created_name = name da.update_state() var/obj/item/weapon/airlock_electronics/ae if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) - if(!src.req_access) - src.check_access() - if(src.req_access.len) - ae.conf_access = src.req_access - else if(src.req_one_access.len) - ae.conf_access = src.req_one_access + ae = new/obj/item/weapon/airlock_electronics( loc ) + if(!req_access) + check_access() + if(req_access.len) + ae.conf_access = req_access + else if(req_one_access.len) + ae.conf_access = req_one_access ae.one_access = 1 else ae = electronics electronics = null - ae.loc = src.loc + ae.loc = loc if(operating == -1) ae.icon_state = "door_electronics_smoked" operating = 0 @@ -917,11 +910,11 @@ About the new airlock wires panel: return 0 use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people if(forced) - playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1) + playsound(loc, 'sound/machines/airlockforced.ogg', 30, 1) else - playsound(src.loc, doorOpen, 30, 1) - if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density) - src.closeOther.close() + playsound(loc, doorOpen, 30, 1) + if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density) + closeOther.close() return ..() /obj/machinery/door/airlock/close(var/forced=0, var/override = 0) @@ -935,16 +928,16 @@ About the new airlock wires panel: if(safe) for(var/turf/turf in locs) if(locate(/mob/living) in turf) - // playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete + // playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete spawn (60) autoclose() return use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people if(forced) - playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1) + playsound(loc, 'sound/machines/airlockforced.ogg', 30, 1) else - playsound(src.loc, doorClose, 30, 1) + playsound(loc, doorClose, 30, 1) var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src)) if(killthis) killthis.ex_act(2)//Smashin windows @@ -953,9 +946,9 @@ About the new airlock wires panel: return 1 operating = 1 do_animate("closing") - src.layer = 3.1 + layer = 3.1 if(!override) sleep(5) - src.density = 1 + density = 1 if(!safe) crush() if(!override) sleep(5) @@ -977,19 +970,19 @@ About the new airlock wires panel: if(operating && !forced) return 0 - src.locked = 1 + locked = 1 playsound(src, boltDown, 30, 0, 3) update_icon() return 1 /obj/machinery/door/airlock/proc/unlock(var/forced=0) - if(!src.locked) + if(!locked) return if(!forced) - if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return + if(operating || !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return - src.locked = 0 + locked = 0 playsound(src,boltUp, 30, 0, 3) update_icon() return 1 @@ -997,11 +990,11 @@ About the new airlock wires panel: /obj/machinery/door/airlock/New() ..() wires = new(src) - if(src.closeOtherId != null) + if(closeOtherId != null) spawn (5) for(var/obj/machinery/door/airlock/A in airlocks) - if(A.closeOtherId == src.closeOtherId && A != src) - src.closeOther = A + if(A.closeOtherId == closeOtherId && A != src) + closeOther = A break if(frozen) welded = 1 @@ -1010,8 +1003,8 @@ About the new airlock wires panel: /obj/machinery/door/airlock/hatch/gamma/attackby(C as obj, mob/user as mob, params) // to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 75)) + if(isElectrified()) + if(shock(user, 75)) return if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) return @@ -1024,17 +1017,17 @@ About the new airlock wires panel: to_chat(user, "The hatch is made of an advanced compound that cannot be deconstructed using an RCD.") return - src.add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density)) + add_fingerprint(user) + if((istype(C, /obj/item/weapon/weldingtool) && !( operating > 0 ) && density)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0,user)) if(frozen) frozen = 0 - if(!src.welded) - src.welded = 1 + if(!welded) + welded = 1 else - src.welded = null - src.update_icon() + welded = null + update_icon() return else return @@ -1043,23 +1036,23 @@ About the new airlock wires panel: /obj/machinery/door/airlock/highsecurity/red/attackby(C as obj, mob/user as mob, params) // to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 75)) + if(isElectrified()) + if(shock(user, 75)) return if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) return - src.add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density)) + add_fingerprint(user) + if((istype(C, /obj/item/weapon/weldingtool) && !( operating > 0 ) && density)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0,user)) if(frozen) frozen = 0 - if(!src.welded) - src.welded = 1 + if(!welded) + welded = 1 else - src.welded = null - src.update_icon() + welded = null + update_icon() return else return @@ -1085,9 +1078,9 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/prison_open() if(arePowerSystemsOn()) - src.unlock() - src.open() - src.lock() + unlock() + open() + lock() /obj/machinery/door/airlock/hostile_lockdown(mob/origin) // Must be powered and have working AI wire. diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 0be61cde4b6..66547ff0759 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -172,8 +172,10 @@ //Allows AIs to use door_timer, see human attack_hand function below /obj/machinery/door_timer/attack_ai(mob/user) - return attack_hand(user) + interact(user) +/obj/machinery/door_timer/attack_ghost(mob/user) + interact(user) //Allows humans to use door_timer //Opens dialog window when someone clicks on door timer @@ -182,7 +184,9 @@ /obj/machinery/door_timer/attack_hand(mob/user) if(..()) return - + interact(user) + +/obj/machinery/door_timer/interact(mob/user) // Used for the 'time left' display var/second = round(timeleft() % 60) var/minute = round((timeleft() - second) / 60) @@ -239,9 +243,10 @@ // Also updates dialog window and timer icon /obj/machinery/door_timer/Topic(href, href_list) if(..()) - return - if(!allowed(usr)) - return + return 1 + + if(!allowed(usr) && !usr.can_admin_interact()) + return 1 usr.set_machine(src) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7ef5406f1dc..27877c22c72 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -77,7 +77,7 @@ if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM if(density) - if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access) || emergency == 1)) + if(mecha.occupant && (allowed(mecha.occupant) || check_access_list(mecha.operation_req_access) || emergency == 1)) open() else do_animate("deny") @@ -111,38 +111,43 @@ do_animate("deny") return -/obj/machinery/door/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/door/attack_ai(mob/user) + return attack_hand(user) -/obj/machinery/door/attack_hand(mob/user as mob) - return src.attackby(user, user) +/obj/machinery/door/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) + +/obj/machinery/door/attack_hand(mob/user) + return attackby(user, user) -/obj/machinery/door/attack_tk(mob/user as mob) +/obj/machinery/door/attack_tk(mob/user) if(requiresID() && !allowed(null)) return ..() -/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob, params) +/obj/machinery/door/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/device/detective_scanner)) return - if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. - src.add_fingerprint(user) - if(!Adjacent(user)) - user = null - if(!src.requiresID()) - user = null - if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) + + if(operating || isrobot(user)) + return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. + + add_fingerprint(user) + + if(density && istype(I, /obj/item/weapon/melee/energy/blade)) emag_act(user) return 1 - if(src.allowed(user) || src.emergency == 1) - if(src.density) + + if(allowed(user) || emergency == 1 || user.can_admin_interact()) + if(density) open() else close() return - if(src.density) + + if(density) do_animate("deny") - return /obj/machinery/door/emag_act(user as mob) if(density) @@ -213,11 +218,11 @@ if(!operating) operating = 1 do_animate("opening") - src.set_opacity(0) + set_opacity(0) sleep(5) - src.density = 0 + density = 0 sleep(5) - src.layer = open_layer + layer = open_layer update_icon() set_opacity(0) operating = 0 @@ -242,9 +247,9 @@ autoclose_timer = 0 do_animate("closing") - src.layer = closed_layer + layer = closed_layer sleep(5) - src.density = 1 + density = 1 sleep(5) update_icon() if(visible && !glass) @@ -266,7 +271,7 @@ L.Weaken(5) else //for simple_animals & borgs L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - var/turf/simulated/location = src.loc + var/turf/simulated/location = loc if(istype(location, /turf/simulated)) //add_blood doesn't work for borgs/xenos, but add_blood_floor does. location.add_blood_floor(L) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 09f4885dc07..f95612e6b89 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -173,12 +173,15 @@ if(alarmed) nextstate = CLOSED -/obj/machinery/door/firedoor/attack_ai(mob/user as mob) +/obj/machinery/door/firedoor/attack_ghost(mob/user as mob) + return attack_ai(user) + +/obj/machinery/door/firedoor/attack_ai(mob/user) if(operating || stat & NOPOWER) return //Already doing something or depowered. if(blocked) - to_chat(user, "\red \The [src] is welded solid!") + to_chat(user, "\The [src] is welded solid!") return var/area/A = get_area_master(src) @@ -186,11 +189,11 @@ var/alarmed = A.air_doors_activated || A.fire var/access_granted = 0 - if(isAI(user) || isrobot(user)) + if(isAI(user) || isrobot(user) || user.can_admin_interact()) access_granted = 1 if(access_granted == 1) - user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\ + user.visible_message("\The [src] [density ? "open" : "close"]s for \the [user].",\ "\The [src] [density ? "open" : "close"]s.",\ "You hear a beep, and a door opening.") diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 76f6c7e94d3..7b6752f892b 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -13,9 +13,9 @@ /obj/machinery/door/window/New() ..() - if(src.req_access && src.req_access.len) - src.icon_state = "[src.icon_state]" - src.base_state = src.icon_state + if(req_access && req_access.len) + icon_state = "[icon_state]" + base_state = icon_state if(!color) color = color_windows(src) @@ -33,7 +33,7 @@ /obj/machinery/door/window/proc/open_and_close() open() - if(src.check_access(null)) + if(check_access(null)) sleep(50) else //secure doors close faster sleep(20) @@ -45,10 +45,10 @@ if(!ismob(AM)) if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM - if(mecha.occupant && src.allowed(mecha.occupant)) + if(mecha.occupant && allowed(mecha.occupant)) open_and_close() else - flick(text("[]deny", src.base_state), src) + flick(text("[]deny", base_state), src) return if(!ticker) return @@ -58,16 +58,16 @@ return /obj/machinery/door/window/bumpopen(mob/user as mob) - if( operating || !src.density ) + if( operating || !density ) return - src.add_fingerprint(user) - if(!src.requiresID()) + add_fingerprint(user) + if(!requiresID()) user = null if(allowed(user)) open_and_close() else - flick(text("[]deny", src.base_state), src) + flick(text("[]deny", base_state), src) return /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0) @@ -97,7 +97,7 @@ return 1 /obj/machinery/door/window/open(var/forced=0) - if(src.operating == 1) //doors can still open when emag-disabled + if(operating == 1) //doors can still open when emag-disabled return 0 if(!ticker) return 0 @@ -107,24 +107,24 @@ if(forced < 2) if(emagged) return 0 - if(!src.operating) //in case of emag - src.operating = 1 - flick(text("[]opening", src.base_state), src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - src.icon_state = text("[]open", src.base_state) + if(!operating) //in case of emag + operating = 1 + flick(text("[]opening", base_state), src) + playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1) + icon_state = text("[]open", base_state) sleep(10) - src.density = 0 -// src.sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn + density = 0 +// sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn air_update_turf(1) update_freelook_sight() if(operating == 1) //emag again - src.operating = 0 + operating = 0 return 1 /obj/machinery/door/window/close(var/forced=0) - if(src.operating) + if(operating) return 0 if(!forced) if(stat & NOPOWER) @@ -132,33 +132,33 @@ if(forced < 2) if(emagged) return 0 - src.operating = 1 - flick(text("[]closing", src.base_state), src) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - src.icon_state = src.base_state + operating = 1 + flick(text("[]closing", base_state), src) + playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1) + icon_state = base_state - src.density = 1 -// if(src.visible) + density = 1 +// if(visible) // set_opacity(1) //TODO: why is this here? Opaque windoors? ~Carn air_update_turf(1) update_freelook_sight() sleep(10) - src.operating = 0 + operating = 0 return 1 /obj/machinery/door/window/proc/take_damage(var/damage) - src.health = max(0, src.health - damage) - if(src.health <= 0) + health = max(0, health - damage) + if(health <= 0) var/debris = list( - new /obj/item/weapon/shard(src.loc), - new /obj/item/weapon/shard(src.loc), - new /obj/item/stack/rods(src.loc, 2), - new /obj/item/stack/cable_coil(src.loc, 2) + new /obj/item/weapon/shard(loc), + new /obj/item/weapon/shard(loc), + new /obj/item/stack/rods(loc, 2), + new /obj/item/stack/cable_coil(loc, 2) ) for(var/obj/fragment in debris) transfer_fingerprints_to(fragment) - src.density = 0 + density = 0 qdel(src) return @@ -177,34 +177,37 @@ tforce = 40 else tforce = AM:throwforce - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) take_damage(tforce) //..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak return /obj/machinery/door/window/mech_melee_attack(obj/mecha/M) if(M.damtype == "brute") - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) M.occupant_message("You hit [src].") visible_message("[src] has been hit by [M.name].") take_damage(M.force) return -/obj/machinery/door/window/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/door/window/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/door/window/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) /obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0) - if(src.operating) + if(operating) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - user.visible_message("[user] smashes against the [src.name].", \ - "[user] smashes against the [src.name].") + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) + user.visible_message("[user] smashes against the [name].", \ + "[user] smashes against the [name].") take_damage(damage) /obj/machinery/door/window/attack_alien(mob/living/user as mob) - if(islarva(user)) return attack_generic(user, 25) @@ -221,22 +224,21 @@ return attack_generic(user, 25) - /obj/machinery/door/window/attack_hand(mob/user as mob) - return src.attackby(user, user) + return attackby(user, user) /obj/machinery/door/window/emag_act(user as mob, weapon as obj) if(density) - src.operating = -1 - flick("[src.base_state]spark", src) + operating = -1 + flick("[base_state]spark", src) sleep(6) desc += "
Its access panel is smoking slightly." if(istype(weapon, /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, src.loc) + spark_system.set_up(5, 0, loc) spark_system.start() - playsound(src.loc, "sparks", 50, 1) - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(loc, "sparks", 50, 1) + playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) visible_message(" The glass door was sliced open by [user]!") open(2) emagged = 1 @@ -248,33 +250,33 @@ /obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob, params) //If it's in the process of opening/closing, ignore the click - if(src.operating) + if(operating) return add_fingerprint(user) //Ninja swords? You may pass. - if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) + if(density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) emag_act(user,I) return 1 if(istype(I, /obj/item/weapon/screwdriver)) - if(src.density || src.operating) + if(density || operating) to_chat(user, "You need to open the door to access the maintenance panel.") return - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - src.p_open = !( src.p_open ) - to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [src.name].") + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + p_open = !( p_open ) + to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [name].") return if(istype(I, /obj/item/weapon/crowbar)) - if(p_open && !src.density && !src.operating) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the [src.name].", \ - "You start to remove electronics from the [src.name].") + if(p_open && !density && !operating) + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + user.visible_message("[user] removes the electronics from the [name].", \ + "You start to remove electronics from the [name].") if(do_after(user,40, target = src)) - if(src.p_open && !src.density && !src.operating && src.loc) - var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc) + if(p_open && !density && !operating && loc) + var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc) switch(base_state) if("left") WA.facing = "l" @@ -288,10 +290,10 @@ WA.secure = 1 WA.anchored = 1 WA.state= "02" - WA.dir = src.dir - WA.ini_dir = src.dir + WA.dir = dir + WA.ini_dir = dir WA.update_icon() - WA.created_name = src.name + WA.created_name = name if(emagged) to_chat(user, "You discard the damaged electronics.") @@ -302,18 +304,18 @@ var/obj/item/weapon/airlock_electronics/ae if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) - if(!src.req_access) - src.check_access() - if(src.req_access.len) - ae.conf_access = src.req_access - else if(src.req_one_access.len) - ae.conf_access = src.req_one_access + ae = new/obj/item/weapon/airlock_electronics( loc ) + if(!req_access) + check_access() + if(req_access.len) + ae.conf_access = req_access + else if(req_one_access.len) + ae.conf_access = req_one_access ae.one_access = 1 else ae = electronics electronics = null - ae.loc = src.loc + ae.loc = loc qdel(src) return @@ -322,37 +324,37 @@ //If windoor is unpowered, crowbar, fireaxe and armblade can force it. if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe)) if(stat & NOPOWER) - if(src.density) + if(density) open(2) else close(2) return //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) ) + if(density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) ) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if( (I.flags&NOBLUDGEON) || !I.force ) return var/aforce = I.force - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) visible_message("\The [src] has been hit by [user] with [I].") if(I.damtype == BURN || I.damtype == BRUTE) take_damage(aforce) return - if(!src.requiresID()) + if(!requiresID()) //don't care who they are or what they have, act as if they're NOTHING user = null - if(src.allowed(user)) - if(src.density) + if(allowed(user) || user.can_admin_interact()) + if(density) open() else close() - else if(src.density) - flick(text("[]deny", src.base_state), src) + else if(density) + flick(text("[]deny", base_state), src) return diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 655ffd11634..bbc22aa8b2a 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -25,32 +25,32 @@ /* /obj/machinery/flasher/New() sleep(4) //<--- What the fuck are you doing? D= - src.sd_set_light(2) + sd_set_light(2) */ /obj/machinery/flasher/power_change() if( powered() ) stat &= ~NOPOWER icon_state = "[base_state]1" -// src.sd_set_light(2) +// sd_set_light(2) else stat |= ~NOPOWER icon_state = "[base_state]1-p" -// src.sd_set_light(0) +// sd_set_light(0) //Don't want to render prison breaks impossible /obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wirecutters)) add_fingerprint(user) - src.disable = !src.disable - if(src.disable) + disable = !disable + if(disable) user.visible_message("\red [user] has disconnected the [src]'s flashbulb!", "\red You disconnect the [src]'s flashbulb!") - if(!src.disable) + if(!disable) user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!") //Let the AI trigger them directly. /obj/machinery/flasher/attack_ai() - if(src.anchored) - return src.flash() + if(anchored) + return flash() else return @@ -58,16 +58,16 @@ if(!(powered())) return - if((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) + if((disable) || (last_flash && world.time < last_flash + 150)) return - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) + playsound(loc, 'sound/weapons/flash.ogg', 100, 1) flick("[base_state]_flash", src) - src.last_flash = world.time + last_flash = world.time use_power(1000) for(var/mob/living/L in viewers(src, null)) - if(get_dist(src, L) > src.range) + if(get_dist(src, L) > range) continue if(L.flash_eyes(affect_silicon = 1)) @@ -85,35 +85,51 @@ ..(severity) /obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) - if((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) + if((disable) || (last_flash && world.time < last_flash + 150)) return if(istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - if((M.m_intent != "walk") && (src.anchored)) - src.flash() + if((M.m_intent != "walk") && (anchored)) + flash() /obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) add_fingerprint(user) - src.anchored = !src.anchored + anchored = !anchored - if(!src.anchored) + if(!anchored) user.show_message(text("\red [src] can now be moved.")) - src.overlays.Cut() + overlays.Cut() - else if(src.anchored) + else if(anchored) user.show_message(text("\red [src] is now secured.")) - src.overlays += "[base_state]-s" + overlays += "[base_state]-s" +// Flasher button +/obj/machinery/flasher_button + name = "flasher button" + desc = "A remote control switch for a mounted flasher." + icon = 'icons/obj/objects.dmi' + icon_state = "launcherbtt" + var/id = null + var/active = 0 + anchored = 1.0 + use_power = 1 + idle_power_usage = 2 + active_power_usage = 4 + /obj/machinery/flasher_button/attack_ai(mob/user as mob) - return src.attack_hand(user) + return attack_hand(user) + +/obj/machinery/flasher_button/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) /obj/machinery/flasher_button/attackby(obj/item/weapon/W, mob/user as mob, params) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/flasher_button/attack_hand(mob/user as mob) - if(stat & (NOPOWER|BROKEN)) return if(active) @@ -125,13 +141,11 @@ icon_state = "launcheract" for(var/obj/machinery/flasher/M in world) - if(M.id == src.id) + if(M.id == id) spawn() M.flash() sleep(50) icon_state = "launcherbtt" - active = 0 - - return \ No newline at end of file + active = 0 \ No newline at end of file diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 1d8d9a1e22e..7f2c1706cbc 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -27,22 +27,22 @@ //var/page = null //For newspapers /datum/feed_message/proc/clear() - src.author = "" - src.body = "" - src.backup_body = "" - src.backup_author = "" - src.img = null - src.backup_img = null + author = "" + body = "" + backup_body = "" + backup_author = "" + img = null + backup_img = null view_count = 0 /datum/feed_channel/proc/clear() - src.channel_name = "" - src.messages = list() - src.locked = 0 - src.author = "" - src.backup_author = "" - src.censored = 0 - src.is_admin_channel = 0 + channel_name = "" + messages = list() + locked = 0 + author = "" + backup_author = "" + censored = 0 + is_admin_channel = 0 total_view_count = 0 /datum/feed_channel/proc/announce_news() @@ -113,10 +113,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/New() //Constructor, ho~ allCasters += src - src.paper_remaining = 15 // Will probably change this to something better + paper_remaining = 15 // Will probably change this to something better for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number - src.unit_no++ - src.update_icon() //for any custom ones on the map... + unit_no++ + update_icon() //for any custom ones on the map... ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that /obj/machinery/newscaster/Destroy() @@ -129,21 +129,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(!ispowered || isbroken) icon_state = "newscaster_off" if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite. - src.overlays.Cut() - src.overlays += image(src.icon, "crack3") + overlays.Cut() + overlays += image(icon, "crack3") return - src.overlays.Cut() //reset overlays + overlays.Cut() //reset overlays if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message icon_state = "newscaster_wanted" return if(alert) //new message alert overlay - src.overlays += "newscaster_alert" + overlays += "newscaster_alert" if(hitstaken > 0) //Cosmetic damage overlay - src.overlays += image(src.icon, "crack[hitstaken]") + overlays += image(icon, "crack[hitstaken]") icon_state = "newscaster_normal" return @@ -151,15 +151,15 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/power_change() if(isbroken) //Broken shit can't be powered. return - if( src.powered() ) - src.ispowered = 1 + if( powered() ) + ispowered = 1 stat &= ~NOPOWER - src.update_icon() + update_icon() else spawn(rand(0, 15)) - src.ispowered = 0 + ispowered = 0 stat |= NOPOWER - src.update_icon() + update_icon() /obj/machinery/newscaster/ex_act(severity) @@ -168,36 +168,42 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co qdel(src) return if(2.0) - src.isbroken=1 + isbroken=1 if(prob(50)) qdel(src) else - src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in. + update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in. return else if(prob(50)) - src.isbroken=1 - src.update_icon() + isbroken=1 + update_icon() return return -/obj/machinery/newscaster/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/newscaster/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/newscaster/attack_ghost(mob/user) + return attack_hand(user) -/obj/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############ - if(!src.ispowered || src.isbroken) +/obj/machinery/newscaster/attack_hand(mob/user) //########### THE MAIN BEEF IS HERE! And in the proc below this...############ + interact(user) + +/obj/machinery/newscaster/interact(mob/user) + if(!ispowered || isbroken) return - if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) ) - var/mob/living/human_or_robot_user = user + if(ishuman(user) || issilicon(user) || isobserver(user)) var/dat - dat = text("Newscaster

Newscaster Unit #[src.unit_no]

") + dat = text("Newscaster

Newscaster Unit #[unit_no]

") - src.scan_user(human_or_robot_user) //Newscaster scans you + if(can_scan(user)) + scan_user(user) //Newscaster scans you switch(screen) if(0) - dat += {"Welcome to Newscasting Unit #[src.unit_no].
Interface & News networks Operational. + dat += {"Welcome to Newscasting Unit #[unit_no].
Interface & News networks Operational.
Property of Nanotrasen"} if(news_network.wanted_issue) dat+= "
Read Wanted Issue" @@ -210,8 +216,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else dat+= "
Unsilence unit" dat+= {"
Re-scan User -

Exit"} - if(src.securityCaster) +

Exit"} + if(securityCaster) var/wanted_already = 0 if(news_network.wanted_issue) wanted_already = 1 @@ -220,7 +226,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue
Censor Feed Stories
Mark Feed Channel with Nanotrasen D-Notice -

The newscaster recognises you as: [src.scanned_user]"} +

The newscaster recognises you as: [scanned_user]"} if(1) dat+= "Station Feed Channels
" if( isemptylist(news_network.network_channels) ) @@ -231,7 +237,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="[CHANNEL.channel_name]
" else dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - /*for(var/datum/feed_channel/CHANNEL in src.channel_list) + /*for(var/datum/feed_channel/CHANNEL in channel_list) dat+="[CHANNEL.channel_name]:
\[created by: [CHANNEL.author]\]

" if( isemptylist(CHANNEL.messages) ) dat+="No feed messages found in channel...

" @@ -243,30 +249,30 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="
Back" if(2) dat+={"Creating new Feed Channel... -
Channel Name: [src.channel_name]
- Channel Author: [src.scanned_user]
- Will Accept Public Feeds: [(src.c_locked) ? ("NO") : ("YES")]

+
Channel Name: [channel_name]
+ Channel Author: [scanned_user]
+ Will Accept Public Feeds: [(c_locked) ? ("NO") : ("YES")]


Submit

Cancel
"} if(3) dat+={"Creating new Feed Message... -
Receiving Channel: [src.channel_name]
- Message Author: [src.scanned_user]
- Message Body: [src.msg]
- Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]
+
Receiving Channel: [channel_name]
+ Message Author: [scanned_user]
+ Message Body: [msg]
+ Attach Photo: [(photo ? "Photo Attached" : "No Photo")]

Submit

Cancel
"} if(4) - dat+="Feed story successfully submitted to [src.channel_name].

" + dat+="Feed story successfully submitted to [channel_name].

" dat+="
Return
" if(5) - dat+="Feed Channel [src.channel_name] created successfully.

" + dat+="Feed Channel [channel_name] created successfully.

" dat+="
Return
" if(6) dat+="ERROR: Could not submit Feed story to Network.

" - if(src.channel_name=="") + if(channel_name=="") dat+="Invalid receiving channel name.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="Channel author unverified.
" - if(src.msg == "" || src.msg == "\[REDACTED\]") + if(msg == "" || msg == "\[REDACTED\]") dat+="Invalid message body.
" dat+="
Return
" @@ -280,18 +286,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co existing_authors += FC.backup_author else existing_authors += FC.author - if(src.scanned_user in existing_authors) + if(scanned_user in existing_authors) dat+="There already exists a Feed channel under your name.
" - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") + if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="Invalid channel name.
" var/check = 0 for(var/datum/feed_channel/FC in news_network.network_channels) - if(FC.channel_name == src.channel_name) + if(FC.channel_name == channel_name) check = 1 break if(check) dat+="Channel name already in use.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="Channel author unverified.
" dat+="
Return
" if(8) @@ -304,22 +310,22 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else active_num-- dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." //TODO: CONTINUE - dat+="

Liquid Paper remaining: [(src.paper_remaining) *100 ] cm^3" + dat+="

Liquid Paper remaining: [(paper_remaining) *100 ] cm^3" dat+="

Print Paper" dat+="
Cancel" if(9) - dat+="[src.viewing_channel.channel_name]: \[created by: [src.viewing_channel.author]\]
" + dat+="[viewing_channel.channel_name]: \[created by: [viewing_channel.author]\]
" dat+="Feed view count: [viewing_channel.total_view_count]
" viewing_channel.total_view_count++ - if(src.viewing_channel.censored) + if(viewing_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
" dat+="No further feed story additions are allowed while the D-Notice is in effect.

" else - if( isemptylist(src.viewing_channel.messages) ) + if( isemptylist(viewing_channel.messages) ) dat+="No feed messages found in channel...
" else var/i = 0 - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) + for(var/datum/feed_message/MESSAGE in viewing_channel.messages) i++ dat+="-[MESSAGE.body]
" if(MESSAGE.img) @@ -354,28 +360,28 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="
Back" if(12) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
" - dat+="[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
" + dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.author] \]
" + dat+="[(viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
" - if( isemptylist(src.viewing_channel.messages) ) + if( isemptylist(viewing_channel.messages) ) dat+="No feed messages found in channel...
" else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) + for(var/datum/feed_message/MESSAGE in viewing_channel.messages) dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]
" dat+="[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
" dat+="
Back" if(13) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
" - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" - if(src.viewing_channel.censored) + dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.author] \]
" + dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" + if(viewing_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
" dat+="No further feed story additions are allowed while the D-Notice is in effect.

" else - if( isemptylist(src.viewing_channel.messages) ) + if( isemptylist(viewing_channel.messages) ) dat+="No feed messages found in channel...
" else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) + for(var/datum/feed_message/MESSAGE in viewing_channel.messages) dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]
" dat+="
Back" @@ -390,27 +396,27 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(wanted_already) dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below.
" dat+="
" - dat+="Criminal Name: [src.channel_name]
" - dat+="Description: [src.msg]
" - dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]
" + dat+="Criminal Name: [channel_name]
" + dat+="Description: [msg]
" + dat+="Attach Photo: [(photo ? "Photo Attached" : "No Photo")]
" if(wanted_already) dat+="Wanted Issue created by: [news_network.wanted_issue.backup_author]
" else - dat+="Wanted Issue will be created under prosecutor: [src.scanned_user]
" + dat+="Wanted Issue will be created under prosecutor: [scanned_user]
" dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" if(wanted_already) dat+="
Take down Issue" dat+="
Cancel" if(15) - dat+="Wanted issue for [src.channel_name] is now in Network Circulation.

" + dat+="Wanted issue for [channel_name] is now in Network Circulation.

" dat+="
Return
" if(16) dat+="ERROR: Wanted Issue rejected by Network.

" - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") + if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="Invalid name for person wanted.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="Issue author unverified.
" - if(src.msg == "" || src.msg == "\[REDACTED\]") + if(msg == "" || msg == "\[REDACTED\]") dat+="Invalid description.
" dat+="
Return
" if(17) @@ -428,7 +434,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="None" dat+="

Back
" if(19) - dat+="Wanted issue for [src.channel_name] successfully edited.

" + dat+="Wanted issue for [channel_name] successfully edited.

" dat+="
Return
" if(20) dat+="Printing successfull. Please receive your newspaper from the bottom of the machine.

" @@ -443,32 +449,24 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/datum/browser/popup = new(user, "newscaster_main", name, 400, 600) popup.set_content(dat) popup.open(0) - onclose(human_or_robot_user, "newscaster_main") - - /*if(src.isbroken) //debugging shit - return - src.hitstaken++ - if(src.hitstaken==3) - src.isbroken = 1 - src.update_icon()*/ - - + onclose(user, "newscaster_main") + /obj/machinery/newscaster/Topic(href, href_list) if(..()) return 1 usr.set_machine(src) if(href_list["set_channel_name"]) - src.channel_name = sanitizeSQL(strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))) - while(findtext(src.channel_name," ") == 1) - src.channel_name = copytext(src.channel_name,2,lentext(src.channel_name)+1) - src.updateUsrDialog() - //src.update_icon() + channel_name = sanitizeSQL(strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))) + while(findtext(channel_name," ") == 1) + channel_name = copytext(channel_name,2,lentext(channel_name)+1) + updateUsrDialog() + //update_icon() else if(href_list["set_channel_lock"]) - src.c_locked = !src.c_locked - src.updateUsrDialog() - //src.update_icon() + c_locked = !c_locked + updateUsrDialog() + //update_icon() else if(href_list["submit_new_channel"]) //var/list/existing_channels = list() //OBSOLETE @@ -481,25 +479,25 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co existing_authors +=FC.author var/check = 0 for(var/datum/feed_channel/FC in news_network.network_channels) - if(FC.channel_name == src.channel_name) + if(FC.channel_name == channel_name) check = 1 break - if(src.channel_name == "" || src.channel_name == "\[REDACTED\]" || src.scanned_user == "Unknown" || check || (src.scanned_user in existing_authors) ) - src.screen=7 + if(channel_name == "" || channel_name == "\[REDACTED\]" || scanned_user == "Unknown" || check || (scanned_user in existing_authors) ) + screen=7 else var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") if(choice=="Confirm") var/datum/feed_channel/newChannel = new /datum/feed_channel - newChannel.channel_name = src.channel_name - newChannel.author = src.scanned_user + newChannel.channel_name = channel_name + newChannel.author = scanned_user newChannel.locked = c_locked feedback_inc("newscaster_channels",1) /*for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) //Let's add the new channel in all casters. NEWSCASTER.channel_list += newChannel*/ //Now that it is sane, get it into the list. -OBSOLETE news_network.network_channels += newChannel //Adding channel to the global network - src.screen=5 - src.updateUsrDialog() - //src.update_icon() + screen=5 + updateUsrDialog() + //update_icon() else if(href_list["set_channel_receiving"]) //var/list/datum/feed_channel/available_channels = list() @@ -507,59 +505,59 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co for(var/datum/feed_channel/F in news_network.network_channels) if( (!F.locked || F.author == scanned_user) && !F.censored) available_channels += F.channel_name - src.channel_name = strip_html_simple(input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels ) - src.updateUsrDialog() + channel_name = strip_html_simple(input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels ) + updateUsrDialog() else if(href_list["set_new_message"]) - src.msg = strip_html(input(usr, "Write your feed story", "Network Channel Handler", "")) - while(findtext(src.msg," ") == 1) - src.msg = copytext(src.msg,2,lentext(src.msg)+1) - src.updateUsrDialog() + msg = strip_html(input(usr, "Write your feed story", "Network Channel Handler", "")) + while(findtext(msg," ") == 1) + msg = copytext(msg,2,lentext(msg)+1) + updateUsrDialog() else if(href_list["set_attachment"]) AttachPhoto(usr) - src.updateUsrDialog() + updateUsrDialog() else if(href_list["submit_new_message"]) - if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" ) - src.screen=6 + if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "" ) + screen=6 else var/datum/feed_message/newMsg = new /datum/feed_message - newMsg.author = src.scanned_user - newMsg.body = src.msg + newMsg.author = scanned_user + newMsg.body = msg if(photo) newMsg.img = photo.img feedback_inc("newscaster_stories",1) var/announcement = "" for(var/datum/feed_channel/FC in news_network.network_channels) - if(FC.channel_name == src.channel_name) + if(FC.channel_name == channel_name) FC.messages += newMsg //Adding message to the network's appropriate feed_channel announcement = FC.announce_news() break - src.screen=4 + screen=4 for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) NEWSCASTER.newsAlert(announcement) - src.updateUsrDialog() + updateUsrDialog() else if(href_list["create_channel"]) - src.screen=2 - src.updateUsrDialog() + screen=2 + updateUsrDialog() else if(href_list["create_feed_story"]) - src.screen=3 - src.updateUsrDialog() + screen=3 + updateUsrDialog() else if(href_list["menu_paper"]) - src.screen=8 - src.updateUsrDialog() + screen=8 + updateUsrDialog() else if(href_list["print_paper"]) - if(!src.paper_remaining) - src.screen=21 + if(!paper_remaining) + screen=21 else - src.print_paper() - src.screen = 20 - src.updateUsrDialog() + print_paper() + screen = 20 + updateUsrDialog() else if(href_list["silence_unit"]) silence=1 @@ -570,12 +568,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co updateUsrDialog() else if(href_list["menu_censor_story"]) - src.screen=10 - src.updateUsrDialog() + screen=10 + updateUsrDialog() else if(href_list["menu_censor_channel"]) - src.screen=11 - src.updateUsrDialog() + screen=11 + updateUsrDialog() else if(href_list["menu_wanted"]) var/already_wanted = 0 @@ -583,54 +581,54 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co already_wanted = 1 if(already_wanted) - src.channel_name = news_network.wanted_issue.author - src.msg = news_network.wanted_issue.body - src.screen = 14 - src.updateUsrDialog() + channel_name = news_network.wanted_issue.author + msg = news_network.wanted_issue.body + screen = 14 + updateUsrDialog() else if(href_list["set_wanted_name"]) - src.channel_name = strip_html(input(usr, "Provide the name of the Wanted person", "Network Security Handler", "")) - while(findtext(src.channel_name," ") == 1) - src.channel_name = copytext(src.channel_name,2,lentext(src.channel_name)+1) - src.updateUsrDialog() + channel_name = strip_html(input(usr, "Provide the name of the Wanted person", "Network Security Handler", "")) + while(findtext(channel_name," ") == 1) + channel_name = copytext(channel_name,2,lentext(channel_name)+1) + updateUsrDialog() else if(href_list["set_wanted_desc"]) - src.msg = strip_html(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", "")) - while(findtext(src.msg," ") == 1) - src.msg = copytext(src.msg,2,lentext(src.msg)+1) - src.updateUsrDialog() + msg = strip_html(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", "")) + while(findtext(msg," ") == 1) + msg = copytext(msg,2,lentext(msg)+1) + updateUsrDialog() else if(href_list["submit_wanted"]) var/input_param = text2num(href_list["submit_wanted"]) - if(src.msg == "" || src.channel_name == "" || src.scanned_user == "Unknown") - src.screen = 16 + if(msg == "" || channel_name == "" || scanned_user == "Unknown") + screen = 16 else var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below var/datum/feed_message/WANTED = new /datum/feed_message - WANTED.author = src.channel_name - WANTED.body = src.msg - WANTED.backup_author = src.scanned_user //I know, a bit wacky + WANTED.author = channel_name + WANTED.body = msg + WANTED.backup_author = scanned_user //I know, a bit wacky if(photo) WANTED.img = photo.img news_network.wanted_issue = WANTED for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) NEWSCASTER.newsAlert() NEWSCASTER.update_icon() - src.screen = 15 + screen = 15 else if(news_network.wanted_issue.is_admin_message) alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok") return - news_network.wanted_issue.author = src.channel_name - news_network.wanted_issue.body = src.msg - news_network.wanted_issue.backup_author = src.scanned_user + news_network.wanted_issue.author = channel_name + news_network.wanted_issue.body = msg + news_network.wanted_issue.backup_author = scanned_user if(photo) news_network.wanted_issue.img = photo.img - src.screen = 19 + screen = 19 - src.updateUsrDialog() + updateUsrDialog() else if(href_list["cancel_wanted"]) if(news_network.wanted_issue.is_admin_message) @@ -641,12 +639,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co news_network.wanted_issue = null for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) NEWSCASTER.update_icon() - src.screen=17 - src.updateUsrDialog() + screen=17 + updateUsrDialog() else if(href_list["view_wanted"]) - src.screen=18 - src.updateUsrDialog() + screen=18 + updateUsrDialog() else if(href_list["censor_channel_author"]) var/datum/feed_channel/FC = locate(href_list["censor_channel_author"]) if(FC.is_admin_channel) @@ -657,7 +655,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co FC.author = "\[REDACTED\]" else FC.author = FC.backup_author - src.updateUsrDialog() + updateUsrDialog() else if(href_list["censor_channel_story_author"]) var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"]) @@ -669,7 +667,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co MSG.author = "\[REDACTED\]" else MSG.author = MSG.backup_author - src.updateUsrDialog() + updateUsrDialog() else if(href_list["censor_channel_story_body"]) var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"]) @@ -686,13 +684,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co MSG.body = "\[REDACTED\]" else MSG.body = MSG.backup_body - src.updateUsrDialog() + updateUsrDialog() else if(href_list["pick_d_notice"]) var/datum/feed_channel/FC = locate(href_list["pick_d_notice"]) - src.viewing_channel = FC - src.screen=13 - src.updateUsrDialog() + viewing_channel = FC + screen=13 + updateUsrDialog() else if(href_list["toggle_d_notice"]) var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"]) @@ -700,75 +698,75 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co alert("This channel was created by a Nanotrasen Officer. You cannot place a D-Notice upon it.","Ok") return FC.censored = !FC.censored - src.updateUsrDialog() + updateUsrDialog() else if(href_list["view"]) - src.screen=1 - src.updateUsrDialog() + screen=1 + updateUsrDialog() else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~ - src.screen = text2num(href_list["setScreen"]) - if(src.screen == 0) - src.scanned_user = "Unknown"; + screen = text2num(href_list["setScreen"]) + if(screen == 0) + scanned_user = "Unknown"; msg = ""; - src.c_locked=0; + c_locked=0; channel_name=""; - src.viewing_channel = null - src.updateUsrDialog() + viewing_channel = null + updateUsrDialog() else if(href_list["show_channel"]) var/datum/feed_channel/FC = locate(href_list["show_channel"]) - src.viewing_channel = FC - src.screen = 9 - src.updateUsrDialog() + viewing_channel = FC + screen = 9 + updateUsrDialog() else if(href_list["pick_censor_channel"]) var/datum/feed_channel/FC = locate(href_list["pick_censor_channel"]) - src.viewing_channel = FC - src.screen = 12 - src.updateUsrDialog() + viewing_channel = FC + screen = 12 + updateUsrDialog() else if(href_list["refresh"]) - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/newscaster/attackby(obj/item/I as obj, mob/living/user as mob, params) if(istype(I, /obj/item/weapon/wrench)) to_chat(user, "Now [anchored ? "un" : ""]securing [name]") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 60, target = src)) new /obj/item/mounted/frame/newscaster_frame(loc) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(src) return if(isbroken) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - visible_message("[user.name] further abuses the shattered [src.name].", null, 5 ) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) + visible_message("[user.name] further abuses the shattered [name].", null, 5 ) else if(istype(I, /obj/item/weapon) ) var/obj/item/weapon/W = I if(W.damtype == STAMINA) return if(W.force <15) - visible_message("[user.name] hits the [src.name] with the [W.name] with no visible effect.", null , 5 ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + visible_message("[user.name] hits the [name] with the [W.name] with no visible effect.", null , 5 ) + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) else hitstaken++ if(hitstaken==3) - visible_message("[user.name] smashes the [src.name]!", null, 5 ) + visible_message("[user.name] smashes the [name]!", null, 5 ) isbroken=1 - playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) else - visible_message("[user.name] forcefully slams the [src.name] with the [I.name]!", null, 5 ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + visible_message("[user.name] forcefully slams the [name] with the [I.name]!", null, 5 ) + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) else to_chat(user, "This does nothing.") - src.update_icon() + update_icon() /obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob) if(photo) if(!issilicon(user)) - photo.loc = src.loc + photo.loc = loc user.put_in_inactive_hand(photo) photo = null if(istype(user.get_active_hand(), /obj/item/weapon/photo)) @@ -813,34 +811,34 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(ishuman(user)) var/mob/living/carbon/human/human_user = user var/dat - src.pages = 0 + pages = 0 switch(screen) if(0) //Cover dat+="
The Griffon
" dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen Space Facilities

" - if(isemptylist(src.news_content)) - if(src.important_message) - dat+="Contents:
    **Important Security Announcement** \[page [src.pages+2]\]
" + if(isemptylist(news_content)) + if(important_message) + dat+="Contents:
    **Important Security Announcement** \[page [pages+2]\]
" else dat+="Other than the title, the rest of the newspaper is unprinted..." else dat+="Contents:
    " - for(var/datum/feed_channel/NP in src.news_content) - src.pages++ - if(src.important_message) - dat+="**Important Security Announcement** \[page [src.pages+2]\]
    " + for(var/datum/feed_channel/NP in news_content) + pages++ + if(important_message) + dat+="**Important Security Announcement** \[page [pages+2]\]
    " var/temp_page=0 - for(var/datum/feed_channel/NP in src.news_content) + for(var/datum/feed_channel/NP in news_content) temp_page++ dat+="[NP.channel_name] \[page [temp_page+1]\]
    " dat+="
" if(scribble_page==curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\"" + dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "
Next Page
Done reading
" if(1) // X channel pages inbetween. - for(var/datum/feed_channel/NP in src.news_content) - src.pages++ //Let's get it right again. - var/datum/feed_channel/C = src.news_content[src.curr_page] + for(var/datum/feed_channel/NP in news_content) + pages++ //Let's get it right again. + var/datum/feed_channel/C = news_content[curr_page] dat+="[C.channel_name] \[created by: [C.author]\]

" if(C.censored) dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing." @@ -859,12 +857,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="\[Story by [MESSAGE.author]\]

" dat+="" if(scribble_page==curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\"" + dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "

Previous Page
Next Page
" if(2) //Last page - for(var/datum/feed_channel/NP in src.news_content) - src.pages++ - if(src.important_message!=null) + for(var/datum/feed_channel/NP in news_content) + pages++ + if(important_message!=null) dat+="
Wanted Issue:


" dat+="Criminal name: [important_message.author]
" dat+="Description: [important_message.body]
" @@ -877,91 +875,96 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else dat+="Apart from some uninteresting Classified ads, there's nothing on this page..." if(scribble_page==curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\"" + dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "
Previous Page
" else dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - dat+="

[src.curr_page+1]
" + dat+="

[curr_page+1]
" human_user << browse(dat, "window=newspaper_main;size=300x400") onclose(human_user, "newspaper_main") else to_chat(user, "The paper is full of intelligible symbols!") -obj/item/weapon/newspaper/Topic(href, href_list) +/obj/item/weapon/newspaper/Topic(href, href_list) var/mob/living/U = usr ..() if((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) )) U.set_machine(src) if(href_list["next_page"]) - if(curr_page==src.pages+1) + if(curr_page==pages+1) return //Don't need that at all, but anyway. - if(src.curr_page == src.pages) //We're at the middle, get to the end - src.screen = 2 + if(curr_page == pages) //We're at the middle, get to the end + screen = 2 else if(curr_page == 0) //We're at the start, get to the middle - src.screen=1 - src.curr_page++ - playsound(src.loc, "pageturn", 50, 1) + screen=1 + curr_page++ + playsound(loc, "pageturn", 50, 1) else if(href_list["prev_page"]) if(curr_page == 0) return if(curr_page == 1) - src.screen = 0 + screen = 0 else - if(curr_page == src.pages+1) //we're at the end, let's go back to the middle. - src.screen = 1 - src.curr_page-- - playsound(src.loc, "pageturn", 50, 1) + if(curr_page == pages+1) //we're at the end, let's go back to the middle. + screen = 1 + curr_page-- + playsound(loc, "pageturn", 50, 1) - if(istype(src.loc, /mob)) - src.attack_self(src.loc) + if(istype(loc, /mob)) + attack_self(loc) -obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/pen)) - if(src.scribble_page == src.curr_page) + if(scribble_page == curr_page) to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?") else var/s = strip_html( input(user, "Write something", "Newspaper", "") ) s = sanitize(copytext(s, 1, MAX_MESSAGE_LEN)) if(!s) return - if(!in_range(src, usr) && src.loc != usr) + if(!in_range(src, usr) && loc != usr) return - src.scribble_page = src.curr_page - src.scribble = s - src.attack_self(user) + scribble_page = curr_page + scribble = s + attack_self(user) return ////////////////////////////////////helper procs - -/obj/machinery/newscaster/proc/scan_user(mob/living/user as mob) - if(istype(user,/mob/living/carbon/human)) //User is a human +/obj/machinery/newscaster/proc/scan_user(mob/user as mob) + if(ishuman(user)) //User is a human var/mob/living/carbon/human/human_user = user if(human_user.wear_id) //Newscaster scans you if(istype(human_user.wear_id, /obj/item/device/pda) ) //autorecognition, woo! var/obj/item/device/pda/P = human_user.wear_id if(P.id) - src.scanned_user = "[P.id.registered_name] ([P.id.assignment])" + scanned_user = "[P.id.registered_name] ([P.id.assignment])" else - src.scanned_user = "Unknown" + scanned_user = "Unknown" else if(istype(human_user.wear_id, /obj/item/weapon/card/id) ) var/obj/item/weapon/card/id/ID = human_user.wear_id - src.scanned_user ="[ID.registered_name] ([ID.assignment])" + scanned_user ="[ID.registered_name] ([ID.assignment])" else - src.scanned_user ="Unknown" + scanned_user = "Unknown" else - src.scanned_user ="Unknown" - else + scanned_user = "Unknown" + else if(issilicon(user)) var/mob/living/silicon/ai_user = user - src.scanned_user = "[ai_user.name] ([ai_user.job])" - + scanned_user = "[ai_user.name] ([ai_user.job])" + else + scanned_user = "Unknown" + +/obj/machinery/newscaster/proc/can_scan(mob/user as mob) + if(ishuman(user) || issilicon(user)) + . = TRUE + . = FALSE /obj/machinery/newscaster/proc/print_paper() feedback_inc("newscaster_newspapers_printed",1) @@ -971,7 +974,7 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa if(news_network.wanted_issue) NEWSPAPER.important_message = news_network.wanted_issue NEWSPAPER.loc = get_turf(src) - src.paper_remaining-- + paper_remaining-- return //Removed for now so these aren't even checked every tick. Left this here in-case Agouri needs it later. @@ -982,14 +985,14 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa if(news_call) atom_say("[news_call]!") - src.alert = 1 - src.update_icon() + alert = 1 + update_icon() spawn(300) - src.alert = 0 - src.update_icon() + alert = 0 + update_icon() if(!silence) - playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) + playsound(loc, 'sound/machines/twobeep.ogg', 75, 1) else atom_say("Attention! Wanted issue distributed!") - playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1) + playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, 1) return diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 0992f8bb509..cbd0c4018fd 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -389,10 +389,13 @@ T.time = worldtime2text() vendor_account.transaction_log.Add(T) -/obj/machinery/vending/attack_ai(mob/user as mob) +/obj/machinery/vending/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/vending/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/vending/attack_hand(mob/user as mob) +/obj/machinery/vending/attack_hand(mob/user) if(stat & (BROKEN|NOPOWER)) return @@ -465,7 +468,7 @@ usr.put_in_hands(coin) coin = null - to_chat(usr, "\blue You remove the [coin] from the [src]") + to_chat(usr, "You remove [coin] from [src].") categories &= ~CAT_COIN if(href_list["pay"]) @@ -479,76 +482,77 @@ else if(istype(usr.get_active_hand(), /obj/item/weapon/card)) paid = pay_with_card(usr.get_active_hand()) handled = 1 + else if(usr.can_admin_interact()) + paid = 1 + handled = 1 if(paid) - src.vend(currently_vending, usr) + vend(currently_vending, usr) return else if(handled) nanomanager.update_uis(src) return // don't smack that machine with your 2 credits - if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - if((href_list["vend"]) && (src.vend_ready) && (!currently_vending)) + if((href_list["vend"]) && vend_ready && !currently_vending) - if(issilicon(usr) && !isrobot(usr)) - to_chat(usr, "The vending machine refuses to interface with you, as you are not in its target demographic!") - return + if(issilicon(usr) && !isrobot(usr)) + to_chat(usr, "The vending machine refuses to interface with you, as you are not in its target demographic!") + return - if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH - to_chat(usr, "Access denied.")//Unless emagged of course + if((!allowed(usr) && !usr.can_admin_interact()) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + to_chat(usr, "Access denied.") //Unless emagged of course + flick(icon_deny,src) + return - flick(icon_deny,src) - return + var/key = text2num(href_list["vend"]) + var/datum/data/vending_product/R = product_records[key] - var/key = text2num(href_list["vend"]) - var/datum/data/vending_product/R = product_records[key] + // This should not happen unless the request from NanoUI was bad + if(!(R.category & categories)) + return - // This should not happen unless the request from NanoUI was bad - if(!(R.category & src.categories)) - return - - if(R.price <= 0) - src.vend(R, usr) + if(R.price <= 0) + vend(R, usr) + else + currently_vending = R + if(!vendor_account || vendor_account.suspended) + status_message = "This machine is currently unable to process payments due to problems with the associated account." + status_error = 1 else - src.currently_vending = R - if(!vendor_account || vendor_account.suspended) - src.status_message = "This machine is currently unable to process payments due to problems with the associated account." - src.status_error = 1 - else - src.status_message = "Please swipe a card or insert cash to pay for the item." - src.status_error = 0 + status_message = "Please swipe a card or insert cash to pay for the item." + status_error = 0 - else if(href_list["cancelpurchase"]) - src.currently_vending = null + else if(href_list["cancelpurchase"]) + currently_vending = null - else if((href_list["togglevoice"]) && (src.panel_open)) - src.shut_up = !src.shut_up + else if(href_list["togglevoice"] && panel_open) + shut_up = !src.shut_up - src.add_fingerprint(usr) - nanomanager.update_uis(src) + add_fingerprint(usr) + nanomanager.update_uis(src) /obj/machinery/vending/proc/vend(datum/data/vending_product/R, mob/user) - if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + if((!allowed(usr) || !usr.can_admin_interact()) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH to_chat(usr, "Access denied.")//Unless emagged of course + flick(icon_deny,src) + return - flick(src.icon_deny,src) - return if(!R.amount) - to_chat(user, "\red The vending machine has ran out of that product.") + to_chat(user, "The vending machine has ran out of that product.") return - src.vend_ready = 0 //One thing at a time!! - src.status_message = "Vending..." - src.status_error = 0 + vend_ready = 0 //One thing at a time!! + status_message = "Vending..." + status_error = 0 nanomanager.update_uis(src) if(R.category & CAT_COIN) if(!coin) - to_chat(user, "\blue You need to insert a coin to get this item.") + to_chat(user, "You need to insert a coin to get this item.") return if(coin.string_attached) if(prob(50)) - to_chat(user, "\blue You successfully pull the coin out before the [src] could swallow it.") + to_chat(user, "You successfully pull the coin out before the [src] could swallow it.") else - to_chat(user, "\blue You weren't able to pull the coin out fast enough, the machine ate it, string and all.") + to_chat(user, "You weren't able to pull the coin out fast enough, the machine ate it, string and all.") coin = null qdel(coin) categories &= ~CAT_COIN @@ -559,47 +563,47 @@ R.amount-- - if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply) + if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply) spawn(0) - src.speak(src.vend_reply) - src.last_reply = world.time + speak(src.vend_reply) + last_reply = world.time use_power(vend_power_usage) //actuators and stuff - if(src.icon_vend) //Show the vending animation if needed - flick(src.icon_vend,src) + if(icon_vend) //Show the vending animation if needed + flick(icon_vend,src) spawn(src.vend_delay) new R.product_path(get_turf(src)) - src.status_message = "" - src.status_error = 0 - src.vend_ready = 1 + status_message = "" + status_error = 0 + vend_ready = 1 currently_vending = null nanomanager.update_uis(src) /obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user) - if(src.panel_open) + if(panel_open) to_chat(user, "\blue You stock the [src] with \a [R.product_name]") R.amount++ - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/vending/process() if(stat & (BROKEN|NOPOWER)) return - if(!src.active) + if(!active) return if(src.seconds_electrified > 0) src.seconds_electrified-- //Pitch to the people! Really sell it! - if(((src.last_slogan + src.slogan_delay) <= world.time) && (src.slogan_list.len > 0) && (!src.shut_up) && prob(5)) + if(((last_slogan + src.slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5)) var/slogan = pick(src.slogan_list) - src.speak(slogan) - src.last_slogan = world.time + speak(slogan) + last_slogan = world.time - if(src.shoot_inventory && prob(shoot_chance)) - src.throw_item() + if(shoot_inventory && prob(shoot_chance)) + throw_item() return @@ -620,12 +624,12 @@ stat &= ~NOPOWER else spawn(rand(0, 15)) - src.icon_state = "[initial(icon_state)]-off" + icon_state = "[initial(icon_state)]-off" stat |= NOPOWER //Oh no we're malfunctioning! Dump out some product and break. /obj/machinery/vending/proc/malfunction() - for(var/datum/data/vending_product/R in src.product_records) + for(var/datum/data/vending_product/R in product_records) if(R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path @@ -633,12 +637,12 @@ continue while(R.amount>0) - new dump_path(src.loc) + new dump_path(loc) R.amount-- break stat |= BROKEN - src.icon_state = "[initial(icon_state)]-broken" + icon_state = "[initial(icon_state)]-broken" return //Somebody cut an important wire and now we're following a new definition of "pitch." @@ -648,7 +652,7 @@ if(!target) return 0 - for(var/datum/data/vending_product/R in src.product_records) + for(var/datum/data/vending_product/R in product_records) if(R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path @@ -656,13 +660,13 @@ continue R.amount-- - throw_item = new dump_path(src.loc) + throw_item = new dump_path(loc) break if(!throw_item) return 0 spawn(0) throw_item.throw_at(target, 16, 3, src) - src.visible_message("[src] launches [throw_item.name] at [target.name]!") + visible_message("[src] launches [throw_item.name] at [target.name]!") return 1 /* diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 69a4520ea5d..9d9dffba39e 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -469,16 +469,32 @@ connected.connected = null connected = null return ..() + +// Crematorium switch +/obj/machinery/crema_switch + desc = "Burn baby burn!" + name = "crematorium igniter" + icon = 'icons/obj/power.dmi' + icon_state = "crema_switch" + anchored = 1.0 + req_access = list(access_crematorium) + var/on = 0 + var/area/area = null + var/otherarea = null + var/id = 1 + +/obj/machinery/crema_switch/attack_ghost(mob/user) + if(user.can_admin_interact()) + return attack_hand(user) -/obj/machinery/crema_switch/attack_hand(mob/user as mob) - if(allowed(usr)) +/obj/machinery/crema_switch/attack_hand(mob/user) + if(allowed(usr) || user.can_admin_interact()) for(var/obj/structure/crematorium/C in world) if(C.id == id) if(!C.cremating) C.cremate(user) else - to_chat(usr, "\red Access denied.") - return + to_chat(usr, "Access denied.") /mob/proc/update_morgue() if(stat == DEAD) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6b2224962f5..878e17407c7 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -76,7 +76,8 @@ var/list/admin_verbs_admin = list( /client/proc/show_snpc_verbs, /client/proc/reset_all_tcs, /*resets all telecomms scripts*/ /client/proc/cmd_admin_check_player_exp, /* shows players by playtime */ - /client/proc/toggle_mentor_chat + /client/proc/toggle_mentor_chat, + /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -965,20 +966,33 @@ var/list/admin_verbs_snpc = list( set name = "Show SNPC Verbs" set category = "Admin" - if(!holder) + if(!check_rights(R_ADMIN)) return verbs += admin_verbs_snpc verbs -= /client/proc/show_snpc_verbs - to_chat(src, "SNPC verbs on.") + to_chat(src, "SNPC verbs have been toggled on.") /client/proc/hide_snpc_verbs() set name = "Hide SNPC Verbs" set category = "Admin" - if(!holder) + if(!check_rights(R_ADMIN)) return verbs -= admin_verbs_snpc verbs += /client/proc/show_snpc_verbs - to_chat(src, "SNPC verbs off.") + to_chat(src, "SNPC verbs have been toggled off.") + +/client/proc/toggle_AI_interact() + set name = "Toggle Admin Observer Interaction" + set category = "Admin" + set desc = "Allows you to interact with most machines, computers and other objects while observing." + + if(!check_rights(R_ADMIN)) + return + + observer_interact = !observer_interact + + log_admin("[key_name(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.") + message_admins("[key_name_admin(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index bb243c3e6aa..6ca9a5425ec 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -92,4 +92,7 @@ var/datum/chatOutput/chatOutput // Donator stuff. - var/donator_level = DONATOR_LEVEL_NONE \ No newline at end of file + var/donator_level = DONATOR_LEVEL_NONE + + // If set to true, this client can interact with most machines/computers/objects while observing + var/observer_interact = FALSE \ No newline at end of file diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 6635329c4cb..732e618866e 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -207,6 +207,9 @@ /obj/machinery/biogenerator/attack_hand(mob/user) interact(user) + +/obj/machinery/biogenerator/attack_ghost(mob/user) + interact(user) /obj/machinery/biogenerator/proc/activate() if(usr.stat != 0) @@ -302,7 +305,7 @@ /obj/machinery/biogenerator/Topic(href, href_list) if(..() || panel_open) - return + return 1 usr.set_machine(src) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index dcfd2601813..70eec9ae078 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -90,6 +90,9 @@ if(..()) return interact(user) + +/obj/machinery/plantgenes/attack_ghost(mob/user) + interact(user) /obj/machinery/plantgenes/interact(mob/user) user.set_machine(src) @@ -97,9 +100,6 @@ return var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) - if(!(in_range(src, user) || issilicon(user))) - popup.close() - return var/dat = "" @@ -216,7 +216,7 @@ /obj/machinery/plantgenes/Topic(var/href, var/list/href_list) if(..()) - return + return 1 usr.set_machine(src) if(href_list["eject_seed"] && !operation) diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 10860f45887..631e2ff7321 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -124,12 +124,16 @@ src.amount = am /obj/machinery/seed_extractor/attack_hand(mob/user) - user.set_machine(src) + interact(user) + +/obj/machinery/seed_extractor/attack_ghost(mob/user) interact(user) /obj/machinery/seed_extractor/interact(mob/user) - if (stat) + if(stat) return 0 + + user.set_machine(src) var/dat = "Stored seeds:
" @@ -149,7 +153,7 @@ /obj/machinery/seed_extractor/Topic(var/href, var/list/href_list) if(..()) - return + return 1 usr.set_machine(src) href_list["li"] = text2num(href_list["li"]) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index db6ef63ad22..0afdb576e99 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -648,7 +648,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 0 /mob/dead/observer/can_admin_interact() - return check_rights(R_ADMIN, 0, src) + return client && client.observer_interact //this is a mob verb instead of atom for performance reasons //see /mob/verb/examinate() in mob.dm for more info diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 3ac858a8a6c..0897258fb1c 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -263,6 +263,9 @@ interact(H) else return ..() + +/mob/living/simple_animal/bot/attack_ghost(mob/M) + interact(M) /mob/living/simple_animal/bot/attack_ai(mob/user) if(!topic_denied(user)) @@ -867,6 +870,8 @@ Pass a positive integer as an argument to override a bot's default speed. qdel(src) /mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. + if(user.can_admin_interact()) + return 0 if(user.incapacitated() || !(issilicon(user) || in_range(src, user))) return 1 // 0 for access, 1 for denied. diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 80f45fa0eaf..a3a40d7d3f6 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -37,9 +37,12 @@ var/list/alldepartments = list() fax_network = "Central Command Quantum Entanglement Network" long_range_enabled = 1 -/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob) +/obj/machinery/photocopier/faxmachine/attack_hand(mob/user) ui_interact(user) +/obj/machinery/photocopier/faxmachine/attack_ghost(mob/user) + ui_interact(user) + /obj/machinery/photocopier/faxmachine/attackby(obj/item/weapon/item, mob/user, params) if(istype(item,/obj/item/weapon/card/id) && !scan) scan(item) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index d333ed1cf47..2a1b94d0f44 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -19,10 +19,13 @@ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! var/mob/living/ass = null -/obj/machinery/photocopier/attack_ai(mob/user as mob) +/obj/machinery/photocopier/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/photocopier/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/photocopier/attack_hand(mob/user as mob) +/obj/machinery/photocopier/attack_hand(mob/user) user.set_machine(src) var/dat = "Photocopier

" @@ -47,6 +50,9 @@ return /obj/machinery/photocopier/Topic(href, href_list) + if(..()) + return 1 + if(href_list["copy"]) if(stat & (BROKEN|NOPOWER)) return From 32a96111c35d28325475827f49f9537fc8c3382b Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 00:22:21 +0100 Subject: [PATCH 004/308] Bot interaction update --- code/modules/mob/living/simple_animal/bot/bot.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 0897258fb1c..14281d3728d 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -850,7 +850,7 @@ Pass a positive integer as an argument to override a bot's default speed. show_laws() bot_reset() if("ejectpai") - if(paicard && (!locked || issilicon(usr) || check_rights(R_ADMIN, 0, usr))) + if(paicard && (!locked || issilicon(usr) || usr.can_admin_interact())) to_chat(usr, "You eject [paicard] from [bot_name]") ejectpai(usr) update_controls() @@ -878,13 +878,13 @@ Pass a positive integer as an argument to override a bot's default speed. if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. if(!hacked) //Manually emagged by a human - access denied to all. return 1 - else if(!issilicon(user) && !check_rights(R_ADMIN, 0, user)) //Bot is hacked, so only silicons and admins are allowed access. + else if(!issilicon(user)) //Bot is hacked, so only silicons are allowed access. return 1 return 0 /mob/living/simple_animal/bot/proc/hack(mob/user) var/hack - if(issilicon(user) || check_rights(R_ADMIN, 0, user)) //Allows silicons or admins to toggle the emag status of a bot. + if(issilicon(user) || user.can_admin_interact()) //Allows silicons or admins to toggle the emag status of a bot. hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
" hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
" else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. @@ -893,7 +893,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/showpai(mob/user) var/eject = "" - if(!locked || issilicon(usr) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(usr) || user.can_admin_interact()) if(paicard || allow_pai) eject += "Personality card status: " if(paicard) From 476b5510f12c2bcc45bef547c9ba003964958723 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 00:34:10 +0100 Subject: [PATCH 005/308] Light switch admin interaction --- code/game/machinery/lightswitch.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index c73cac81669..837779df22d 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -72,8 +72,11 @@ if(..(user, 1)) to_chat(user, "A light switch. It is [on? "on" : "off"].") +/obj/machinery/light_switch/attack_ghost(mob/user) + if(user.can_admin_observe()) + return attack_hand(user) + /obj/machinery/light_switch/attack_hand(mob/user) - on = !on updateicon() From 77a3c53f235101b785fc57ee181fe4b2e4da28ae Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 00:43:03 +0100 Subject: [PATCH 006/308] Derp, rename proc --- code/game/machinery/lightswitch.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 837779df22d..8876bc83514 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -73,7 +73,7 @@ to_chat(user, "A light switch. It is [on? "on" : "off"].") /obj/machinery/light_switch/attack_ghost(mob/user) - if(user.can_admin_observe()) + if(user.can_admin_interact()) return attack_hand(user) /obj/machinery/light_switch/attack_hand(mob/user) From 3077fb42bf90495655e98338858f49645d86a74c Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 00:56:05 +0100 Subject: [PATCH 007/308] Add logging to opening/closing job slots and hacking bots --- code/game/machinery/computer/card.dm | 2 ++ code/modules/admin/verbs/custom_event.dm | 4 ++-- code/modules/mob/living/simple_animal/bot/bot.dm | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 66e2ec25779..9d7a525b763 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -412,6 +412,7 @@ var/time_last_changed_position = 0 time_last_changed_position = world.time / 10 j.total_positions++ opened_positions[edit_job_target]++ + log_game("[key_name(usr)] has opened a job slot for job \"[j.name]\".") nanomanager.update_uis(src) if("make_job_unavailable") @@ -428,6 +429,7 @@ var/time_last_changed_position = 0 time_last_changed_position = world.time / 10 j.total_positions-- opened_positions[edit_job_target]-- + log_game("[key_name(usr)] has closed a job slot for job \"[j.name]\".") nanomanager.update_uis(src) if(modify) diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index 350ed9a8737..3dc31df8169 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -10,11 +10,11 @@ var/input = input(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", custom_event_msg) as message|null if(!input || input == "") custom_event_msg = null - log_admin("[usr.key] has cleared the custom event text.") + log_admin("[key)_name(usr)] has cleared the custom event text.") message_admins("[key_name_admin(usr)] has cleared the custom event text.") return - log_admin("[usr.key] has changed the custom event text.") + log_admin("[key_name(usr)] has changed the custom event text.") message_admins("[key_name_admin(usr)] has changed the custom event text.") custom_event_msg = input diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 14281d3728d..5bafceffcfc 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -841,6 +841,7 @@ Pass a positive integer as an argument to override a bot's default speed. to_chat(usr, "[text_hack]") show_laws() bot_reset() + add_logs(usr, src, "hacked") else if(!hacked) to_chat(usr, "[text_dehack_fail]") else @@ -849,6 +850,7 @@ Pass a positive integer as an argument to override a bot's default speed. to_chat(usr, "[text_dehack]") show_laws() bot_reset() + add_logs(usr, src, "dehacked") if("ejectpai") if(paicard && (!locked || issilicon(usr) || usr.can_admin_interact())) to_chat(usr, "You eject [paicard] from [bot_name]") From 28244f8f461963a99c893ecb3c373245e218a2f4 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 01:00:23 +0100 Subject: [PATCH 008/308] Fix compile issue --- code/modules/admin/verbs/custom_event.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index 3dc31df8169..68d3301b11e 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -10,7 +10,7 @@ var/input = input(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", custom_event_msg) as message|null if(!input || input == "") custom_event_msg = null - log_admin("[key)_name(usr)] has cleared the custom event text.") + log_admin("[key_name(usr)] has cleared the custom event text.") message_admins("[key_name_admin(usr)] has cleared the custom event text.") return From efa7923718ea9453d7cc2e94385cd0dad25fb04e Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 01:05:48 +0100 Subject: [PATCH 009/308] Actually fix compile issue --- code/game/machinery/computer/card.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 9d7a525b763..1588d990d80 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -412,7 +412,7 @@ var/time_last_changed_position = 0 time_last_changed_position = world.time / 10 j.total_positions++ opened_positions[edit_job_target]++ - log_game("[key_name(usr)] has opened a job slot for job \"[j.name]\".") + log_game("[key_name(usr)] has opened a job slot for job \"[j]\".") nanomanager.update_uis(src) if("make_job_unavailable") @@ -429,7 +429,7 @@ var/time_last_changed_position = 0 time_last_changed_position = world.time / 10 j.total_positions-- opened_positions[edit_job_target]-- - log_game("[key_name(usr)] has closed a job slot for job \"[j.name]\".") + log_game("[key_name(usr)] has closed a job slot for job \"[j]\".") nanomanager.update_uis(src) if(modify) From 77e54da0f6b1c075f7f4328b10c9eb569575a323 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 01:21:02 +0100 Subject: [PATCH 010/308] Enable observing interacting by default --- code/modules/client/client defines.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 6ca9a5425ec..6b8acce8712 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -95,4 +95,4 @@ var/donator_level = DONATOR_LEVEL_NONE // If set to true, this client can interact with most machines/computers/objects while observing - var/observer_interact = FALSE \ No newline at end of file + var/observer_interact = TRUE \ No newline at end of file From 1b4d73d6f7d404fe1d522ef16512f66ca90156f6 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 01:21:42 +0100 Subject: [PATCH 011/308] Adding an admin_check to can_admin_interact() --- code/modules/mob/dead/observer/observer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0afdb576e99..0e4cc50ce08 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -648,7 +648,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 0 /mob/dead/observer/can_admin_interact() - return client && client.observer_interact + return client && client.observer_interact && check_rights(R_ADMIN, 0, src) //this is a mob verb instead of atom for performance reasons //see /mob/verb/examinate() in mob.dm for more info From 44a55cd88e27437f0a09652e533a02da32422710 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 01:22:16 +0100 Subject: [PATCH 012/308] Clarify variable description --- code/modules/client/client defines.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 6b8acce8712..76aca64bfc0 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -94,5 +94,5 @@ // Donator stuff. var/donator_level = DONATOR_LEVEL_NONE - // If set to true, this client can interact with most machines/computers/objects while observing + // If set to true, this client can interact with most machines/computers/objects while observing (requires R_ADMIN as well) var/observer_interact = TRUE \ No newline at end of file From 2afd77a54ab10064414bedb04378ead81de18292 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 19:30:36 +0100 Subject: [PATCH 013/308] Split admin interaction into regular and advanced, make more devices ghost-interactable --- code/game/machinery/ai_slipper.dm | 60 +++++++++++----------- code/game/machinery/buttons.dm | 4 +- code/game/machinery/door_control.dm | 4 +- code/game/machinery/doors/firedoor.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 4 +- code/game/machinery/flasher.dm | 10 ++-- code/game/machinery/lightswitch.dm | 2 +- code/game/objects/structures/morgue.dm | 4 +- code/modules/admin/admin_verbs.dm | 14 ++--- code/modules/client/client defines.dm | 4 +- code/modules/mob/dead/observer/observer.dm | 16 +++++- 11 files changed, 69 insertions(+), 55 deletions(-) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index a88abfc61b9..cd81d6db3cc 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -24,46 +24,49 @@ stat |= NOPOWER /obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) - src.disabled = disabled - src.uses = uses - src.power_change() + disabled = disabled + uses = uses + power_change() /obj/machinery/ai_slipper/attackby(obj/item/weapon/W, mob/user, params) if(stat & (NOPOWER|BROKEN)) return if(istype(user, /mob/living/silicon)) - return src.attack_hand(user) + return attack_hand(user) else // trying to unlock the interface - if(src.allowed(usr)) + if(allowed(usr)) locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the device.") + to_chat(user, "You [locked ? "lock" : "unlock"] the device.") if(locked) - if(user.machine==src) + if(user.machine == src) user.unset_machine() user << browse(null, "window=ai_slipper") else - if(user.machine==src) - src.attack_hand(usr) + if(user.machine == src) + attack_hand(usr) else to_chat(user, "\red Access denied.") return return -/obj/machinery/ai_slipper/attack_ai(mob/user as mob) +/obj/machinery/ai_slipper/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/ai_slipper/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/ai_slipper/attack_hand(mob/user as mob) +/obj/machinery/ai_slipper/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return - if( (get_dist(src, user) > 1 )) - if(!istype(user, /mob/living/silicon)) - to_chat(user, text("Too far away.")) - user.unset_machine() - user << browse(null, "window=ai_slipper") - return + + if(get_dist(src, user) > 1 && (!issilicon(user) || !user.can_admin_interact())) + to_chat(user, "Too far away.") + user.unset_machine() + user << browse(null, "window=ai_slipper") + return user.set_machine(src) - var/loc = src.loc + var/loc = loc if(istype(loc, /turf)) loc = loc:loc if(!istype(loc, /area)) @@ -72,39 +75,37 @@ var/area/area = loc var/t = "AI Liquid Dispenser ([area.name])
" - if(src.locked && (!istype(user, /mob/living/silicon))) + if(locked && (!issilicon(user) || !user.can_admin_interact())) t += "(Swipe ID card to unlock control panel.)
" else - t += text("Dispenser [] - []?
\n", src.disabled?"deactivated":"activated", src.disabled?"Enable":"Disable") + t += text("Dispenser [] - []?
\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable") t += text("Uses Left: [uses]. Activate the dispenser?
\n") user << browse(t, "window=computer;size=575x450") onclose(user, "computer") - return /obj/machinery/ai_slipper/Topic(href, href_list) if(..()) return 1 - if(src.locked) + if(locked) if(!istype(usr, /mob/living/silicon)) to_chat(usr, "Control panel is locked!") return if(href_list["toggleOn"]) - src.disabled = !src.disabled - icon_state = src.disabled? "motion0":"motion3" + disabled = !disabled + icon_state = disabled? "motion0":"motion3" if(href_list["toggleUse"]) if(cooldown_on || disabled) return else - new /obj/effect/effect/foam(src.loc) - src.uses-- + new /obj/effect/effect/foam(loc) + uses-- cooldown_on = 1 cooldown_time = world.timeofday + 100 slip_process() return - src.attack_hand(usr) - return + attack_hand(usr) /obj/machinery/ai_slipper/proc/slip_process() while(cooldown_time - world.timeofday > 0) @@ -120,5 +121,4 @@ return if(uses >= 0) cooldown_on = 0 - src.power_change() - return \ No newline at end of file + power_change() \ No newline at end of file diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index e28bf145b74..b2d934dc9a2 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -56,7 +56,7 @@ return attack_hand(user) /obj/machinery/driver_button/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob, params) @@ -169,7 +169,7 @@ return attack_hand(user) /obj/machinery/ignition_switch/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user, params) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index e9e4a40e465..a3eeccb94a8 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -64,7 +64,7 @@ playsound(loc, "sparks", 100, 1) /obj/machinery/door_control/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/door_control/attack_hand(mob/user as mob) @@ -72,7 +72,7 @@ if(stat & (NOPOWER|BROKEN)) return - if(!allowed(user) && (wires & 1) && !user.can_admin_interact()) + if(!allowed(user) && (wires & 1) && !user.can_advanced_admin_interact()) to_chat(user, "Access Denied.") flick("doorctrl-denied",src) return diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index f95612e6b89..79a9d02e9ea 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -189,7 +189,7 @@ var/alarmed = A.air_doors_activated || A.fire var/access_granted = 0 - if(isAI(user) || isrobot(user) || user.can_admin_interact()) + if(isAI(user) || isrobot(user) || user.can_advanced_admin_interact()) access_granted = 1 if(access_granted == 1) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 7b6752f892b..d802192a107 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -194,7 +194,7 @@ return attack_hand(user) /obj/machinery/door/window/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0) @@ -347,7 +347,7 @@ //don't care who they are or what they have, act as if they're NOTHING user = null - if(allowed(user) || user.can_admin_interact()) + if(allowed(user) || user.can_advanced_admin_interact()) if(density) open() else diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index bbc22aa8b2a..2cf45577183 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -48,11 +48,13 @@ user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!") //Let the AI trigger them directly. -/obj/machinery/flasher/attack_ai() +/obj/machinery/flasher/attack_ai(mob/user) if(anchored) return flash() - else - return + +/obj/machinery/flasher/attack_ghost(mob/user) + if(anchored && user.can_advanced_admin_interact()) + return flash() /obj/machinery/flasher/proc/flash() if(!(powered())) @@ -123,7 +125,7 @@ return attack_hand(user) /obj/machinery/flasher_button/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/flasher_button/attackby(obj/item/weapon/W, mob/user as mob, params) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 8876bc83514..330fc5e1104 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -73,7 +73,7 @@ to_chat(user, "A light switch. It is [on? "on" : "off"].") /obj/machinery/light_switch/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/light_switch/attack_hand(mob/user) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 9d9dffba39e..be81c338c08 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -484,11 +484,11 @@ var/id = 1 /obj/machinery/crema_switch/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/crema_switch/attack_hand(mob/user) - if(allowed(usr) || user.can_admin_interact()) + if(allowed(usr) || user.can_advanced_admin_interact()) for(var/obj/structure/crematorium/C in world) if(C.id == id) if(!C.cremating) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 878e17407c7..ab2b6beb9e7 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -77,7 +77,7 @@ var/list/admin_verbs_admin = list( /client/proc/reset_all_tcs, /*resets all telecomms scripts*/ /client/proc/cmd_admin_check_player_exp, /* shows players by playtime */ /client/proc/toggle_mentor_chat, - /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ + /client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -984,15 +984,15 @@ var/list/admin_verbs_snpc = list( verbs += /client/proc/show_snpc_verbs to_chat(src, "SNPC verbs have been toggled off.") -/client/proc/toggle_AI_interact() - set name = "Toggle Admin Observer Interaction" +/client/proc/toggle_advanced_interaction() + set name = "Toggle Advanced Admin Interaction" set category = "Admin" - set desc = "Allows you to interact with most machines, computers and other objects while observing." + set desc = "Allows you to interact with atoms such as buttons and doors, on top of regular machinery interaction." if(!check_rights(R_ADMIN)) return - observer_interact = !observer_interact + advanced_admin_interaction = !advanced_admin_interaction - log_admin("[key_name(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.") - message_admins("[key_name_admin(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.") + log_admin("[key_name(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.") + message_admins("[key_name_admin(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 76aca64bfc0..bc4a9d83641 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -94,5 +94,5 @@ // Donator stuff. var/donator_level = DONATOR_LEVEL_NONE - // If set to true, this client can interact with most machines/computers/objects while observing (requires R_ADMIN as well) - var/observer_interact = TRUE \ No newline at end of file + // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction + var/advanced_admin_interaction = FALSE \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0e4cc50ce08..56c5e33ee1c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -645,10 +645,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp client.images -= ghostimage //remove ourself /mob/proc/can_admin_interact() - return 0 + return FALSE + +/mob/proc/can_advanced_admin_interact() + return FALSE /mob/dead/observer/can_admin_interact() - return client && client.observer_interact && check_rights(R_ADMIN, 0, src) + return check_rights(R_ADMIN, 0, src) + +/mob/dead/observer/can_advanced_admin_interact() + if(!can_admin_interact()) + return FALSE + + if(client && client.advanced_admin_interaction) + return TRUE + + return FALSE //this is a mob verb instead of atom for performance reasons //see /mob/verb/examinate() in mob.dm for more info From 93391c8dc96965cbc0c36f67dab4dc8f6612a0a2 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 19:37:56 +0100 Subject: [PATCH 014/308] Fix shitcode --- code/game/machinery/ai_slipper.dm | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index cd81d6db3cc..2b5eef23a12 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -66,14 +66,8 @@ return user.set_machine(src) - var/loc = loc - if(istype(loc, /turf)) - loc = loc:loc - if(!istype(loc, /area)) - to_chat(user, text("Turret badly positioned - loc.loc is [].", loc)) - return - var/area/area = loc - var/t = "AI Liquid Dispenser ([area.name])
" + var/area/myarea = get_area(src) + var/t = "AI Liquid Dispenser ([myarea.name])
" if(locked && (!issilicon(user) || !user.can_admin_interact())) t += "(Swipe ID card to unlock control panel.)
" From b751704ef4438fea1d012a853363f528852ba550 Mon Sep 17 00:00:00 2001 From: Markolie Date: Thu, 9 Feb 2017 19:54:52 +0100 Subject: [PATCH 015/308] Admin interaction fixes --- code/game/machinery/doors/door.dm | 6 +++--- code/game/machinery/doors/windowdoor.dm | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 27877c22c72..0d1488acad6 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -115,7 +115,7 @@ return attack_hand(user) /obj/machinery/door/attack_ghost(mob/user) - if(user.can_admin_interact()) + if(user.can_advanced_admin_interact()) return attack_hand(user) /obj/machinery/door/attack_hand(mob/user) @@ -135,11 +135,11 @@ add_fingerprint(user) - if(density && istype(I, /obj/item/weapon/melee/energy/blade)) + if(density && (istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade))) emag_act(user) return 1 - if(allowed(user) || emergency == 1 || user.can_admin_interact()) + if(allowed(user) || emergency == 1 || user.can_advanced_admin_interact()) if(density) open() else diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index d802192a107..74a65f1a93d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -256,7 +256,7 @@ add_fingerprint(user) //Ninja swords? You may pass. - if(density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) + if(density && (istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade))) emag_act(user,I) return 1 From 1e97a262b84abbdb3daa7935389c9f8cfca0258c Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 10 Feb 2017 01:20:01 +0100 Subject: [PATCH 016/308] Admin interaction fixes --- code/game/machinery/ai_slipper.dm | 13 ++++++------ code/game/machinery/doors/firedoor.dm | 3 ++- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/bot/floorbot.dm | 2 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/bot/secbot.dm | 2 +- code/modules/paperwork/faxmachine.dm | 21 +++++++++++++------ 10 files changed, 31 insertions(+), 20 deletions(-) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 2b5eef23a12..6ad0d3f3ecf 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -59,7 +59,7 @@ if(stat & (NOPOWER|BROKEN)) return - if(get_dist(src, user) > 1 && (!issilicon(user) || !user.can_admin_interact())) + if(get_dist(src, user) > 1 && (!issilicon(user) && !user.can_admin_interact())) to_chat(user, "Too far away.") user.unset_machine() user << browse(null, "window=ai_slipper") @@ -69,7 +69,7 @@ var/area/myarea = get_area(src) var/t = "AI Liquid Dispenser ([myarea.name])
" - if(locked && (!issilicon(user) || !user.can_admin_interact())) + if(locked && (!issilicon(user) && !user.can_admin_interact())) t += "(Swipe ID card to unlock control panel.)
" else t += text("Dispenser [] - []?
\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable") @@ -81,10 +81,11 @@ /obj/machinery/ai_slipper/Topic(href, href_list) if(..()) return 1 - if(locked) - if(!istype(usr, /mob/living/silicon)) - to_chat(usr, "Control panel is locked!") - return + + if(locked && (!issilicon(usr) && !usr.can_admin_interact())) + to_chat(usr, "Control panel is locked!") + return 1 + if(href_list["toggleOn"]) disabled = !disabled icon_state = disabled? "motion0":"motion3" diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 79a9d02e9ea..f738cdb4d7f 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -174,7 +174,8 @@ nextstate = CLOSED /obj/machinery/door/firedoor/attack_ghost(mob/user as mob) - return attack_ai(user) + if(user.can_advanced_admin_interact()) + return attack_ai(user) /obj/machinery/door/firedoor/attack_ai(mob/user) if(operating || stat & NOPOWER) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 5bafceffcfc..50a7afc64b5 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -821,7 +821,7 @@ Pass a positive integer as an argument to override a bot's default speed. return 1 add_fingerprint(usr) - if((href_list["power"]) && (bot_core.allowed(usr) || !locked)) + if((href_list["power"]) && (bot_core.allowed(usr) || !locked || usr.can_admin_interact())) if(on) turn_off() else diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 3f60793de02..2aebeb5d04a 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -204,7 +204,7 @@ Status: []
Behaviour controls are [locked ? "locked" : "unlocked"]
Maintenance panel panel is [open ? "opened" : "closed"]"}, text("[on ? "On" : "Off"]")) - if(!locked || issilicon(user) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(user) || user.can_admin_interact()) dat += text({"
Cleans Blood: []
"}, text("[blood ? "Yes" : "No"]")) dat += text({"
Patrol station: []
"}, text("[auto_patrol ? "Yes" : "No"]")) return dat diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 65ee91d6897..8a160d25c4f 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -106,7 +106,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]
"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(user) || user.can_admin_interact()) if(!lasercolor) dat += text({"
Arrest Unidentifiable Persons: []
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 62d5c5f5823..a02447cd4ea 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -69,7 +69,7 @@ dat += "Maintenance panel panel is [open ? "opened" : "closed"]
" dat += "Tiles left: [amount]
" dat += "Behvaiour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(user) || user.can_admin_interact()) dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
" dat += "Replace floor tiles: [replacetiles ? "Yes" : "No"]
" dat += "Finds tiles: [eattiles ? "Yes" : "No"]
" diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 4eafbf50065..50475fe45db 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -149,7 +149,7 @@ else dat += "None Loaded" dat += "
Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(user) || user.can_admin_interact()) dat += "Healing Threshold: " dat += "-- " dat += "- " diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 17adfa19c54..14f7030243e 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -284,7 +284,7 @@ dat += "Destination: [!destination ? "none" : destination]
" dat += "Power level: [cell ? cell.percent() : 0]%" - if(locked && !ai && !check_rights(R_ADMIN, 0, user)) + if(locked && !ai && !user.can_admin_interact()) dat += " 
Controls are locked
Unlock Controls" else dat += " 
Controls are unlocked
Lock Controls

" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 9d9e86125b2..a439d793eb3 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -119,7 +119,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || check_rights(R_ADMIN, 0, user)) + if(!locked || issilicon(user) || user.can_admin_interact()) dat += text({"
Arrest Unidentifiable Persons: []
Arrest for Unauthorized Weapons: []
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index a3a40d7d3f6..fd10ebbbaf0 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -67,13 +67,14 @@ var/list/alldepartments = list() /obj/machinery/photocopier/faxmachine/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) var/data[0] + var/is_authenticated = is_authenticated(user) if(scan) data["scan_name"] = scan.name else data["scan_name"] = "-----" - data["authenticated"] = authenticated - if(!authenticated) + data["authenticated"] = is_authenticated + if(!is_authenticated) data["network"] = "Disconnected" else if(!emagged) data["network"] = fax_network @@ -94,12 +95,20 @@ var/list/alldepartments = list() return data +/obj/machinery/photocopier/faxmachine/proc/is_authenticated(mob/user) + if(authenticated) + return TRUE + else if(user.can_admin_interact()) + return TRUE + return FALSE + /obj/machinery/photocopier/faxmachine/Topic(href, href_list) if(..()) return 1 - + + var/is_authenticated = is_authenticated(usr) if(href_list["send"]) - if(copyitem && authenticated) + if(copyitem && is_authenticated) if((destination in admin_departments) || (destination in hidden_admin_departments)) send_admin_fax(usr, destination) else @@ -131,7 +140,7 @@ var/list/alldepartments = list() scan() if(href_list["dept"]) - if(authenticated) + if(is_authenticated) var/lastdestination = destination var/list/combineddepartments = alldepartments if(long_range_enabled) @@ -148,7 +157,7 @@ var/list/alldepartments = list() if((!authenticated) && scan) if(check_access(scan)) authenticated = 1 - else if(authenticated) + else if(!authenticated) authenticated = 0 if(href_list["rename"]) From 4e0989ee0bd613a010e56f1d61b34172bfce2c45 Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 10 Feb 2017 21:51:08 +0100 Subject: [PATCH 017/308] Ghost interaction with atmos machinery --- .../components/binary_devices/passive_gate.dm | 29 ++++++++------ .../components/binary_devices/pump.dm | 27 +++++++------ .../components/binary_devices/valve.dm | 22 ++++++----- .../components/binary_devices/volume_pump.dm | 27 +++++++------ .../components/omni_devices/omni_base.dm | 11 ++++-- .../components/trinary_devices/filter.dm | 39 ++++++++++--------- .../components/trinary_devices/mixer.dm | 34 ++++++++++------ .../components/trinary_devices/tvalve.dm | 22 ++++++----- 8 files changed, 123 insertions(+), 88 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 4f3c3d65635..c96a1b0b325 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -88,7 +88,7 @@ return 1 -/obj/machinery/atmospherics/binary/passive_gate/interact(mob/user as mob) +/obj/machinery/atmospherics/binary/passive_gate/interact(mob/user) var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: [round(target_pressure,0.1)]kPa | Change @@ -131,32 +131,37 @@ update_icon() return -/obj/machinery/atmospherics/binary/passive_gate/attack_hand(user as mob) +/obj/machinery/atmospherics/binary/passive_gate/attack_hand(mob/user) if(..()) return - src.add_fingerprint(usr) - if(!src.allowed(user)) + add_fingerprint(user) + if(!allowed(user)) to_chat(user, "Access denied.") return - usr.set_machine(src) + user.set_machine(src) + interact(user) + +/obj/machinery/atmospherics/binary/passive_gate/attack_ghost(mob/user) + add_fingerprint(user) + user.set_machine(src) interact(user) - return /obj/machinery/atmospherics/binary/passive_gate/Topic(href,href_list) - if(..()) return + if(..()) + return 1 if(href_list["power"]) on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",target_pressure) as num + target_pressure = max(0, min(4500, new_pressure)) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos") usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() + update_icon() + updateUsrDialog() return -/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) +/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W, var/mob/user, params) if(!istype(W, /obj/item/weapon/wrench)) return ..() if(on) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 3b1ca109a81..40faf440cfd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -103,7 +103,7 @@ Thus, the two variables affect pump operation are set in New(): radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) return 1 -/obj/machinery/atmospherics/binary/pump/interact(mob/user as mob) +/obj/machinery/atmospherics/binary/pump/interact(mob/user) var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: [round(target_pressure,0.1)]kPa | Change @@ -151,16 +151,20 @@ Thus, the two variables affect pump operation are set in New(): update_icon() return -/obj/machinery/atmospherics/binary/pump/attack_hand(user as mob) +/obj/machinery/atmospherics/binary/pump/attack_hand(mob/user) if(..()) return - src.add_fingerprint(usr) - if(!src.allowed(user)) + add_fingerprint(user) + if(!allowed(user)) to_chat(user, "Access denied.") return - usr.set_machine(src) + user.set_machine(src) + interact(user) + +/obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) + add_fingerprint(user) + user.set_machine(src) interact(user) - return /obj/machinery/atmospherics/binary/pump/Topic(href,href_list) if(..()) @@ -169,13 +173,12 @@ Thus, the two variables affect pump operation are set in New(): on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",target_pressure) as num + target_pressure = max(0, min(4500, new_pressure)) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos") usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() - return + update_icon() + updateUsrDialog() /obj/machinery/atmospherics/binary/pump/power_change() var/old_stat = stat @@ -183,7 +186,7 @@ Thus, the two variables affect pump operation are set in New(): if(old_stat != stat) update_icon() -/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) +/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W, var/mob/user, params) if(!istype(W, /obj/item/weapon/wrench)) return ..() if(!(stat & NOPOWER) && on) diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index 1a2a4ea541f..2737b7abfbd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -45,17 +45,21 @@ investigate_log("was closed by [usr ? key_name(usr) : "a remote signal"]", "atmos") return -/obj/machinery/atmospherics/binary/valve/attack_ai(mob/user as mob) +/obj/machinery/atmospherics/binary/valve/attack_ai(mob/user) return + +/obj/machinery/atmospherics/binary/valve/attack_ghost(mob/user) + if(user.can_advanced_admin_interact()) + return attack_hand(user) -/obj/machinery/atmospherics/binary/valve/attack_hand(mob/user as mob) +/obj/machinery/atmospherics/binary/valve/attack_hand(mob/user) add_fingerprint(usr) update_icon(1) sleep(10) if(open) close() - return - open() + else + open() /obj/machinery/atmospherics/binary/valve/digital // can be controlled by AI name = "digital valve" @@ -67,13 +71,13 @@ var/datum/radio_frequency/radio_connection settagwhitelist = list("id_tag") -/obj/machinery/atmospherics/binary/valve/digital/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/atmospherics/binary/valve/digital/attack_ai(mob/user) + return attack_hand(user) -/obj/machinery/atmospherics/binary/valve/digital/attack_hand(mob/user as mob) +/obj/machinery/atmospherics/binary/valve/digital/attack_hand(mob/user) if(!powered()) return - if(!src.allowed(user)) + if(!allowed(user) && !user.can_advanced_admin_interact()) to_chat(user, "Access denied.") return ..() @@ -130,7 +134,7 @@ if(open) close() -/obj/machinery/atmospherics/binary/valve/digital/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/machinery/atmospherics/binary/valve/digital/attackby(var/obj/item/weapon/W as obj, var/mob/user) if(istype(W, /obj/item/device/multitool)) update_multitool_menu(user) return 1 diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 80e1ad2e8b9..4f2cbb56117 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -99,7 +99,7 @@ Thus, the two variables affect pump operation are set in New(): return 1 -/obj/machinery/atmospherics/binary/volume_pump/interact(mob/user as mob) +/obj/machinery/atmospherics/binary/volume_pump/interact(mob/user) var/dat = {"Power: [on?"On":"Off"]
Desirable output flow: [round(transfer_rate,1)]l/s | Change @@ -142,16 +142,20 @@ Thus, the two variables affect pump operation are set in New(): broadcast_status() update_icon() -/obj/machinery/atmospherics/binary/volume_pump/attack_hand(user as mob) +/obj/machinery/atmospherics/binary/volume_pump/attack_hand(mob/user) if(..()) return - src.add_fingerprint(usr) - if(!src.allowed(user)) + add_fingerprint(user) + if(!allowed(user) && !user.can_admin_interact()) to_chat(user, "Access denied.") return - usr.set_machine(src) + user.set_machine(src) + interact(user) + +/obj/machinery/atmospherics/binary/volume_pump/attack_ghost(mob/user) + add_fingerprint(user) + user.set_machine(src) interact(user) - return /obj/machinery/atmospherics/binary/volume_pump/Topic(href,href_list) if(..()) @@ -160,13 +164,12 @@ Thus, the two variables affect pump operation are set in New(): on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if(href_list["set_transfer_rate"]) - var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",src.transfer_rate) as num - src.transfer_rate = max(0, min(200, new_transfer_rate)) + var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",transfer_rate) as num + transfer_rate = max(0, min(200, new_transfer_rate)) investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", "atmos") usr.set_machine(src) - src.update_icon() - src.updateUsrDialog() - return + update_icon() + updateUsrDialog() /obj/machinery/atmospherics/binary/volume_pump/power_change() var/old_stat = stat @@ -174,7 +177,7 @@ Thus, the two variables affect pump operation are set in New(): if(old_stat != stat) update_icon() -/obj/machinery/atmospherics/binary/volume_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob, params) +/obj/machinery/atmospherics/binary/volume_pump/attackby(var/obj/item/weapon/W, var/mob/user, params) if(!istype(W, /obj/item/weapon/wrench)) return ..() if(!(stat & NOPOWER) && on) diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index beae30e55db..cacc1e8b9a0 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -107,7 +107,7 @@ to_chat(user, "You cannot unwrench [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You begin to unfasten \the [src]...") if(do_after(user, 40, target = src)) user.visible_message( \ @@ -119,14 +119,17 @@ else return ..() -/obj/machinery/atmospherics/omni/attack_hand(user as mob) +/obj/machinery/atmospherics/omni/attack_hand(mob/user) if(..()) return - src.add_fingerprint(usr) + add_fingerprint(usr) ui_interact(user) - return +/obj/machinery/atmospherics/omni/attack_ghost(mob/user) + add_fingerprint(usr) + ui_interact(user) + /obj/machinery/atmospherics/omni/proc/build_icons() if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 021bec1cd24..732013765d2 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -146,15 +146,25 @@ Filter types: /obj/machinery/atmospherics/trinary/filter/initialize() set_frequency(frequency) ..() + +/obj/machinery/atmospherics/trinary/filter/attack_ghost(mob/user) + add_fingerprint(user) + user.set_machine(src) + interact(user) -/obj/machinery/atmospherics/trinary/filter/attack_hand(user as mob) // -- TLE +/obj/machinery/atmospherics/trinary/filter/attack_hand(mob/user) if(..()) return - if(!src.allowed(user)) + add_fingerprint(user) + if(!allowed(user) && !user.can_admin_interact()) to_chat(user, "Access denied.") return - + + user.set_machine(src) + interact(user) + +/obj/machinery/atmospherics/trinary/filter/interact(mob/user) var/dat var/current_filter_type switch(filter_type) @@ -184,34 +194,27 @@ Filter types: Nitrous Oxide
Nothing

Desirable output pressure: - [src.target_pressure]kPa | Change + [target_pressure]kPa | Change "} var/datum/browser/popup = new(user, "atmo_filter", name, 400, 400) popup.set_content(dat) popup.open(0) onclose(user, "atmo_filter") - return /obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) // -- TLE if(..()) return 1 usr.set_machine(src) - src.add_fingerprint(usr) + add_fingerprint(usr) if(href_list["filterset"]) - src.filter_type = text2num(href_list["filterset"]) + filter_type = text2num(href_list["filterset"]) if(href_list["temp"]) - src.temp = null + temp = null if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",target_pressure) as num + target_pressure = max(0, min(4500, new_pressure)) if(href_list["power"]) on=!on - src.update_icon() - src.updateUsrDialog() -/* - for(var/mob/M in viewers(1, src)) - if((M.client && M.machine == src)) - src.attack_hand(M) -*/ - return + update_icon() + updateUsrDialog() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index bef88fe6f3b..54ec88c63a7 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -107,14 +107,25 @@ parent3.update = 1 return 1 + +/obj/machinery/atmospherics/trinary/mixer/attack_ghost(mob/user) + add_fingerprint(user) + user.set_machine(src) + interact(user) -/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob) +/obj/machinery/atmospherics/trinary/mixer/attack_hand(mob/user) if(..()) return - src.add_fingerprint(usr) - if(!src.allowed(user)) + + add_fingerprint(user) + if(!allowed(user) && !user.can_admin_interact()) to_chat(user, "Access denied.") return + + user.set_machine(src) + interact(user) + +/obj/machinery/atmospherics/trinary/mixer/interact(mob/user) usr.set_machine(src) var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: @@ -139,7 +150,6 @@ popup.set_content(dat) popup.open(0) onclose(user, "atmo_mixer") - return /obj/machinery/atmospherics/trinary/mixer/Topic(href,href_list) if(..()) @@ -147,16 +157,16 @@ if(href_list["power"]) on = !on if(href_list["set_press"]) - var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(4500, new_pressure)) + var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",target_pressure) as num + target_pressure = max(0, min(4500, new_pressure)) if(href_list["node1_c"]) var/value = text2num(href_list["node1_c"]) - src.node1_concentration = max(0, min(1, src.node1_concentration + value)) - src.node2_concentration = max(0, min(1, src.node2_concentration - value)) + node1_concentration = max(0, min(1, node1_concentration + value)) + node2_concentration = max(0, min(1, node2_concentration - value)) if(href_list["node2_c"]) var/value = text2num(href_list["node2_c"]) - src.node2_concentration = max(0, min(1, src.node2_concentration + value)) - src.node1_concentration = max(0, min(1, src.node1_concentration - value)) - src.update_icon() - src.updateUsrDialog() + node2_concentration = max(0, min(1, node2_concentration + value)) + node1_concentration = max(0, min(1, node1_concentration - value)) + update_icon() + updateUsrDialog() return diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index 2195bab16d8..ece9a5de27d 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -30,7 +30,7 @@ if(flipped) flipstate = "m" if(animation) - flick("tvalve[flipstate][src.state][!src.state]",src) + flick("tvalve[flipstate][state][!state]",src) else icon_state = "tvalve[flipstate][state]" @@ -52,9 +52,9 @@ /obj/machinery/atmospherics/trinary/tvalve/proc/switch_side() if(state == TVALVE_STATE_STRAIGHT) - src.go_to_side() + go_to_side() else - src.go_straight() + go_straight() /obj/machinery/atmospherics/trinary/tvalve/proc/go_to_side() if(state == TVALVE_STATE_SIDE) @@ -86,10 +86,14 @@ investigate_log("was set to straight by [usr ? key_name(usr) : "a remote signal"]", "atmos") return 1 -/obj/machinery/atmospherics/trinary/tvalve/attack_ai(mob/user as mob) +/obj/machinery/atmospherics/trinary/tvalve/attack_ai(mob/user) return + +/obj/machinery/atmospherics/trinary/tvalve/attack_ghost(mob/user) + if(user.can_advanced_admin_interact()) + return attack_hand(user) -/obj/machinery/atmospherics/trinary/tvalve/attack_hand(mob/user as mob) +/obj/machinery/atmospherics/trinary/tvalve/attack_hand(mob/usermob) add_fingerprint(usr) update_icon(1) sleep(10) @@ -128,13 +132,13 @@ if(!powered()) icon_state = "tvalvenopower" -/obj/machinery/atmospherics/trinary/tvalve/digital/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/atmospherics/trinary/tvalve/digital/attack_ai(mob/user) + return attack_hand(user) -/obj/machinery/atmospherics/trinary/tvalve/digital/attack_hand(mob/user as mob) +/obj/machinery/atmospherics/trinary/tvalve/digital/attack_hand(mob/user) if(!powered()) return - if(!src.allowed(user)) + if(!allowed(user) && !user.can_admin_interact()) to_chat(user, "Access denied.") return ..() From 53e156388e77873425fc1cd57f88eb5eecb43dea Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 10 Feb 2017 21:54:51 +0100 Subject: [PATCH 018/308] Cleanup interaction --- code/ATMOSPHERICS/components/binary_devices/volume_pump.dm | 2 +- code/ATMOSPHERICS/components/trinary_devices/filter.dm | 2 +- code/ATMOSPHERICS/components/trinary_devices/mixer.dm | 2 +- code/ATMOSPHERICS/components/trinary_devices/tvalve.dm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 4f2cbb56117..12982820b84 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -146,7 +146,7 @@ Thus, the two variables affect pump operation are set in New(): if(..()) return add_fingerprint(user) - if(!allowed(user) && !user.can_admin_interact()) + if(!allowed(user)) to_chat(user, "Access denied.") return user.set_machine(src) diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 732013765d2..c916848797e 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -157,7 +157,7 @@ Filter types: return add_fingerprint(user) - if(!allowed(user) && !user.can_admin_interact()) + if(!allowed(user)) to_chat(user, "Access denied.") return diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 54ec88c63a7..d1b304f072a 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -118,7 +118,7 @@ return add_fingerprint(user) - if(!allowed(user) && !user.can_admin_interact()) + if(!allowed(user)) to_chat(user, "Access denied.") return diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index ece9a5de27d..0987561f94c 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -138,7 +138,7 @@ /obj/machinery/atmospherics/trinary/tvalve/digital/attack_hand(mob/user) if(!powered()) return - if(!allowed(user) && !user.can_admin_interact()) + if(!allowed(user) && !user.can_advanced_admin_interact()) to_chat(user, "Access denied.") return ..() From 23d4d7cc593a322c5d6db488f49fdc5f9780556e Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 10 Feb 2017 22:06:57 +0100 Subject: [PATCH 019/308] Interaction with pipe dispensers --- code/game/machinery/pipe/pipe_dispenser.dm | 157 ++++++++++----------- 1 file changed, 75 insertions(+), 82 deletions(-) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 34f41e2a1b5..d7ac49381b9 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -7,9 +7,16 @@ var/unwrenched = 0 var/wait = 0 -/obj/machinery/pipedispenser/attack_hand(user as mob) +/obj/machinery/pipedispenser/attack_hand(mob/user) if(..()) - return + return 1 + + interact(user) + +/obj/machinery/pipedispenser/attack_ghost(mob/user) + interact(user) + +/obj/machinery/pipedispenser/interact(mob/user) var/dat = {" Regular pipes:
Pipe
@@ -65,21 +72,19 @@ popup.set_content(dat) popup.open(0) onclose(user, "pipedispenser") - return /obj/machinery/pipedispenser/Topic(href, href_list) - if(..()) - return - if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=pipedispenser") - return + if(..() || unwrenched) + return 1 + usr.set_machine(src) - src.add_fingerprint(usr) + add_fingerprint(usr) + if(href_list["make"]) if(!wait) var/p_type = text2num(href_list["make"]) var/p_dir = text2num(href_list["dir"]) - var/obj/item/pipe/P = new (/*usr.loc*/ src.loc, pipe_type=p_type, dir=p_dir) + var/obj/item/pipe/P = new (loc, pipe_type=p_type, dir=p_dir) P.update() P.add_fingerprint(usr) wait = 1 @@ -87,50 +92,49 @@ wait = 0 if(href_list["makemeter"]) if(!wait) - new /obj/item/pipe_meter(/*usr.loc*/ src.loc) + new /obj/item/pipe_meter(loc) wait = 1 spawn(15) wait = 0 if(href_list["makegsensor"]) if(!wait) - new /obj/item/pipe_gsensor(/*usr.loc*/ src.loc) + new /obj/item/pipe_gsensor(loc) wait = 1 spawn(15) wait = 0 - return /obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - src.add_fingerprint(usr) + add_fingerprint(usr) if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor)) - to_chat(usr, "\blue You put [W] back to [src].") + to_chat(usr, "You put [W] back to [src].") user.drop_item() qdel(W) return else if(istype(W, /obj/item/weapon/wrench)) if(unwrenched==0) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "\blue You begin to unfasten \the [src] from the floor...") + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + to_chat(user, "You begin to unfasten \the [src] from the floor...") if(do_after(user, 40, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ - "\blue You have unfastened \the [src]. Now it can be pulled somewhere else.", \ + "You have unfastened \the [src]. Now it can be pulled somewhere else.", \ "You hear ratchet.") - src.anchored = 0 - src.stat |= MAINT - src.unwrenched = 1 + anchored = 0 + stat |= MAINT + unwrenched = 1 if(usr.machine==src) usr << browse(null, "window=pipedispenser") else /*if(unwrenched==1)*/ - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "\blue You begin to fasten \the [src] to the floor...") + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + to_chat(user, "You begin to fasten \the [src] to the floor...") if(do_after(user, 20, target = src)) user.visible_message( \ "[user] fastens \the [src].", \ - "\blue You have fastened \the [src]. Now it can dispense pipes.", \ + "You have fastened \the [src]. Now it can dispense pipes.", \ "You hear ratchet.") - src.anchored = 1 - src.stat &= ~MAINT - src.unwrenched = 0 + anchored = 1 + stat &= ~MAINT + unwrenched = 0 power_change() else return ..() @@ -143,21 +147,12 @@ density = 1 anchored = 1.0 -/* -//Allow you to push disposal pipes into it (for those with density 1) -/obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj) - if(istype(pipe) && !pipe.anchored) - qdel(pipe) - -Nah -*/ - //Allow you to drag-drop disposal pipes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe as obj, mob/usr as mob) - if(!usr.canmove || usr.stat || usr.restrained()) +/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe, mob/usr) + if(usr.incapacitated()) return - if(!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) + if(!istype(pipe) || get_dist(usr, src) > 1 || get_dist(src, pipe) > 1 ) return if(pipe.anchored) @@ -165,10 +160,16 @@ Nah qdel(pipe) -/obj/machinery/pipedispenser/disposal/attack_hand(user as mob) +/obj/machinery/pipedispenser/disposal/attack_hand(mob/user) if(..()) return - + + interact(user) + +/obj/machinery/pipedispenser/disposal/attack_ghost(mob/user) + interact(user) + +/obj/machinery/pipedispenser/disposal/interact(mob/user) var/dat = {"Disposal Pipes

Pipe
Bent Pipe
@@ -183,47 +184,39 @@ Nah var/datum/browser/popup = new(user, "pipedispenser", name, 400, 400) popup.set_content(dat) popup.open() - return - -// 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk - /obj/machinery/pipedispenser/disposal/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - src.add_fingerprint(usr) - if(href_list["dmake"]) - if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=pipedispenser") - return - if(!wait) - var/p_type = text2num(href_list["dmake"]) - var/obj/structure/disposalconstruct/C = new (src.loc) - switch(p_type) - if(0) - C.ptype = 0 - if(1) - C.ptype = 1 - if(2) - C.ptype = 2 - if(3) - C.ptype = 4 - if(4) - C.ptype = 5 - if(5) - C.ptype = 6 - C.density = 1 - if(6) - C.ptype = 7 - C.density = 1 - if(7) - C.ptype = 8 - C.density = 1 - C.add_fingerprint(usr) - C.update() - wait = 1 - spawn(15) - wait = 0 - return + if(..() || unwrenched) + return 1 + usr.set_machine(src) + add_fingerprint(usr) + + if(!wait) + var/p_type = text2num(href_list["dmake"]) + var/obj/structure/disposalconstruct/C = new (loc) + switch(p_type) + if(0) + C.ptype = 0 + if(1) + C.ptype = 1 + if(2) + C.ptype = 2 + if(3) + C.ptype = 4 + if(4) + C.ptype = 5 + if(5) + C.ptype = 6 + C.density = 1 + if(6) + C.ptype = 7 + C.density = 1 + if(7) + C.ptype = 8 + C.density = 1 + C.add_fingerprint(usr) + C.update() + wait = 1 + spawn(15) + wait = 0 \ No newline at end of file From e6ce0924b8eeefb802e6162d59f2b8d4ad5f735e Mon Sep 17 00:00:00 2001 From: Markolie Date: Fri, 10 Feb 2017 23:37:03 +0100 Subject: [PATCH 020/308] Fingerprint/set_machine consistency --- .../components/binary_devices/passive_gate.dm | 9 +++++---- code/ATMOSPHERICS/components/binary_devices/pump.dm | 9 +++++---- .../components/binary_devices/volume_pump.dm | 9 +++++---- code/ATMOSPHERICS/components/omni_devices/omni_base.dm | 1 - code/ATMOSPHERICS/components/trinary_devices/filter.dm | 9 ++++----- code/ATMOSPHERICS/components/trinary_devices/mixer.dm | 7 ++----- code/modules/hydroponics/biogenerator.dm | 1 + code/modules/hydroponics/gene_modder.dm | 1 + code/modules/hydroponics/seed_extractor.dm | 1 + 9 files changed, 24 insertions(+), 23 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index c96a1b0b325..993ba4d802f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -89,6 +89,9 @@ return 1 /obj/machinery/atmospherics/binary/passive_gate/interact(mob/user) + user.set_machine(src) + add_fingerprint(user) + var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: [round(target_pressure,0.1)]kPa | Change @@ -134,16 +137,14 @@ /obj/machinery/atmospherics/binary/passive_gate/attack_hand(mob/user) if(..()) return - add_fingerprint(user) + if(!allowed(user)) to_chat(user, "Access denied.") return - user.set_machine(src) + interact(user) /obj/machinery/atmospherics/binary/passive_gate/attack_ghost(mob/user) - add_fingerprint(user) - user.set_machine(src) interact(user) /obj/machinery/atmospherics/binary/passive_gate/Topic(href,href_list) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 40faf440cfd..824d3b1c5f0 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -104,6 +104,9 @@ Thus, the two variables affect pump operation are set in New(): return 1 /obj/machinery/atmospherics/binary/pump/interact(mob/user) + user.set_machine(src) + add_fingerprint(user) + var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: [round(target_pressure,0.1)]kPa | Change @@ -154,16 +157,14 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/attack_hand(mob/user) if(..()) return - add_fingerprint(user) + if(!allowed(user)) to_chat(user, "Access denied.") return - user.set_machine(src) + interact(user) /obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) - add_fingerprint(user) - user.set_machine(src) interact(user) /obj/machinery/atmospherics/binary/pump/Topic(href,href_list) diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 12982820b84..99465e15d88 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -100,6 +100,9 @@ Thus, the two variables affect pump operation are set in New(): return 1 /obj/machinery/atmospherics/binary/volume_pump/interact(mob/user) + user.set_machine(src) + add_fingerprint(user) + var/dat = {"Power: [on?"On":"Off"]
Desirable output flow: [round(transfer_rate,1)]l/s | Change @@ -145,16 +148,14 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/volume_pump/attack_hand(mob/user) if(..()) return - add_fingerprint(user) + if(!allowed(user)) to_chat(user, "Access denied.") return - user.set_machine(src) + interact(user) /obj/machinery/atmospherics/binary/volume_pump/attack_ghost(mob/user) - add_fingerprint(user) - user.set_machine(src) interact(user) /obj/machinery/atmospherics/binary/volume_pump/Topic(href,href_list) diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index cacc1e8b9a0..2eca090d086 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -127,7 +127,6 @@ ui_interact(user) /obj/machinery/atmospherics/omni/attack_ghost(mob/user) - add_fingerprint(usr) ui_interact(user) /obj/machinery/atmospherics/omni/proc/build_icons() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index c916848797e..b8ecae86b85 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -148,23 +148,22 @@ Filter types: ..() /obj/machinery/atmospherics/trinary/filter/attack_ghost(mob/user) - add_fingerprint(user) - user.set_machine(src) interact(user) /obj/machinery/atmospherics/trinary/filter/attack_hand(mob/user) if(..()) return - add_fingerprint(user) if(!allowed(user)) to_chat(user, "Access denied.") return - user.set_machine(src) interact(user) -/obj/machinery/atmospherics/trinary/filter/interact(mob/user) +/obj/machinery/atmospherics/trinary/filter/interact(mob/user) + user.set_machine(src) + add_fingerprint(user) + var/dat var/current_filter_type switch(filter_type) diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index d1b304f072a..f859175cdb2 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -109,24 +109,21 @@ return 1 /obj/machinery/atmospherics/trinary/mixer/attack_ghost(mob/user) - add_fingerprint(user) - user.set_machine(src) interact(user) /obj/machinery/atmospherics/trinary/mixer/attack_hand(mob/user) if(..()) return - add_fingerprint(user) if(!allowed(user)) to_chat(user, "Access denied.") return - user.set_machine(src) interact(user) /obj/machinery/atmospherics/trinary/mixer/interact(mob/user) - usr.set_machine(src) + user.set_machine(src) + add_fingerprint(user) var/dat = {"Power: [on?"On":"Off"]
Desirable output pressure: [target_pressure]kPa | Change diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 4a5190bac39..ce393c16e15 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -156,6 +156,7 @@ if(stat & BROKEN || panel_open) return user.set_machine(src) + add_fingerprint(user) var/dat if(processing) dat += "
Biogenerator is processing! Please wait...

" diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 70eec9ae078..95e195caaf7 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -95,6 +95,7 @@ interact(user) /obj/machinery/plantgenes/interact(mob/user) + add_fingerprint(user) user.set_machine(src) if(!user) return diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 631e2ff7321..379a15a296a 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -133,6 +133,7 @@ if(stat) return 0 + add_fingerprint(user) user.set_machine(src) var/dat = "Stored seeds:
" From a602c1d8da1cddc4be61d9127540f27bb74853e0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 11 Feb 2017 21:15:44 -0800 Subject: [PATCH 021/308] Adds 'take ahelp' option on ahelp Adds a 'take' option to ahelps and mentorhelps. Can be used by admins/mentors to quickly let the asker know their ahelp/mhelp is being dealt with. Other admins/mentors can see it too, so it should reduce the dogpiling effect where every online admin/mentor answers at once. Based on: https://github.com/Baystation12/Baystation12/pull/15902/files --- code/modules/admin/topic.dm | 17 +++++++++++++++++ code/modules/admin/verbs/adminhelp.dm | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4a01b1161e8..a404fbe525e 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1533,6 +1533,23 @@ else if(href_list["check_antagonist"]) check_antagonists() + else if(href_list["take_question"]) + var/mob/M = locateUID(href_list["take_question"]) + var/is_mhelp = href_list["is_mhelp"] + if(ismob(M)) + var/helptype = "ADMINHELP" + if(is_mhelp) + helptype = "MENTORHELP" + var/take_msg = "[helptype]: [key_name(usr.client)] is attending to [key_name(M)]'s question." + for(var/client/X in admins) + if(check_rights(R_ADMIN, 0, X.mob)) + to_chat(X, take_msg) + else if(is_mhelp && check_rights(R_MOD|R_MENTOR, 0, X.mob)) + to_chat(X, take_msg) + to_chat(M, "Your question is being attended to by [key_name(usr.client)]. Thanks for your patience!") + else + to_chat(usr, "Unable to locate mob.") + else if(href_list["cult_nextobj"]) if(alert(usr, "Validate the current Cult objective and unlock the next one?", "Cult Cheat Code", "Yes", "No") != "Yes") return diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 73b481bbc6b..972406bbdb3 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -109,13 +109,13 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," switch(selected_type) if("Mentorhelp") - msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""]: [msg]" + msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""] (PP) (TAKE) : [msg]" for(var/client/X in mentorholders + modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' to_chat(X, msg) if("Adminhelp") - msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""]: [msg]" + msg = "[selected_type]: [key_name(src, 1, 1, selected_type)] (?) (PP) (VV) (SM) ([admin_jump_link(mob)]) (CA) (REJT) [ai_found ? " (CL)" : ""] (PP) (TAKE) : [msg]" for(var/client/X in modholders + adminholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' From 525ecaef8e5004d93962214aea075e0520524a2a Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sun, 12 Feb 2017 23:07:07 -0500 Subject: [PATCH 022/308] Deepfryer fixes --- code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index d9b98c82724..7aa24bdf264 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -76,7 +76,7 @@ output = /obj/item/weapon/reagent_containers/food/snacks/fried_shrimp /datum/deepfryer_special/banana - input = "banana" + input = /obj/item/weapon/reagent_containers/food/snacks/grown/banana output = /obj/item/weapon/reagent_containers/food/snacks/friedbanana /datum/deepfryer_special/potato_chips @@ -84,7 +84,7 @@ output = /obj/item/weapon/reagent_containers/food/snacks/chips /datum/deepfryer_special/corn_chips - input = "corn" + input = /obj/item/weapon/reagent_containers/food/snacks/grown/corn output = /obj/item/weapon/reagent_containers/food/snacks/cornchips /datum/deepfryer_special/fried_tofu From 030dba205d9b493a26f6acf6750eda41b992146b Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sun, 12 Feb 2017 23:22:02 -0500 Subject: [PATCH 023/308] Slows Plant Aging Now with a define instead of a magic number for easy tweaking. --- code/modules/hydroponics/hydroponics.dm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5eae76ea446..81bbcf16110 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1,3 +1,5 @@ +#define HYDRO_CYCLES_PER_AGE 3 //Adjust this to adjust how many hydroponics cycles it takes to increase age. Positive integers only. + /obj/machinery/hydroponics name = "hydroponics tray" icon = 'icons/obj/hydroponics/equipment.dmi' @@ -20,6 +22,7 @@ var/lastproduce = 0 //Last time it was harvested var/lastcycle = 0 //Used for timing of cycles. var/cycledelay = 200 //About 10 seconds / cycle + var/current_cycle = 0 //Used for tracking when to age var/harvest = 0 //Ready to harvest? var/obj/item/seeds/myseed = null //The currently planted seed var/rating = 1 @@ -136,7 +139,10 @@ lastcycle = world.time if(myseed && !dead) // Advance age - age++ + current_cycle++ + if(current_cycle == HYDRO_CYCLES_PER_AGE) + age++ + current_cycle = 0 if(age < myseed.maturation) lastproduce = age @@ -1013,4 +1019,6 @@ to_chat(user, "You clear up [src]!") qdel(src) else - ..() \ No newline at end of file + ..() + +#undefine HYDRO_CYCLES_PER_AGE \ No newline at end of file From b0f46a28a145486951299a5ea8ebc5fb32ff1a07 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sun, 12 Feb 2017 23:32:49 -0500 Subject: [PATCH 024/308] Re-Adds Hydro Tray Covers Also fixed a derp with the define --- code/modules/hydroponics/hydroponics.dm | 25 ++++++++++++++++-- .../mob/living/simple_animal/hostile/bees.dm | 8 +++--- icons/obj/hydroponics/equipment.dmi | Bin 24802 -> 26301 bytes 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 81bbcf16110..8d08286fa8e 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1,4 +1,4 @@ -#define HYDRO_CYCLES_PER_AGE 3 //Adjust this to adjust how many hydroponics cycles it takes to increase age. Positive integers only. +#define HYDRO_CYCLES_PER_AGE 3 //Adjust this to adjust how many hydroponics cycles it takes to increase age. Positive integers only. /obj/machinery/hydroponics name = "hydroponics tray" @@ -27,6 +27,7 @@ var/obj/item/seeds/myseed = null //The currently planted seed var/rating = 1 var/wrenchable = 1 + var/lid_state = 0 var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant var/using_irrigation = FALSE //If the tray is connected to other trays via irrigation hoses var/self_sustaining = FALSE //If the tray generates nutrients and water on its own @@ -111,6 +112,20 @@ return connected +/obj/machinery/hydroponics/AltClick() + if(wrenchable && !usr.stat && !usr.lying && Adjacent(usr)) + toggle_lid(usr) + return + return ..() + +/obj/machinery/hydroponics/proc/toggle_lid(mob/living/user) + if(!user || user.stat || user.restrained()) + return + + lid_state = !lid_state + to_chat(user, "You [lid_state ? "close" : "open"] the tray's lid.") + update_icon() + /obj/machinery/hydroponics/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. if(!myseed) @@ -273,6 +288,9 @@ overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing") set_light(3) + if(lid_state) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "hydrocover") + update_icon_hoses() if(myseed) @@ -910,6 +928,9 @@ /obj/machinery/hydroponics/attack_hand(mob/user) if(issilicon(user)) //How does AI know what plant is? return + if(lid_state) + to_chat(user, "You can't reach the plant through the cover.") + return if(harvest) myseed.harvest(user) else if(dead) @@ -1021,4 +1042,4 @@ else ..() -#undefine HYDRO_CYCLES_PER_AGE \ No newline at end of file +#undef HYDRO_CYCLES_PER_AGE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 538ce8450c7..76577327b61 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -161,8 +161,8 @@ /mob/living/simple_animal/hostile/poison/bees/worker/Found(atom/A) if(istype(A, /obj/machinery/hydroponics)) var/obj/machinery/hydroponics/Hydro = A - if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit) - wanted_objects |= /obj/machinery/hydroponics //so we only hunt them while they're alive/seeded/not visisted + if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit && !Hydro.lid_state) + wanted_objects |= /obj/machinery/hydroponics //so we only hunt them while they're alive/seeded/not visisted and uncovered return 1 ..() @@ -188,12 +188,12 @@ ..() /mob/living/simple_animal/hostile/poison/bees/worker/proc/pollinate(obj/machinery/hydroponics/Hydro) - if(!istype(Hydro) || !Hydro.myseed || Hydro.dead || Hydro.recent_bee_visit) + if(!istype(Hydro) || !Hydro.myseed || Hydro.dead || Hydro.recent_bee_visit || Hydro.lid_state) target = null return target = null //so we pick a new hydro tray next FindTarget(), instead of loving the same plant for eternity - wanted_objects -= /obj/machinery/hydroponics //so we only hunt them while they're alive/seeded/not visisted + wanted_objects -= /obj/machinery/hydroponics //so we only hunt them while they're alive/seeded/not visisted and uncovered Hydro.recent_bee_visit = TRUE spawn(BEE_TRAY_RECENT_VISIT) if(Hydro) diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 189d168219470310ad8cd46ad3e35d63f2743902..3b1c4c07cfad5d944083cc203a05243d302e7024 100644 GIT binary patch delta 6138 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 Date: Mon, 13 Feb 2017 01:16:13 -0800 Subject: [PATCH 025/308] Lets mentors see playtime Mentors can already see a list of all players by account age. This includes antags with obvious names, like "Donk Co. Operative #1". This PR changes the permissions on the playtime report (the one which shows how much playtime everyone has) so mentors can see that, too. The idea being that this enables mentors to distinguish between "X has an old account" and "X has a lot of experience on paradise". Currently, mentors cannot distinguish the two. Also, consistency. If mentors can see players' account registration age, they should also be able to see players' playtime experience. --- code/game/jobs/job_exp.dm | 2 +- code/modules/admin/admin_verbs.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 746dfcacf44..ba87db2946e 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -1,6 +1,6 @@ // Admin Verbs -/client/proc/cmd_admin_check_player_exp() //Allows admins to determine who the newer players are. +/client/proc/cmd_mentor_check_player_exp() //Allows admins to determine who the newer players are. set category = "Admin" set name = "Check Player Playtime" if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6b2224962f5..7f38ec55bc8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -2,7 +2,8 @@ var/list/admin_verbs_default = list( /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ - /client/proc/cmd_mentor_check_new_players + /client/proc/cmd_mentor_check_new_players, + /client/proc/cmd_mentor_check_player_exp /* shows players by playtime */ ) var/list/admin_verbs_admin = list( /client/proc/check_antagonists, /*shows all antags*/ @@ -75,7 +76,6 @@ var/list/admin_verbs_admin = list( /client/proc/debug_variables, /client/proc/show_snpc_verbs, /client/proc/reset_all_tcs, /*resets all telecomms scripts*/ - /client/proc/cmd_admin_check_player_exp, /* shows players by playtime */ /client/proc/toggle_mentor_chat ) var/list/admin_verbs_ban = list( @@ -166,7 +166,7 @@ var/list/admin_verbs_debug = list( /client/proc/admin_serialize, /client/proc/admin_deserialize, /client/proc/jump_to_ruin, - /client/proc/toggle_medal_disable + /client/proc/toggle_medal_disable ) var/list/admin_verbs_possess = list( /proc/possess, From 622f36575efbc7c2282ef30d5de69b98c1ed69ba Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Mon, 13 Feb 2017 23:33:28 -0500 Subject: [PATCH 026/308] A little faster 3x -> 2x --- code/modules/hydroponics/hydroponics.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8d08286fa8e..8cbca85a521 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1,4 +1,4 @@ -#define HYDRO_CYCLES_PER_AGE 3 //Adjust this to adjust how many hydroponics cycles it takes to increase age. Positive integers only. +#define HYDRO_CYCLES_PER_AGE 2 //Adjust this to adjust how many hydroponics cycles it takes to increase age. Positive integers only. /obj/machinery/hydroponics name = "hydroponics tray" From b7855481f6de58dac3263f9a5abc9bddb51e48c6 Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 13 Feb 2017 23:12:57 -0800 Subject: [PATCH 027/308] Fixes & Improvements - Makes new players be listed first in the Check Playtime list, so they are easy to find. - Fixes a bug with mentor playtime list not actually working for mentors. - Fixes the Check Player Age panel not having working "FLW" links, and potentially showing antag status to mentors. --- code/defines/procs/admin.dm | 6 +++++ code/game/jobs/job_exp.dm | 30 ++++++++++++++++++++----- code/modules/admin/topic.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 5 ++++- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index fb9bc232e12..2bc6b59e1d0 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -48,6 +48,12 @@ var/message = "[key_name(whom, 1, include_name)](?)[isAntag(whom) ? "(A)" : ""][isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])" return message +/proc/key_name_mentor(var/whom, var/include_name = 1) + // Same as key_name_admin, but does not include (?) or (A) for antags. + var/message = "[key_name(whom, 1, include_name)] [isLivingSSD(whom) ? "(SSD!)" : ""] ([admin_jump_link(whom)])" + return message + + /proc/log_and_message_admins(var/message as text) log_admin("[key_name(usr)] " + message) message_admins("[key_name_admin(usr)] " + message) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index ba87db2946e..fc84a39bef7 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -3,20 +3,38 @@ /client/proc/cmd_mentor_check_player_exp() //Allows admins to determine who the newer players are. set category = "Admin" set name = "Check Player Playtime" - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return - var/msg = "Playtime ReportPlaytime:
    " + var/msg = "Playtime Report" + var/list/players_new = list() + var/list/players_old = list() + var/pline for(var/client/C in clients) - msg += "
  • [key_name_admin(C.mob)]: " + C.get_exp_living() + "
  • " - msg += "
" + if(check_rights(R_ADMIN)) + pline = "
  • [key_name_admin(C.mob)]: " + C.get_exp_living() + "
  • " + else + pline = "
  • [key_name_mentor(C.mob)]: " + C.get_exp_living() + "
  • " + if(C.get_exp_living_num() > 1200) + players_old += pline + else + players_new += pline + if(players_new.len) + msg += "
    Players under 20h:
      " + msg += players_new.Join() + msg += "
    " + if(players_old.len) + msg += "
    Players over 20h:
      " + msg += players_old.Join() + msg += "
    " + msg += "" src << browse(msg, "window=Player_playtime_check") -/datum/admins/proc/cmd_show_exp_panel(var/client/C) +/datum/admins/proc/cmd_mentor_show_exp_panel(var/client/C) if(!C) to_chat(usr, "ERROR: Client not found.") return - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return var/body = "Playtime for [C.key]
    Playtime:" body += C.get_exp_report() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4a01b1161e8..fe182889c87 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2031,7 +2031,7 @@ if(!M) to_chat(usr, "ERROR: Mob not found.") return - cmd_show_exp_panel(M.client) + cmd_mentor_show_exp_panel(M.client) else if(href_list["jumpto"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 79ee34fb635..4b484d58e80 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -88,7 +88,10 @@ missing_ages = 1 continue if(C.player_age < age) - msg += "[key_name_admin(C)]: account is [C.player_age] days old
    " + if(check_rights(R_ADMIN)) + msg += "[key_name_admin(C.mob)]: [C.player_age] days old
    " + else + msg += "[key_name_mentor(C.mob)]: [C.player_age] days old
    " if(missing_ages) to_chat(src, "Some accounts did not have proper ages set in their clients. This function requires database to be present") From 7c6d08b4bfb71ca619c66652bfd2c2ce5569f52c Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 14 Feb 2017 00:58:31 -0800 Subject: [PATCH 028/308] PR 3, you are go for launch --- .../map_files/RandomZLevels/terrorspiders.dmm | 1513 +++++++++++++++++ code/_globalvars/lists/misc.dm | 1 + code/game/jobs/access.dm | 9 +- .../mission_code/UO71-terrorspiders.dm | 256 +++ .../hostile/terror_spiders/__defines.dm | 7 + .../hostile/terror_spiders/actions.dm | 7 + .../hostile/terror_spiders/black.dm | 8 + .../hostile/terror_spiders/empress.dm | 173 ++ .../hostile/terror_spiders/gray.dm | 117 +- .../hostile/terror_spiders/green.dm | 41 +- .../hostile/terror_spiders/hive.dm | 15 + .../hostile/terror_spiders/mother.dm | 6 +- .../hostile/terror_spiders/prince.dm | 15 +- .../hostile/terror_spiders/purple.dm | 20 +- .../hostile/terror_spiders/queen.dm | 139 +- .../hostile/terror_spiders/red.dm | 3 +- .../hostile/terror_spiders/reproduction.dm | 5 + .../hostile/terror_spiders/terror_ai.dm | 319 ++++ .../hostile/terror_spiders/terror_spiders.dm | 44 +- .../hostile/terror_spiders/white.dm | 18 +- config/example/away_mission_config.txt | 2 + paradise.dme | 3 + 22 files changed, 2683 insertions(+), 38 deletions(-) create mode 100644 _maps/map_files/RandomZLevels/terrorspiders.dmm create mode 100644 code/modules/awaymissions/mission_code/UO71-terrorspiders.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm diff --git a/_maps/map_files/RandomZLevels/terrorspiders.dmm b/_maps/map_files/RandomZLevels/terrorspiders.dmm new file mode 100644 index 00000000000..db75aec4744 --- /dev/null +++ b/_maps/map_files/RandomZLevels/terrorspiders.dmm @@ -0,0 +1,1513 @@ +"aa" = (/turf/unsimulated/wall{icon_state = "rock"; name = "rock"},/area/awaymission/UO71/outside) +"ab" = (/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/outside) +"ac" = (/turf/simulated/wall,/area/awaymission/UO71/plaza) +"ad" = (/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"ae" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"af" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"ag" = (/obj/structure/sign/poster{icon_state = "poster2_legit"; pixel_x = 0; pixel_y = 32; serial_number = 2; subtype = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ah" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ai" = (/obj/structure/sign/poster{icon_state = "poster2_legit"; pixel_x = 0; pixel_y = 32; serial_number = 2; subtype = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"ak" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"al" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/structure/sign/poster{icon_state = "poster19_legit"; pixel_x = -32; pixel_y = 0; serial_number = 19; subtype = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"am" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"an" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"ao" = (/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"ap" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"aq" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ar" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"as" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"at" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"au" = (/obj/structure/stool/bed/chair/comfy/beige{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"av" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aw" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"ax" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"ay" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"az" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aA" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/obj/item/clothing/under/suit_jacket/female,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/item/weapon/gun/energy/laser/retro,/obj/item/weapon/paper/terrorspiders8,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aC" = (/obj/structure/table,/obj/machinery/computer/id_upgrader,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaymission/UO71/gateway) +"aD" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aE" = (/obj/effect/spider/terrorweb,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aF" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aG" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aH" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"aI" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aJ" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"aK" = (/obj/machinery/door/airlock{id_tag = "awaydormE1"; locked = 0; name = "Executive Dorm 1"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aL" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aM" = (/obj/effect/spider/terrorweb,/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aN" = (/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"aO" = (/obj/structure/sink{pixel_y = 25},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"aP" = (/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"aR" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aS" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aT" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/obj/item/weapon/lighter{pixel_x = 4; pixel_y = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "grimy"},/area/awaymission/UO71/plaza) +"aU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"aV" = (/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aW" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"aX" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"aY" = (/obj/machinery/light/small,/obj/machinery/alarm/monitor{dir = 1; frequency = 1439; locked = 0; pixel_y = -23; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"aZ" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"ba" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"bb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera{c_tag = "Arrivals"; dir = 8; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"bc" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bd" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"be" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bf" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"bg" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"bh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"bi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"bj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; level = 1},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"bk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"bl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"bn" = (/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bo" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"bp" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/plaza) +"bq" = (/obj/structure/sign/poster{icon_state = "poster2_legit"; pixel_x = 0; pixel_y = -32; serial_number = 2; subtype = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"br" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bt" = (/obj/structure/sign/poster{icon_state = "poster2_legit"; pixel_x = 0; pixel_y = -32; serial_number = 2; subtype = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bu" = (/obj/machinery/door/airlock{id_tag = "awaydormE2"; locked = 0; name = "Executive Dorm 2"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bw" = (/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/plaza) +"bx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/awaymission/UO71/plaza) +"by" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/plaza) +"bz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"bA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/wall,/area/awaymission/UO71/plaza) +"bB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"bE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; level = 1},/turf/simulated/wall,/area/awaymission/UO71/plaza) +"bF" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bG" = (/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"bH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/plaza) +"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"bS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/plaza) +"bT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/plaza) +"bV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"bW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/awaymission/UO71/plaza) +"bX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"bY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ca" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cb" = (/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/plaza) +"cc" = (/obj/structure/closet,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ce" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/obj/item/clothing/under/pj/blue,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/obj/item/clothing/under/suit_jacket/female,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ch" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ci" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/plaza) +"ck" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/grille,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/plaza) +"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/plaza) +"co" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/obj/machinery/door_control{id = "awaydorm2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cr" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cs" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/door_control{id = "awaydorm1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ct" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 2},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/plaza) +"cw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"cz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; level = 1},/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"cC" = (/obj/structure/grille,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cD" = (/obj/item/stack/rods,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/grille,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm2"; name = "Dorm 2"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm1"; locked = 0; name = "Dorm 1"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/closet,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"cK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/plaza) +"cL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/plaza) +"cM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/rods,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"cP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/plaza) +"cQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"cS" = (/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"cT" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "greencorner"; tag = "icon-greencorner"},/area/awaymission/UO71/plaza) +"cU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/plaza) +"cV" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"cW" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"cX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"cY" = (/obj/machinery/seed_extractor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"cZ" = (/obj/machinery/biogenerator,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"da" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/plaza) +"db" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"de" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"df" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dg" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"di" = (/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dk" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dl" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"do" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dp" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dq" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/mask/bandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"dr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) +"ds" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "271"},/obj/item/weapon/storage/belt/security,/obj/item/device/flash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/obj/structure/stool/bed/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"du" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dv" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"dx" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"dy" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"dz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"dA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"dC" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dF" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"dG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"dH" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/clothing/suit/apron,/obj/item/clothing/mask/bandana,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"dI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Security Checkpoint Maintenance"; req_access_txt = "271"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dM" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dN" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "redcorner"},/area/awaymission/UO71/plaza) +"dO" = (/obj/structure/grille,/obj/structure/window/full/basic,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"dQ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dU" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"dV" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/security{network = list("UO71")},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dX" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"dY" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Security Checkpoint"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"dZ" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"ea" = (/obj/structure/stool/bed/chair/office{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"eb" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ec" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ed" = (/obj/structure/stool/bed/chair/office{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"ee" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"ef" = (/obj/structure/table,/obj/item/weapon/book/manual/hydroponics_pod_people,/obj/item/weapon/paper/hydroponics,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"eg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"eh" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"ei" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/item/weapon/folder/red,/obj/machinery/door/window/southleft{base_state = "left"; dir = 8; icon_state = "left"; name = "Security Checkpoint"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ej" = (/obj/structure/stool/bed/chair/office{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"ek" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"el" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "greencorner"},/area/awaymission/UO71/plaza) +"em" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"en" = (/obj/structure/stool,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eo" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"ep" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eq" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 0; pixel_y = 3},/obj/item/weapon/watertank,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"er" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"es" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/off,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/structure/sign/poster{icon_state = "poster21_legit"; pixel_y = -32; serial_number = 21; subtype = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"et" = (/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) +"eu" = (/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "redcorner"},/area/awaymission/UO71/plaza) +"ev" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"ew" = (/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "greencorner"; tag = "icon-greencorner"},/area/awaymission/UO71/plaza) +"ex" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"ey" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"ez" = (/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eA" = (/obj/machinery/camera{c_tag = "Hydroponics"; dir = 1; network = list("UO71")},/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 2; locked = 0; name = "Hydroponics APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 5},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"eH" = (/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/plaza) +"eI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/plaza) +"eJ" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) +"eK" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"eL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"eM" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"eN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"eO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "271"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/plaza) +"eR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door_control{id = "awaydorm3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock{id_tag = "awaydorm3"; name = "Dorm 3"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"eZ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/sign/poster{icon_state = "poster14"; pixel_x = 32; pixel_y = 0; serial_number = 14; subtype = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "greencorner"},/area/awaymission/UO71/plaza) +"fa" = (/turf/simulated/wall/rust,/area/awaymission/UO71/outside) +"fb" = (/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"fc" = (/obj/machinery/smartfridge,/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"fd" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastleft{dir = 1; name = "Hydroponics Desk"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/centralhall) +"fe" = (/turf/simulated/wall/rust,/area/awaymission/UO71/centralhall) +"ff" = (/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/centralhall) +"fh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/rust,/area/awaymission/UO71/centralhall) +"fi" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"fj" = (/obj/machinery/light/small,/obj/machinery/alarm/monitor{dir = 1; frequency = 1439; locked = 0; pixel_y = -23; req_access = null},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/dresser,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"fk" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) +"fl" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/camera{c_tag = "Central Hallway"; dir = 1; network = list("UO71")},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"fm" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"fn" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"fo" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"fp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"fq" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fr" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fs" = (/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/centralhall) +"ft" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"fv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; level = 1},/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"fw" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) +"fx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fy" = (/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "271"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fB" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fD" = (/obj/structure/closet/crate{desc = "It's a storage unit for kitchen clothes and equipment."; name = "Kitchen Crate"},/obj/item/weapon/storage/box/mousetraps,/obj/item/clothing/under/waiter,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fE" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "meat fridge"; req_access_txt = "271"},/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fF" = (/obj/effect/decal/cleanable/dirt,/obj/item/stack/rods,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fG" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/centralhall) +"fH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fI" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fK" = (/obj/machinery/door/airlock{name = "Kitchen Cold Room"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "showroomfloor"},/area/awaymission/UO71/centralhall) +"fL" = (/turf/simulated/wall,/area/awaymission/UO71/gateway) +"fM" = (/turf/simulated/wall/rust,/area/awaymission/UO71/gateway) +"fN" = (/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"fO" = (/turf/simulated/wall,/area/awaymission/UO71/science) +"fP" = (/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"fQ" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"fR" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"fS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"fT" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"fU" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"fV" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"fW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"fX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"fY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"fZ" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"ga" = (/turf/simulated/wall/r_wall,/area/awaymission/UO71/mother) +"gb" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 16; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 23},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"gc" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"gd" = (/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"ge" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"gf" = (/obj/machinery/camera{c_tag = "Research Lab"; dir = 2; network = list("UO71")},/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"gg" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gh" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/centralhall) +"gj" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"gk" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"gl" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"gm" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"gn" = (/obj/structure/table,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"go" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"gp" = (/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"gq" = (/obj/machinery/camera{c_tag = "Research Lab"; dir = 2; network = list("UO71")},/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"gr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/recharge_station,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"gs" = (/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/camera{c_tag = "Research Lab"; dir = 2; network = list("UO71")},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"gt" = (/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/r_leg,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"gu" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"gv" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"gw" = (/obj/machinery/light/small{dir = 4},/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/beaker/large{pixel_x = -3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 8; pixel_y = 2},/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"gx" = (/mob/living/simple_animal/hostile/poison/terror_spider/prince,/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"gy" = (/obj/machinery/light/small{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"gz" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"gA" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gB" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gC" = (/obj/machinery/vending/snack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gD" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gE" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gG" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gH" = (/obj/machinery/vending/boozeomat{req_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"gI" = (/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gJ" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gK" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/applepie,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gL" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/camera{c_tag = "Kitchen"; dir = 8; network = list("UO71")},/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"gM" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"gN" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"gO" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"gP" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"gQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"gR" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/gateway) +"gS" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"gT" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"gU" = (/mob/living/simple_animal/hostile/poison/terror_spider/mother,/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"gV" = (/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/science) +"gW" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/science) +"gX" = (/obj/machinery/r_n_d/protolathe,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/science) +"gY" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"gZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"ha" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"hb" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/mob/living/simple_animal/hostile/poison/terror_spider/gray,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"hc" = (/obj/structure/table,/obj/item/trash/chips,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hd" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"he" = (/obj/structure/stool,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hf" = (/obj/structure/table/reinforced,/obj/item/weapon/lighter/zippo,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hi" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access_txt = "271"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hj" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hk" = (/obj/structure/table,/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{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"ho" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"hp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; tag = "icon-manifold-b-f (EAST)"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"hq" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"hr" = (/obj/machinery/gateway,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"hs" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"ht" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hu" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hv" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"hw" = (/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"hx" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"hy" = (/obj/machinery/computer/rdconsole/core{id = 3; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"hz" = (/obj/item/weapon/paper{info = "The notes appear gibberish to you. Perhaps a destructive analyser in R&D could make sense of them."; name = "Research Notes"; origin_tech = "combat=2;materials=2;engineering=2;biotech=2"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"hA" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"hB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"hC" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"hD" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"hE" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"hF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"hG" = (/obj/structure/table,/obj/item/trash/plate,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hH" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hI" = (/obj/structure/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hJ" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hK" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"hL" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hM" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hN" = (/obj/machinery/processor,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"hO" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hP" = (/obj/structure/window/reinforced,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/window{dir = 2; name = "Gateway Chamber"; req_access_txt = "271"},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hR" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"hT" = (/obj/machinery/door/airlock{name = "Emergency Supplies"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"hU" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"hV" = (/obj/machinery/light/small,/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"hW" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/vault,/area/awaymission/UO71/mother) +"hX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 2; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module,/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"hY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"hZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"ia" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warnwhitecorner"},/area/awaymission/UO71/science) +"ib" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"ic" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/science) +"id" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"ie" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0; welded = 1},/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"if" = (/obj/machinery/light/small,/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"ig" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "weld"; on = 1; welded = 1},/obj/machinery/light/small,/turf/simulated/floor/vault,/area/awaymission/UO71/prince) +"ih" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ii" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ij" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ik" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"il" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"im" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"in" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "271"},/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/storage/fancy/egg_box,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"io" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/centralhall) +"ip" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/structure/sign/biohazard{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/gateway) +"iq" = (/obj/structure/table,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/gateway) +"ir" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"is" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/item/stack/rods,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"it" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/gateway) +"iu" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"iv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"iw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/gateway) +"iy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump,/mob/living/simple_animal/hostile/poison/terror_spider/gray,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"iz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"iA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall,/area/awaymission/UO71/gateway) +"iB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/outside) +"iC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/awaymission/UO71/mother) +"iD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/awaymission/UO71/mother) +"iE" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mother) +"iF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/awaymission/UO71/mother) +"iG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"iH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"iI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"iJ" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/prince) +"iK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"iL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"iM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/outside) +"iN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/wall/rust,/area/awaymission/UO71/centralhall) +"iO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"iP" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"iQ" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"iR" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"iS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"iT" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "271"},/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/centralhall) +"iU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"iV" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/camera{c_tag = "Gateway Chamber"; dir = 4; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/gateway) +"iW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "weld"; on = 1; welded = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"iX" = (/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{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"iY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "gib2_flesh"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"iZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/stool,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"ja" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"jb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"jc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"jd" = (/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"je" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/camera{c_tag = "Gateway Ready Room"; dir = 2; network = list("UO71")},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"jf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"jg" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/awaymission/UO71/mother) +"jh" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mother) +"ji" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/science) +"jj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"jk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"jl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/outside) +"jm" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/awaymission/UO71/prince) +"jn" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/prince) +"jo" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jq" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jr" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"js" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jt" = (/obj/machinery/door/window/southright{name = "Bar Door"; req_access_txt = "271"; req_one_access_txt = "0"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ju" = (/obj/machinery/camera{c_tag = "Bar"; dir = 8; network = list("UO71")},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jv" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"jx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/centralhall) +"jy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/centralhall) +"jz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"jA" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/gateway) +"jB" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/gateway) +"jC" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/splatter{color = "red"},/obj/item/weapon/paper/terrorspiders1,/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"jD" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"jE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"jF" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"jG" = (/turf/simulated/wall/r_wall,/area/awaymission/UO71/science) +"jH" = (/obj/machinery/door/poddoor{id_tag = "UO71_Containment"; name = "Containment 1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mother) +"jI" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/full/basic,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"jJ" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/research{name = "Research Lab"; req_access_txt = "271"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"jK" = (/obj/structure/grille,/obj/structure/window/full/basic,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"jL" = (/obj/machinery/door/poddoor{id_tag = "UO71_Containment"; name = "Containment 2"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/prince) +"jM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jN" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/structure/sign/poster{icon_state = "poster19_legit"; pixel_x = 0; pixel_y = 32; serial_number = 19; subtype = 1},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/centralhall) +"jO" = (/obj/structure/stool/bed/chair{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jP" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jQ" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 1; locked = 0; name = "UO71 Bar APC"; pixel_x = 0; pixel_y = 25; req_access = null; start_charge = 100},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"jU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/centralhall) +"jY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"jZ" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Gateway Chamber"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"ka" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"kb" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/gateway) +"kc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"kd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"ke" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER - LETHAL BIOHAZARDS WITHIN'"; name = "\improper CONTAINMENT AREA"},/turf/simulated/wall,/area/awaymission/UO71/science) +"kf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/UO71/science) +"kg" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/awaymission/UO71/science) +"kh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"ki" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"kj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurple"},/area/awaymission/UO71/science) +"kl" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"km" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/awaymission/UO71/science) +"kn" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER - LETHAL BIOHAZARDS WITHIN'"; name = "\improper CONTAINMENT AREA"},/turf/simulated/wall/r_wall,/area/awaymission/UO71/science) +"ko" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/paper/terrorspiders5,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/UO71/science) +"kp" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/awaymission/UO71/science) +"kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"kr" = (/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ks" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"kt" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ku" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"kv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"kw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"kx" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/centralhall) +"ky" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"kz" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"kA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{id_tag = "UO71_Start"; name = "UO71 Sealed Facility"},/obj/machinery/door/airlock/research{name = "Gateway Observation"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/gateway) +"kB" = (/obj/machinery/door/poddoor{id_tag = "UO71_Start"; name = "UO71 Sealed Facility"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"kC" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/gateway) +"kD" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/gateway) +"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warning"},/area/awaymission/UO71/gateway) +"kF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"kG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"kH" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"kI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/mob/living/simple_animal/hostile/poison/terror_spider/gray,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kM" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kQ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"kS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"kT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"kU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"kV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"kW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kX" = (/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"kZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"la" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"lb" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"lc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"ld" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitepurple"},/area/awaymission/UO71/science) +"le" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id_tag = "UO71_biohazard"; name = "biohazard containment door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "delivery"; name = "floor"},/area/awaymission/UO71/science) +"lf" = (/obj/structure/sink{pixel_y = 25},/obj/effect/decal/cleanable/dirt,/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"lg" = (/obj/machinery/shower{pixel_y = 15},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"lh" = (/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"li" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/structure/sign/science{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "purplecorner"; tag = "icon-purplecorner (WEST)"},/area/awaymission/UO71/centralhall) +"lj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"lk" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ll" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"lm" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ln" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"lo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"lp" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"lq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm/monitor{dir = 1; frequency = 1439; locked = 0; pixel_y = -23; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"lr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; tag = "icon-manifold-b-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ls" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/junction,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"lt" = (/turf/simulated/wall/r_wall,/area/awaymission/UO71/eng) +"lu" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaymission/UO71/gateway) +"lv" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"lw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"lx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"ly" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"lz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"lB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"lC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"lE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Research Division West"; dir = 1; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/mob/living/simple_animal/hostile/poison/terror_spider/red{ai_ventcrawls = 0; wander = 0},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lJ" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lL" = (/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/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lN" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 2; locked = 0; name = "UO71 Research Division APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 100},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; icon_state = "weld"; on = 1; pressure_checks = 1; welded = 1},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/gateway) +"lP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"lQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lS" = (/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lT" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/camera{c_tag = "Research Division East"; dir = 1; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lU" = (/obj/structure/sign/directions/medical{pixel_y = -12},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"lV" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"lW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "purple"; tag = "icon-purple (WEST)"},/area/awaymission/UO71/centralhall) +"lX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"lY" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"lZ" = (/obj/structure/stool/bed/chair{tag = "icon-chair (EAST)"; icon_state = "chair"; dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"ma" = (/obj/structure/table,/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{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"mb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "bar"},/area/awaymission/UO71/centralhall) +"mc" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"md" = (/obj/structure/closet/crate,/obj/item/stack/sheet/mineral/plasma{amount = 26},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"me" = (/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "Engineering Secure Storage"; dir = 2; network = list("UO71")},/obj/item/weapon/rcd/combat,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd_ammo/large,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"mf" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plating{dir = 8; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/eng) +"mg" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaymission/UO71/gateway) +"mh" = (/obj/effect/spider/cocoon{contents = newlist(/obj/effect/decal/remains/human); icon_state = "cocoon_large1"},/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/gateway) +"mi" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"mj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"mk" = (/obj/machinery/door/airlock/research{name = "Research Lab"; req_access_txt = "271"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"ml" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) +"mm" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warndarkcorners"; tag = "icon-warndarkcorners (WEST)"},/area/awaymission/UO71/gateway) +"mn" = (/obj/machinery/door/airlock/research{name = "Research Lab"; req_access_txt = "271"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"mo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"mp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"mq" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/command{name = "Research Director's Office"; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mr" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"ms" = (/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) +"mt" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"mu" = (/obj/structure/closet/firecloset,/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"mv" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaymission/UO71/science) +"mw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "purplecorner"; tag = "icon-purplecorner (NORTH)"},/area/awaymission/UO71/centralhall) +"mx" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"my" = (/obj/structure/table,/obj/item/weapon/newspaper,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"mz" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mB" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/item/weapon/reagent_containers/food/pill/haloperidol,/obj/item/weapon/reagent_containers/food/pill/haloperidol,/obj/item/weapon/reagent_containers/food/pill/haloperidol,/obj/item/weapon/reagent_containers/food/pill/haloperidol,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mC" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/structure/stool/bed/chair/wood/normal{dir = 8},/obj/item/weapon/paper/terrorspiders4,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mD" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/obj/item/clothing/under/pj/red,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mE" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"mF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"mG" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "UO71_Secure Storage"; name = "Engineering Secure Storage"; pixel_x = 6; pixel_y = -24; req_access_txt = "271"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"mH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"mI" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mJ" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"mL" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 2; locked = 0; name = "UO71 Gateway APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 100},/obj/machinery/light/small,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/gun/energy/laser/awaymission_aeg,/obj/item/weapon/gun/energy/laser/awaymission_aeg,/obj/item/weapon/gun/energy/laser/awaymission_aeg,/obj/item/weapon/gun/energy/laser/awaymission_aeg,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mN" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mO" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/gateway) +"mP" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"mQ" = (/obj/structure/table,/obj/item/weapon/paper/terrorspiders6,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"mR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"mS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{name = "Research Maintenance"; req_access_txt = "271"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"mT" = (/obj/structure/closet/secure_closet{icon_broken = "rdsecurebroken"; icon_closed = "rdsecure"; icon_locked = "rdsecure1"; icon_off = "rdsecureoff"; icon_opened = "rdsecureopen"; icon_state = "rdsecure1"; locked = 1; name = "research director's locker"; req_access_txt = "271"},/obj/item/weapon/storage/backpack/satchel_tox,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/suit/storage/labcoat/science,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mU" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mV" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mX" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mY" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"mZ" = (/obj/structure/table,/obj/machinery/newscaster{pixel_x = -30},/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"na" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control-switch whichs locks the research division down in the event of a biohazard leak or contamination."; id = "UO71_biohazard"; name = "Biohazard Door Control"; pixel_x = 0; pixel_y = -6; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"nb" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"nc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nd" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ne" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/door_control{id = "awaydorm5"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nf" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ng" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/obj/item/clothing/under/suit_jacket/navy,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nh" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ni" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "weld"; on = 1; welded = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nj" = (/obj/machinery/door_control{id = "awaydorm7"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nk" = (/obj/machinery/vending/cola,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nl" = (/obj/structure/stool/bed/chair/comfy/black{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nm" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nn" = (/obj/structure/stool/bed/chair/comfy/black{tag = "icon-comfychair (WEST)"; icon_state = "comfychair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"no" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"np" = (/turf/simulated/wall,/area/awaymission/UO71/eng) +"nq" = (/obj/machinery/door/poddoor{id_tag = "UO71_Secure Storage"; name = "secure storage"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"nr" = (/turf/simulated/wall/r_wall/rust,/area/awaymission/UO71/eng) +"ns" = (/obj/machinery/chem_master,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"nt" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"nu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nv" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/toxins,/obj/item/weapon/cartridge/signal/toxins{pixel_x = -4; pixel_y = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"nw" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/paper{info = "The notes appear gibberish to you. Perhaps a destructive analyser in R&D could make sense of them."; name = "Research Notes"; origin_tech = "combat=2;materials=2;engineering=2;biotech=2"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"nx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"ny" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"nz" = (/obj/machinery/computer/security{network = list("UO71")},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"nA" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nB" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Used for monitoring the research division and the labs within."; dir = 8; name = "research monitor"; network = list("UO71")},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"nC" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/science) +"nF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"nH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; tag = "icon-manifold-b-f (EAST)"},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nJ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/centralhall) +"nK" = (/obj/structure/sign/poster{icon_state = "poster7"; pixel_y = 32; serial_number = 7; subtype = 0},/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/centralhall) +"nL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm5"; name = "Dorm 5"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm7"; name = "Dorm 7"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nN" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"nQ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"nT" = (/turf/simulated/wall/rust,/area/awaymission/UO71/eng) +"nU" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "warndarkcorners"; tag = "icon-warndarkcorners"},/area/awaymission/UO71/eng) +"nV" = (/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/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark"},/area/awaymission/UO71/eng) +"nW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndarkcorners"; tag = "icon-warndarkcorners (NORTH)"},/area/awaymission/UO71/eng) +"nX" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine,/area/awaymission/UO71/science) +"nY" = (/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Chem Testing"; req_access_txt = "271"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/engine,/area/awaymission/UO71/science) +"nZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/pill/charcoal,/obj/item/weapon/reagent_containers/food/pill/charcoal,/obj/item/weapon/reagent_containers/glass/beaker/terror_black_toxin,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"oa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"ob" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/item/device/radio/off,/obj/item/device/laser_pointer,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oc" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"od" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"of" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/computer/security/telescreen{desc = "Used for monitoring the research division and the labs within."; dir = 2; name = "research monitor"; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"og" = (/obj/machinery/light/small{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oh" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/item/device/radio/off,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"oi" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"oj" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"ok" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/awaymission/UO71/science) +"ol" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/science) +"om" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"on" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"oo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"op" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"oq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"or" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"os" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/camera{c_tag = "Dormitories"; dir = 2; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"ot" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ou" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light/small{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"ov" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"ow" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"ox" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"oy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"oz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"oA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/mob/living/simple_animal/hostile/poison/terror_spider/gray,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"oB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"oC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-y"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"oD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"oE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; tag = "icon-manifold-b-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"oF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/junction{tag = "icon-pipe-y (WEST)"; icon_state = "pipe-y"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"oG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaymission/UO71/eng) +"oH" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 5e+006; input_level = 10000; inputting = 0; output_level = 25000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"oI" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 5e+006; input_level = 30000; inputting = 0; output_level = 25000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"oJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (WEST)"},/area/awaymission/UO71/eng) +"oK" = (/mob/living/carbon/human/monkey{name = "George the lab monkey"; toxloss = 193},/turf/simulated/floor/engine,/area/awaymission/UO71/science) +"oL" = (/obj/structure/window/reinforced{dir = 4; layer = 2.9},/turf/simulated/floor/engine,/area/awaymission/UO71/science) +"oM" = (/obj/machinery/chem_dispenser,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"oN" = (/obj/machinery/chem_heater,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"oO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/pill/methamphetamine,/obj/item/weapon/reagent_containers/food/pill/methamphetamine,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"oP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/science) +"oQ" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oR" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door_control{desc = "A remote control-switch whichs locks the research division down in the event of a biohazard leak or contamination."; id = "UO71_biohazard"; name = "Biohazard Door Control"; pixel_x = 0; pixel_y = 8; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oS" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oU" = (/obj/machinery/computer/aifixer,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"oV" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "271"},/obj/item/device/flash,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"oW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door_control{desc = "A remote control-switch whichs locks the research division down in the event of a biohazard leak or contamination."; id = "UO71_biohazard"; name = "Biohazard Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "271"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"oX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/science) +"oY" = (/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"oZ" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"ph" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"pl" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"po" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaymission/UO71/eng) +"pq" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/power/port_gen/pacman{desc = "A portable generator for emergency backup power."; name = "P.A.C.M.A.N.-type portable generator"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"pr" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/power/port_gen/pacman/super{desc = "A portable generator for emergency backup power."; name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"},/obj/item/weapon/wrench,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ps" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/power/port_gen/pacman{desc = "A portable generator for emergency backup power."; name = "P.A.C.M.A.N.-type portable generator"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"pt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (WEST)"},/area/awaymission/UO71/eng) +"pu" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/UO71/eng) +"pv" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "UO71_air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/UO71/eng) +"pw" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"px" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/science) +"py" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"pz" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"pA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/science) +"pB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/awaymission/UO71/science) +"pC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/science) +"pD" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pE" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"pF" = (/obj/machinery/light/small{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"pG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm4"; name = "Dorm 4"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm6"; name = "Dorm 6"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pI" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"pJ" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"pK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"pL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warndarkcorners"; tag = "icon-warndarkcorners (WEST)"},/area/awaymission/UO71/eng) +"pM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/eng) +"pN" = (/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/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (NORTH)"},/area/awaymission/UO71/eng) +"pO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndarkcorners"; tag = "icon-warndarkcorners (EAST)"},/area/awaymission/UO71/eng) +"pP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "UO71_air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/UO71/eng) +"pQ" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 2; frequency = 1443; id = "UO71_air_in"},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/UO71/eng) +"pR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"pS" = (/obj/machinery/door/airlock/command{name = "Server Room"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"pT" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/loot) +"pU" = (/obj/machinery/door/poddoor{id_tag = "UO71_SciStorage"; name = "SciStorage Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/loot) +"pV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/medical) +"pW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/rust,/area/awaymission/UO71/medical) +"pX" = (/turf/simulated/wall/rust,/area/awaymission/UO71/medical) +"pY" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medical Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"pZ" = (/obj/structure/grille,/obj/structure/window/full/basic,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/medical) +"qa" = (/turf/simulated/wall,/area/awaymission/UO71/medical) +"qb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaymission/UO71/centralhall) +"qc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"qd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"qe" = (/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaymission/UO71/centralhall) +"qf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/door_control{id = "awaydorm4"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qg" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"qi" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/door_control{id = "awaydorm6"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qk" = (/obj/machinery/light/small{dir = 1},/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"ql" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"qm" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"qn" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"qo" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/centralhall) +"qp" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"qq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/glass_engineering{name = "SMES Room"; req_access_txt = "271"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/eng) +"qr" = (/obj/machinery/meter{frequency = 1443; id = "UO71_mair_out_meter"; layer = 3.3; name = "Mixed Air Tank Out"},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/wall,/area/awaymission/UO71/eng) +"qs" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter{frequency = 1443; id = "UO71_mair_in_meter"; layer = 3.3; name = "Mixed Air Tank In"},/turf/simulated/wall,/area/awaymission/UO71/eng) +"qt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/science) +"qu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/awaymission/UO71/science) +"qv" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/awaymission/UO71/science) +"qw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"qx" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"qy" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/loot) +"qz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/obj/machinery/light/small{dir = 4},/obj/item/weapon/stock_parts/cell/bluespace,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/loot) +"qA" = (/obj/structure/table,/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/hand_labeler,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitecorner"},/area/awaymission/UO71/medical) +"qB" = (/obj/machinery/vending/medical{req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"qC" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"qD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/l3closet/general,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"qE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/centralhall) +"qF" = (/obj/machinery/door/poddoor{id_tag = "UO71_Bridge"; name = "Bridge Lockdown Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qG" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qH" = (/obj/machinery/light/small{dir = 4},/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qI" = (/obj/machinery/light/small{dir = 8},/obj/structure/dresser,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qJ" = (/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qK" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"qL" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"qM" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"qN" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/eng) +"qO" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/eng) +"qP" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/computer/monitor{name = "primary power monitoring console"},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"qQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"qR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"qS" = (/obj/structure/closet/secure_closet{icon_broken = "secureengbroken"; icon_closed = "secureeng"; icon_locked = "secureeng1"; icon_off = "secureengoff"; icon_opened = "secureengopen"; icon_state = "secureeng1"; locked = 1; name = "engineer's locker"; req_access_txt = "271"},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/backpack/satchel_eng,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"qT" = (/obj/structure/window/reinforced{dir = 4; layer = 2.9},/obj/structure/closet/secure_closet/engineering_personal{req_access = list(201)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"qU" = (/obj/machinery/camera{c_tag = "Atmospherics"; dir = 2; network = list("UO71")},/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/item/device/multitool,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/eng) +"qV" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "UO71_air_in"; name = "Mixed Air Supply Control"; output_tag = "UO71_air_out"; pressure_setting = 2000; sensors = list("UO71_air_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "arrival"; tag = "icon-arrival (NORTHWEST)"},/area/awaymission/UO71/eng) +"qW" = (/obj/machinery/atmospherics/trinary/mixer{dir = 1; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; req_access = null; target_pressure = 4500},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "arrival"},/area/awaymission/UO71/eng) +"qX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"qY" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"qZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"ra" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm/monitor/server{dir = 4; pixel_x = -22; pixel_y = 0},/obj/machinery/r_n_d/server/core{id_with_download_string = "3"; id_with_upload_string = "3"; req_access = null},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/awaymission/UO71/science) +"rb" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/awaymission/UO71/science) +"rc" = (/obj/machinery/door/airlock/glass_command{name = "Server Room"; req_access_txt = "271"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"rd" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"re" = (/obj/machinery/light/small{dir = 4},/obj/structure/stool/bed/chair/office/light,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"rf" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/gateway) +"rg" = (/obj/item/borg/upgrade/vtec,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/loot) +"rh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/turf/simulated/wall,/area/awaymission/UO71/medical) +"ri" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"rj" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"rk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/science) +"rl" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"rm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/bridge) +"rn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/bridge) +"ro" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"rp" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"rq" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/item/weapon/pen,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"rr" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"rs" = (/obj/structure/stool/bed/chair/wood/normal{dir = 8},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"rt" = (/obj/machinery/light/small{dir = 1},/obj/structure/toilet{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"ru" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"rv" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"rw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"rx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"ry" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/centralhall) +"rz" = (/obj/machinery/light/small{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/eng) +"rA" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"rB" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rC" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"rD" = (/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/structure/dispenser{pixel_x = -1},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"rE" = (/obj/machinery/light/small{dir = 1},/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/newscaster{pixel_y = 32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"rF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"rG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/eng) +"rH" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 8; locked = 1; name = "UO71 Engineering APC"; pixel_x = -25; pixel_y = 0; req_access = list(201); start_charge = 100},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rI" = (/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"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 6; initialize_directions = 6; level = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rJ" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Air to Distro"; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rL" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"rM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"rN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"rO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"rP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/science) +"rQ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/awaymission/UO71/science) +"rR" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"rS" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/science) +"rT" = (/obj/effect/decal/cleanable/dirt,/obj/item/borg/upgrade/syndicate,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/loot) +"rU" = (/obj/mecha/medical/odysseus,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaymission/UO71/loot) +"rV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"rW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"rX" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"rY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"rZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/science) +"sa" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/bridge) +"sb" = (/obj/structure/table,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"sc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/science) +"sd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"se" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/bridge) +"sf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"sg" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"sh" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/centralhall) +"si" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/machinery/camera{c_tag = "Engineering Hallway"; dir = 4; network = list("UO71")},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"sj" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"sk" = (/obj/structure/disposalpipe/segment{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/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"sl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/centralhall) +"sm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/centralhall) +"sn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/centralhall) +"so" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/centralhall) +"sp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaymission/UO71/centralhall) +"sq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/centralhall) +"sr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/centralhall) +"ss" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Reception"; req_access_txt = "0"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"st" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"su" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"sx" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor/shutters/preopen{id_tag = "UO71_EngineeringOffice"; name = "Privacy Shutters"},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"sz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"sB" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/door/poddoor/preopen{id_tag = "UO71_Engineering"; layer = 2.9; name = "engineering security door"},/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sC" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; level = 2},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"sD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/meter{frequency = 1443; id = "UO71_dloop_atm_meter"; name = "Distribution Loop"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sE" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sF" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Distro"; on = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sG" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sH" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sI" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"sJ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/eng) +"sK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/meter{layer = 3.3},/turf/simulated/wall,/area/awaymission/UO71/eng) +"sL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "UO71_waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaymission/UO71/eng) +"sM" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaymission/UO71/eng) +"sN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/loot) +"sO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 8; locked = 1; name = "UO71 Medical APC"; pixel_x = -25; pixel_y = 0; req_access = list(201); start_charge = 100},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"sP" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"sQ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"sR" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitecorner"},/area/awaymission/UO71/medical) +"sS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"sT" = (/mob/living/simple_animal/hostile/poison/terror_spider/purple,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"sU" = (/obj/machinery/shower{dir = 4},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"sV" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"sW" = (/obj/machinery/shower{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"sX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"sY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "cautioncorner"},/area/awaymission/UO71/centralhall) +"sZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "cautioncorner"},/area/awaymission/UO71/centralhall) +"ta" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "cautioncorner"},/area/awaymission/UO71/centralhall) +"tb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "cautioncorner"},/area/awaymission/UO71/centralhall) +"tc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/centralhall) +"td" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/centralhall) +"te" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Reception"; req_access_txt = "0"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"th" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"ti" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor/shutters/preopen{id_tag = "UO71_EngineeringOffice"; name = "Privacy Shutters"},/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"tk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tl" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 14; tag = "icon-manifold-r-f (NORTH)"},/obj/structure/table,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"tm" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Waste In"; on = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"tn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"to" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tp" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tq" = (/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Mix to Filter"; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 6; initialize_directions = 6},/obj/item/weapon/paper/terrorspiders7,/obj/effect/gibspawner,/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ts" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tt" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tu" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tv" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "UO71_waste_in"; name = "Gas Mix Tank Control"; output_tag = "UO71_waste_out"; sensors = list("UO71_waste_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/eng) +"tw" = (/obj/machinery/meter{layer = 3.3},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/wall,/area/awaymission/UO71/eng) +"tx" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "UO71_waste_in"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaymission/UO71/eng) +"ty" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "UO71_waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaymission/UO71/eng) +"tz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"tA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"tB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/science) +"tC" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/awaymission/UO71/science) +"tD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/science) +"tE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/medical) +"tF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"tG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"tH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/medical) +"tI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/medical) +"tK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"tL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{id_tag = "UO71_Armory"; name = "Armory Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"tM" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access_txt = "271"},/obj/machinery/door/poddoor{id_tag = "UO71_Bridge"; name = "Bridge Lockdown Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"tN" = (/obj/machinery/shower{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"tO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"tP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"tQ" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 2},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "arrival"},/area/awaymission/UO71/eng) +"tR" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 2},/obj/structure/window/reinforced{dir = 4; layer = 2.9},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "escape"; tag = "icon-escape (NORTH)"},/area/awaymission/UO71/eng) +"tS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"tT" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"tU" = (/obj/machinery/computer/security{network = list("UO71")},/obj/machinery/door_control{desc = "A remote control-switch for the security privacy shutters."; id = "UO71_EngineeringOffice"; name = "Privacy Shutters"; pixel_x = -24; pixel_y = 6; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"tV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"tX" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor/preopen{id_tag = "UO71_Engineering"; layer = 2.9; name = "engineering security door"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tY" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"tZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ua" = (/obj/machinery/meter{frequency = 1443; id = "UO71_wloop_atm_meter"; name = "Waste Loop"},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ub" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"uc" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "N2 Outlet Pump"; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ud" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "O2 Outlet Pump"; on = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ue" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Unfiltered to Mix"; on = 1},/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"uf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/wall/rust,/area/awaymission/UO71/science) +"ug" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/engineering{name = "Engineering Maintenance"; req_access_txt = "271"},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"uh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"ui" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"uj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"uk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/science) +"ul" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Research Maintenance"; req_access_txt = "271"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"um" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"un" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{tag = "icon-pipe-j1 (EAST)"; icon_state = "pipe-j1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"uo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Research Maintenance"; req_access_txt = "271"},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/medical) +"up" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/science) +"uq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"us" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/awaymission/UO71/science) +"ut" = (/turf/simulated/wall,/area/awaymission/UO71/outside) +"uu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; icon_state = "weld"; on = 1; pressure_checks = 1; welded = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"uv" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"uw" = (/obj/structure/table,/obj/item/device/radio/off,/obj/item/weapon/folder/red,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"ux" = (/obj/machinery/shower{dir = 1; pixel_y = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"uy" = (/obj/machinery/shower{dir = 1; pixel_y = 0},/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/centralhall) +"uz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaymission/UO71/centralhall) +"uA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaymission/UO71/centralhall) +"uB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/wall,/area/awaymission/UO71/eng) +"uC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/turf/simulated/wall,/area/awaymission/UO71/eng) +"uD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/engineering{name = "Engineering Foyer"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"uE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"uF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"uG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "UO71_Engineering"; name = "Engineering Lockdown"; pixel_x = 24; pixel_y = 6; req_access_txt = "271"},/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "271"},/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"uH" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"uI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "External to Filter"; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"uJ" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Air to External"; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"uK" = (/obj/machinery/alarm/monitor{dir = 1; frequency = 1439; locked = 0; pixel_y = -23; req_access = null},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5; initialize_directions = 5},/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"uL" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 2; on = 1; req_access = null},/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"uM" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "UO71_n2_in"; name = "Nitrogen Supply Control"; output_tag = "UO71_n2_out"; sensors = list("UO71_n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/eng) +"uN" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"uO" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 1; on = 1; req_access = null},/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "blue"},/area/awaymission/UO71/eng) +"uP" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "UO71_o2_in"; name = "Oxygen Supply Control"; output_tag = "UO71_o2_out"; sensors = list("UO71_o2_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "blue"},/area/awaymission/UO71/eng) +"uQ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaymission/UO71/eng) +"uR" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating{dir = 9; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"uS" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plating{dir = 1; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"uT" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/obj/item/weapon/reagent_containers/food/pill/methamphetamine,/obj/item/weapon/storage/toolbox/syndicate,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"uU" = (/obj/machinery/door/airlock/medical{name = "Medical"; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"uV" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/UO71/medical) +"uW" = (/turf/simulated/floor/plating/airless/asteroid,/area/awaymission/UO71/outside) +"uX" = (/obj/structure/closet,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/centralhall) +"uY" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"uZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("UO71_n2_sensor" = "Nitrogen", "UO71_o2_sensor" = "Oxygen", "UO71_waste_sensor" = "Gas Mix Tank")},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "caution"},/area/awaymission/UO71/eng) +"va" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"vb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"vc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"vd" = (/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "271"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"ve" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/engineering{name = "Engineering"; req_access_txt = "271"},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"vf" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/wall,/area/awaymission/UO71/eng) +"vg" = (/obj/machinery/meter{layer = 3.3},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/wall,/area/awaymission/UO71/eng) +"vh" = (/obj/machinery/meter{layer = 3.3},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/wall,/area/awaymission/UO71/eng) +"vi" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{dir = 8; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"vj" = (/obj/machinery/atmospherics/binary/valve{dir = 2},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) +"vk" = (/obj/machinery/atmospherics/binary/valve{dir = 2},/turf/simulated/floor/plating{dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"vl" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vm" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"vn" = (/obj/machinery/optable,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"vo" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"vp" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"vq" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"vr" = (/obj/structure/stool/bed/chair{tag = "icon-chair (WEST)"; icon_state = "chair"; dir = 8},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaymission/UO71/centralhall) +"vs" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"vt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaymission/UO71/centralhall) +"vu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaymission/UO71/centralhall) +"vv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("UO71_mair_in_meter" = "Mixed Air In", "UO71_air_sensor" = "Mixed Air Supply Tank", "UO71_mair_out_meter" = "Mixed Air Out", "UO71_dloop_atm_meter" = "Distribution Loop", "UO71_wloop_atm_meter" = "Waste Loop")},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "caution"},/area/awaymission/UO71/eng) +"vw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"vx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"vy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm/monitor{frequency = 1439; locked = 0; pixel_y = 23; req_access = null},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"vz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"vA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/eng) +"vB" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id_tag = "UO71_Engineering"; name = "engineering security door"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "delivery"; name = "floor"},/area/awaymission/UO71/eng) +"vC" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor/preopen{id_tag = "UO71_Engineering"; name = "engineering security door"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "delivery"; name = "floor"},/area/awaymission/UO71/eng) +"vD" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id_tag = "UO71_Engineering"; name = "engineering security door"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "delivery"; name = "floor"},/area/awaymission/UO71/eng) +"vE" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1441; id = "UO71_n2_in"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 10000; oxygen = 0},/area/awaymission/UO71/eng) +"vF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; frequency = 1441; id_tag = "UO71_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 = 10000; oxygen = 0},/area/awaymission/UO71/eng) +"vG" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1441; id = "UO71_o2_in"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/UO71/eng) +"vH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; frequency = 1441; id_tag = "UO71_o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/UO71/eng) +"vI" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{dir = 10; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"vJ" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"vK" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{dir = 6; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/science) +"vL" = (/obj/structure/table,/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vM" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"vN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"vO" = (/obj/structure/sign/deathsposal,/turf/simulated/wall/rust,/area/awaymission/UO71/medical) +"vP" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vQ" = (/obj/machinery/computer/monitor,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vR" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control-switch for heavy lockdown doors."; id = "UO71_Containment"; name = "Science Containment Doors"; pixel_x = 0; pixel_y = -2; req_access_txt = "271"; wires = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vS" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control-switch for heavy lockdown doors."; id = "UO71_Queen"; name = "Terror Queen Containment Doors"; pixel_x = 0; pixel_y = -2; req_access_txt = "271"; wires = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vT" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control-switch for heavy lockdown doors."; id = "UO71_Armory"; name = "Armory Doors"; pixel_x = 0; pixel_y = -2; req_access_txt = "271"; wires = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"vU" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/awaymission/UO71/outside) +"vV" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"vW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/stack/rods,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"vX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaymission/UO71/centralhall) +"vY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/centralhall) +"vZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "brown"},/area/awaymission/UO71/centralhall) +"wa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "brown"},/area/awaymission/UO71/centralhall) +"wb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/atmos_alert,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "caution"},/area/awaymission/UO71/eng) +"wc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"we" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"wh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"wi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/airlock/engineering{name = "Engineering"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wk" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"wl" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "UO71_n2_sensor"},/obj/machinery/light/small,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 10000; oxygen = 0},/area/awaymission/UO71/eng) +"wm" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 10000; oxygen = 0},/area/awaymission/UO71/eng) +"wn" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "UO71_o2_sensor"},/obj/machinery/light/small,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/UO71/eng) +"wo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/UO71/eng) +"wp" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 4},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"wq" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4; initialize_directions = 11; level = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/medical) +"wr" = (/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"ws" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"wt" = (/obj/structure/table,/obj/item/weapon/paper/terrorspiders2,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"wu" = (/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"wv" = (/turf/simulated/wall,/area/awaymission/UO71/mining) +"ww" = (/obj/machinery/door/airlock/maintenance{name = "Mining Maintenance"; req_access_txt = "271"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wx" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_mining{name = "Mining Foyer"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wy" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_mining{name = "Mining Foyer"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "caution"; tag = "icon-caution (SOUTHWEST)"},/area/awaymission/UO71/eng) +"wA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/noticeboard{dir = 1; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"wB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"wC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"wE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/vending/engivend{req_access_txt = "0"},/obj/machinery/camera{c_tag = "Engineering Foyer"; dir = 1; network = list("UO71")},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/eng) +"wF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/vending/tool,/obj/structure/sign/poster{icon_state = "poster5_legit"; pixel_x = 0; pixel_y = -32; serial_number = 21; subtype = 1},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaymission/UO71/eng) +"wG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/t_scanner,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaymission/UO71/eng) +"wH" = (/obj/structure/closet/emcloset,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"wI" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"wJ" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaymission/UO71/eng) +"wK" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen{name = "Canister: \[O2] (CRYO)"},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitecorner"},/area/awaymission/UO71/medical) +"wL" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"wM" = (/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"wN" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"wO" = (/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"wP" = (/obj/structure/stool/bed,/obj/item/weapon/storage/box/gloves{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitecorner"},/area/awaymission/UO71/medical) +"wQ" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"wR" = (/obj/machinery/light,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"wS" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) +"wT" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wU" = (/obj/machinery/light/small{dir = 1},/obj/structure/stool/bed/chair/wood/normal{dir = 8},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wV" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"wW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/mining) +"wX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/mining) +"wY" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"xa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/obj/structure/cable,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xb" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"xc" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/eng) +"xd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "271"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xe" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door_control{id = "awaydorm8"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock{id_tag = "awaydorm8"; name = "Mining Dorm 1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; tag = "icon-manifold-b-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = -32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xo" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xq" = (/obj/structure/toilet{pixel_y = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/eng) +"xr" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"xs" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/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{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"xv" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xw" = (/obj/structure/stool/bed/chair/office,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xx" = (/mob/living/simple_animal/hostile/poison/terror_spider/white,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xz" = (/obj/machinery/door/airlock{name = "Private Restroom"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/eng) +"xA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small,/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaymission/UO71/eng) +"xB" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door_control{id = "awaydorm9"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock{id_tag = "awaydorm9"; name = "Mining Dorm 2"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xE" = (/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{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xF" = (/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{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"xG" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xH" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xI" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/effect/decal/cleanable/dirt,/obj/item/stack/sheet/plasteel{amount = 50},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light/small{dir = 4},/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xK" = (/obj/machinery/light/small,/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/closet/secure_closet/miner{req_access = list(201)},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/mining) +"xN" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{cell_type = 15000; dir = 2; locked = 0; name = "UO71 Mining APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 1},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet/secure_closet/engineering_personal{icon_broken = "miningsecbroken"; icon_closed = "miningsec"; icon_locked = "miningsec1"; icon_off = "miningsecoff"; icon_opened = "miningsecopen"; icon_state = "miningsec"; locked = 0; name = "miner's equipment"; req_access = list(201)},/obj/item/weapon/storage/backpack/satchel_eng,/obj/item/clothing/gloves/fingerless,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaymission/UO71/mining) +"xO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "brown"},/area/awaymission/UO71/mining) +"xP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "brown"},/area/awaymission/UO71/mining) +"xQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/cigarettes{pixel_x = -2},/obj/item/weapon/lighter/zippo{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xR" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/newscaster{pixel_y = -28},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xU" = (/obj/structure/bookcase/manuals/engineering,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xV" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/mining{name = "Processing Area"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xW" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/mining{name = "Processing Area"; req_access_txt = "271"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"xX" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xY" = (/obj/machinery/light/small,/obj/machinery/computer/atmos_alert,/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "UO71_Engineering"; name = "Engineering Lockdown"; pixel_x = -6; pixel_y = -24; req_access_txt = "271"},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "UO71_Secure Storage"; name = "Engineering Secure Storage"; pixel_x = 6; pixel_y = -24; req_access_txt = "271"},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"xZ" = (/obj/machinery/computer/monitor{name = "primary power monitoring console"},/obj/structure/cable,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaymission/UO71/eng) +"ya" = (/obj/machinery/conveyor{dir = 2; id = "UO71_mining"},/turf/simulated/floor/plating{dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yb" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 4; output_dir = 8},/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yc" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "loadingarea"},/area/awaymission/UO71/mining) +"yd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"ye" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm/monitor{dir = 8; frequency = 1439; locked = 0; pixel_x = 23; pixel_y = 0; req_access = null},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yf" = (/obj/machinery/conveyor{dir = 2; id = "UO71_mining"},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/plating{dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yg" = (/obj/structure/grille,/obj/structure/window/full/basic,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yh" = (/obj/machinery/conveyor_switch/oneway{id = "UO71_mining"; name = "mining conveyor"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yi" = (/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{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yj" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yk" = (/obj/machinery/suit_storage_unit/mining,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yl" = (/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/device/radio/off,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/gun/energy/kinetic_accelerator/super,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"ym" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yn" = (/obj/machinery/mineral/processing_unit_console{machinedir = 8},/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"yo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Mining"; dir = 4; network = list("UO71")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yq" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"ys" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yt" = (/obj/machinery/light/small{dir = 4},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/gun/energy/kinetic_accelerator/super,/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaymission/UO71/mining) +"yu" = (/obj/machinery/conveyor{dir = 2; id = "UO71_mining"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yv" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_mining{name = "Mining EVA"; req_access_txt = "271"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yB" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yC" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 2},/turf/simulated/wall,/area/awaymission/UO71/mining) +"yD" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 26},/obj/item/stack/sheet/glass{amount = 19},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yG" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/mech_bay_recharge_floor,/area/awaymission/UO71/mining) +"yI" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port (WEST)"; icon_state = "recharge_port"; dir = 8},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/UO71/mining) +"yJ" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 8; output_dir = 4},/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) +"yK" = (/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "loadingarea"},/area/awaymission/UO71/mining) +"yL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/stack/sheet/mineral/plasma{amount = 6},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/mining) +"yN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "271"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yO" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) +"yP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaymission/UO71/mining) +"yS" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yT" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yV" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yW" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) +"yX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER - LETHAL BIOHAZARDS WITHIN'"; name = "\improper CONTAINMENT AREA"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"yY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER - LETHAL BIOHAZARDS WITHIN'"; name = "\improper CONTAINMENT AREA"},/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"yZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"za" = (/obj/structure/sign/biohazard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"zb" = (/obj/structure/sign/biohazard,/turf/simulated/wall/rust,/area/awaymission/UO71/mining) +"zc" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/outside) +"zd" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/queen) +"ze" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/awaymission/UO71/queen) +"zf" = (/obj/machinery/door/poddoor{id_tag = "UO71_Queen"; name = "Caves Lockdown Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zg" = (/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/queen) +"zh" = (/turf/simulated/wall/rust,/area/awaymission/UO71/queen) +"zi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/rust,/area/awaymission/UO71/queen) +"zj" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zk" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zl" = (/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "271"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zm" = (/obj/structure/dresser,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zo" = (/obj/structure/stool/bed/chair/wood/normal,/obj/item/clothing/shoes/syndigaloshes,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zp" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zq" = (/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zr" = (/obj/effect/glowshroom/single,/turf/simulated/floor/plating/airless/asteroid,/area/awaymission/UO71/outside) +"zs" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/terrorspiders3,/obj/item/weapon/pen/edagger,/obj/item/stack/telecrystal{amount = 10},/obj/item/device/chameleon,/obj/item/weapon/reagent_containers/glass/bottle/traitor,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zt" = (/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zu" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zv" = (/obj/machinery/door/airlock/external{name = "Strange Airlock"; req_access_txt = "271"},/obj/machinery/door/poddoor{id_tag = "UO71_Caves"; name = "Caves Lockdown Door"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaymission/UO71/loot) +"zw" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zx" = (/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zy" = (/turf/simulated/wall,/area/awaymission/UO71/queen) +"zz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaymission/UO71/queen) +"zA" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zB" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zC" = (/obj/effect/spider/cocoon{icon_state = "cocoon_large1"},/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zD" = (/turf/simulated/floor/plating/airless/asteroid,/area/awaymission/UO71/queen) +"zE" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "271"},/turf/simulated/wall/rust,/area/awaymission/UO71/queen) +"zF" = (/mob/living/simple_animal/hostile/poison/terror_spider/green,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zG" = (/obj/machinery/door/poddoor{id_tag = "UO71_Caves"; name = "Caves Lockdown Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "weld"; id_tag = "UO71_waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0; welded = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zK" = (/obj/effect/spider/terrorweb,/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spider/terrorweb,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/mineral/random/labormineral,/area/awaymission/UO71/queen) +"zN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zO" = (/obj/structure/table,/obj/machinery/light,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/queen) +"zP" = (/turf/simulated/wall/mineral/wood,/area/awaymission/UO71/queen) +"zQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/mineral/wood,/area/awaymission/UO71/queen) +"zR" = (/obj/machinery/door/poddoor{id_tag = "UO71_Queen"; name = "Caves Lockdown Door"},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zS" = (/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zU" = (/obj/structure/table/holotable/wood,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zV" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zW" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zY" = (/obj/structure/table/holotable/wood,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"zZ" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Aa" = (/obj/structure/stool/bed/chair/wood/normal{dir = 8},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ab" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ac" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ad" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ae" = (/mob/living/simple_animal/hostile/poison/terror_spider/queen,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Af" = (/obj/structure/table/holotable/wood,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ag" = (/obj/structure/stool/bed/chair/wood/normal{dir = 8},/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ah" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/UO71/queen) +"Ai" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/wall,/area/awaymission/UO71/science) +"Aj" = (/obj/structure/table,/obj/item/weapon/defibrillator,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitecorner"},/area/awaymission/UO71/medical) +"Ak" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) +"Al" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{id_tag = "UO71_Start"; name = "UO71 Sealed Facility"},/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Gateway Ready Room"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababacadacadadadadacadacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababadaeafagahahahahaiajakacababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababacalafahahahamamahahanadababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababacacahaoaqaqaqaqapahacadacacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababacasatauavawaxayazacaAaBacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababacahatauavavaDayahacaEaFacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababadadacacacaGaHaIaIaIaIaJahaKaLaMacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababacacacaNaOaNadaPaQaRaSaTaRaUahacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababadaVaWaXaYaZbaasbbacacacacaUbcacbdbeacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababadaVacbfacbgacahbhbibjbkblbmahadbnaFacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababacaVacboadbpadafbqahbrbsambtahbubnbvacababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababacbwadbxbybzbzbybAbzbBbCbybybzbDbybybEababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababadbFbGbHbIbJbKbLbMbNbObPbNbQbRbSbTbUbVababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababadacacacbWbXadbYacbWadasahacbYacbVadbZbWababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaccacbccbWbZadcdcecfacajahadcgchciaccjbWacadacadacadadacacadadadacacababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababacckbFclcmcnaccocpcqacafahaccrcpcsadbZctcucucucucucucvcwcxcyczczcAcBababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababadcCcDcCcEbXadaccFacadcGcGacaccHacadcIbTcJcKcKcKcLcKcLcLcMbJbLbJcNbWababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaccObTcPbMcQaWafcRamahahahcSahbscTacacadcUaccVcWcXcYcZadbVacadacbXbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababacbXacacbWadaddadbdcahahahahdddedfaqaqdgdhdidjdkdldkdmdndodpdqacdrbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababadbXacdsdtdudvahahdwdxdxdxdydzdAdBdCdDdEbsdFamdFahdFahdFdGdfdHaccjbWababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaddIdJdKdLdMaqdNahatdOdOdOdOdPdQdfdRahahdSdFahdFahdFahdFdTdfdUadbZbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababacacacdVdWdXdYdZaheadOebecdOeddQdfaqaqahahdFahdFahdFahdFeedfefadbZbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababadegbreheidZahejdOecekdOeddQeldpemenahdFeodFahdFahdFdQepeqacbZbWababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaderesetaqeuahevdOdOdOdOaydQewexemeyezezezeyeAeBeCeDeEeFadadbZbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaccUbVadacasaheGeHeHeHeHeIdQeJacacacacacacacadadeKeLeMeNeOePeQbVababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaceReSeTeUeVeVbBeWeVeVeVeXeYeZacabababababababfafbfcfdfefbfffgfhababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababadfifjbvacfkahahbrflfmaffnfofpadababababababababfbfqfqfrfbfsftfufvabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababadadacacadadaccGfwacacacacacadadababababababababfefxfqfqfyfffzfAfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababfbfBfCfbababababababababababababababfefDfqfEfbfFfGfHfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababfbfIfJfbababababababababababababababfefefKfbfbfefbftfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfLfLfLfLfMfLfLabababababababababababababababababababfNfNfOfOabababfPfPfPfPfPfPfPfPfPababfbfQfBfbababababababababababababababfbfRfSfTfUfVfefWfXabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMfYjdfZjdfZfLfLfMfLababababgagagagagagagagagafNfNfOfOgbgcfOfOababfPgdgdgegfgdgdgdfPababfbfIfIfbabababababfbfbfbfbfbfbfbfefbfbggggggggghfegifXabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMfYgjgkglfYgmgngofLfMfLfMfMgagpgpgpgqgpgpgpgafOgrgsgtgugvgwfNababfPgdgdgegxgdgdgdfPababfegygzfbabababababfbgAgBgCgDgEgFgGgHfbgIgJgKgggLfeftfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfLfZgMgNgOfZgmgPgQfMgRgSgTfLgagpgpgpgUgpgpgpgafNgVgWgXgYgZhafNababfPgdgdgdgdgdgegdfPababfbhbfBfbabababababfbhchdgAhehfhghhhhhihjhkhlhmhnhohpfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfLfZhqhrhsfZgmhthufMhvhwhxfLgagpgpgpgpgpgpgpgafOhyhzhAgYhBhCfNababfPhDgegdgegdgdhEfPababfbhFfBfbabababababfbhGhHgAhIhJgAgAhKfehLgKhMgghNfbfWfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMhOhPhQhRhPgmhthSfLfLhTfLfLgahUgphVgpgphVhWgafOhXhYhZiaibicfNababidiegdifgdgdiggefPababfbhFfQfbabababababfbihhdgAhIiigAgAijikilimgggginfeiofhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMipiqiraritiuiviwixiyiziAiBiCiDgagaiEiEgaiFgafNiGiHgufOfNfNfOababiIfPfPfPiJiJiKiLiLiMiMiNiOfQfeabababababfbiPgAijhehJgAgAiQfbiRiSggfSiTfbiUfhabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMiViWiXiYiZjajcjckAjbjffMababababjgjhjhjgjifOfOjjjkgvfOabababababjlababjmjnjnjmababababfejojpfefeababababfejqjrgAijhJjsjtjufbfbjvjwjwjxjxjyjzabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfLjAjBirjCjDfLfLfMfMjEjFfMababababjGjHjHjGjifOfOjIjJjKfOabababababjlababjGjLjLjGababababfbjMfIjNfefbfbfbfefejOjPhdjQhehegAgAjRjSjTjUjVjWjXjYfeabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababfMfLfMjZkBfLfLkakbfMkckdfLfOfOfOfOkekfkgkekhfNkikjkkklfOfOfOfOfOfOkmfOfOknkokpkefOfOfNfOfOkqfIfIkrfIfBfIfIjpgAgAgAksijgAktkukukvkwfbkxkykzfefbabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababfLaCirrffLkCkDkEixkFkGkHkIkJkKkLkMkJkNkOkPkQkRkSkTkUkJkWkNkJkJkXkYkZlalblcldlefOlflglhfOliljljljlkljlllmjpgAijgAlnlolololplqlrlsfbfbfefefeababababababababababababababltltltltltabababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababfLlulvlwjelwlylzAllBkVlDlElElFlElGlElHlxlIlJlKlLlMlNlClPlQlRlSlTlSlSlSlUguldlelVgugugulVlWlXfBlYfbfefbfbfefefbfbfblZmahdmbfbjomcfeababababababababababababababababababltmdmemfltabababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababfMmgmhmiirjDjDlOfLmlmjfMfNfOfOfOfNfOfOmkfOfOmompfOfOfOmqfOfOfOfNmrmrmrmrmsldlefOmtmumvfOmwfCmxmyfbmzmAmzfemBmCmDfefefbfbfefbmEmFfeababababababababababababababababababltmGmHmfltabababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababfLmmmJmImLmMmNmOfMfLfLfLabfOgugumPfOmQmKmPfNmRmSfOmTmUmVmWmXmYfOmZnanbmrmslbfOfOfNfOfOfNncndfefefbnenfngfbnhninjfenknlnmnnfbnomFfbabababababababababababababababababnpltltnqnrnrnpababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababfLfLfMfMfLfLfMfMfLababababfOgugugufOnsmKntfOmRnufOnvnwnxnymXmXfNnznAnBmrmsnCfNnDnEnFnFnGnHnInJnKfbfXnLfbfefXnMfbfbnNfBnOnPnQnRnSfbabababababababababababababababababnTnUnVnVnVnWnpababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababfOnXnYgumnguscnZfOkmoafOobocodoeofogfNohoiojmrmslbfNoaokolomomonooopoqorosotouovowotoxoyozoAoBoCoDoEoFfbabababababababababababababababababnToGoHoIoHoJnpnpnpnpabababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababfOoKoLgufOoMoNoOfOkmoPfOoQocoRoSoToUfNoVoWoXoYmslbfOnumRfbfbfboZpaljpbpcpdpepfpgpdphpipjpkpeplpmfbpnpofeabababababababababababababababababnppppqprpsptnppupvnpabababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababfOfOfOfOfOfOfOfOfNpwpxfOpypzmXpAmXoTfOfOpBkmfOmslafNpCmRfbfbfbpDpEfIpFfbpGfbfhfepHfbfbfepIfbfbpJfbpKmFfbabababababababababababababababababnppLpMpNpMpOnTpPpQnpabababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfNpRjifOfOfOpSfOpTpUpTpTpVpWpXpYpZqaoakmfbfbfbqbqcqdqefeqfqgqhqiqjfeqkqlqmqnfeqofehFmFfbababababababababnTnTnpnpnTababababnpqpqpqqqpqpnpqrqsnpnpnpabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOqtkhquqvmrqwqxpTqyqzpTpVqAqBqCqDqaoamRfbfbfbqEfbqFqFfbqGqHfbqIqJfbfbfbqKqLfeqMfbhFmFfbababababababababnTqNqOqOnpnTnTnTnpnpqPqQqRqSqTqUqVqWqXqYnpabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOqZjirarbrcrdrepTqyrgpTrhriqCqCrjqarkrlrmrmrmrnrmrorpferqmzfbrrrsfbrtruqmrvfbrwfbrxryfbfbfbfbfefbfbfbfbnprzrArBrCnTrDrErFrGrHrIrJrKrLrLrMrNrOqYnpnpnTnTababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfNrPkhqurQmrrRrSpTrTrUpTpVrVrWrXrYqarZmRsavLvlsdsesfrpfefefefefbfefbfefesgfbfbshfesisjskslsmsnsoslspsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsHsIsIsJsKsLsMnTababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfNqZkhfOfOfOfNfNpTpTsNpTpVsOsPsQsRqaoamRsarprpsSsarpsTfbabababababfbsUsVqmsWferwfejMsXnQsYsZsYtasYtbtctdtetftftgthtitjtktlsBtmtntotptqtrtstttutvtwtxtynpababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfNtztAnEtBnFnFtCtDAitDtDtEtFtGtHtItItKkmsasasatLsatMtMsasasasaababfbtNqmqmsWferwfbtOtPfefbfbfbfefbfbfbfbnptQtRtStTnptUtVtWtXtYtZtuuaubucrBrBuduenpnpnTnTababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOufugolomomuhuiujuqukujulumunuoupujisusutsarpuuuvrprpuvuwsbsaababfefeuxuyfefeqMfbuzuAfbababababababababnTuBuCuDnpnpuEuFuGnpuHuIuJuKuLuMuNuOuPuQnTabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfNuRuSuTfOfOfOfOqapVpXpXqauUuVpXfNfNfNfNabsarprprprprprpsbrpsaababuWfefefefeuXrwuYuzuAfbababababababababnTuZvavbvcnpqpvdqpnpnpvevfnpvgvhnTvgvhnTnTabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOvivjvkfOabababqaAjvmvnvoqCvppXabababababsarprprprprprprprpsaababuWuWuWvqvrvsvtfbvuuAfbababababababababnpvvvwvxtfvytftkvzvAvBvCvDnpvEvFnpvGvHnpababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOvIvJvKfNabababqaAkvMqCqCqCvNvOabababababsavPsbvQrprpvRvSvTsaababuWuWvUvVvWvXvYfevZwafbababababababababnpwbrBwcwdwewfwgwhwiwjqRwknpwlwmnpwnwonpababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababfOfOfNfNfOabababqawpwqqCqCqCwrqaabababababsarpwsrprprpwtwsrpsaabababwuwvwvwvwuwwwvwxwywvababababababababnTwzwAwBwCwDwEwFwGrGwHwIwJnpnpnpnpnpnpnpababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababqawKwLwMwNwOwPqaabababababsawQrpwRwSrpwRrpwQsaabababwuwTwUwVwWwXwYwZxawvababababababababnTnTnpxbxcxdnTnpnTnTnpnpnTnTababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababqaqaqaqaqaqaqaqaabababababsasasasasasasasasasaabababwuxexfxgxhxixjxkxlwvabababababababababnpxmxnxoxpnpxqnpabababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwvwuwuwuxrxsxtxuwvabababababababababnpxvxwxxxyxzxAnTabababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvxBxfxCxDxjxExkxFwvabababababababababnpxGxHxIxJnpnpnTabababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwTxKxLwWxMxNxOxPwuabababababababababnpxQxRxSxTxUnpababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwuwvwvwvwvwuxVxWwuabababababababababnpxXxYxZnpnpnTababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyaybycydyewvwvwuwuwuabababababnpnTnTnpnpababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyfygyhydyiyjykykylwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvymynyoxkypyqyrysytwvababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyuygyvywyxyyyzyAyBwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyayCyDyEyFyjyGyHyIwvababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyayJyKyLyMwuwuwvwuwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwvwuyjyNyOwuwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyPyQyRySwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyTyLyTyTwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwuyUyTyVwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyWyTyTwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyLyTyTwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyXyTyYwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyZyTwuwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyZyTwuwuabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuzayTzbwuabababababababababababababababababababababababababababababababababababababababababababababababab +zczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczczdzdzdzezfzdzdzdzdzdzdzdzdzczczczczczczczczczczczczcpTpTpTpTpTzczczczczczczczczczczczczczczczczczczczczczczczc +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababzgzgzhzizjzhzhzgzgzgzgzgzgabababababababababababababpTzkzlzmpTabababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababzgzgzhznzjzjzhzgzgzgzgzgzgabababababababababababababpTzozpzqpTababababababzruWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWabababababzgzgzhznzjzjzhzgzgzgzgzgzgabababababababababababababpTzsztztpTababzruWuWuWuWzrabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWabababuWuWuWababababzgzgzhznzjzuzhzgzgzgzgzgzgabababababababababababababpTpTzvpTpTabuWuWuWuWuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWababzgzgzhznzwzjzhzgzgzgzgzgzgababababababababababababuWuWuWuWabababuWuWabuWuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababuWzruWuWuWababababababababababuWuWuWabzgzgzhznzjzxzhzgzgzgzgzgzgabuWuWuWuWuWuWabababababuWababababuWzruWabzruWuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababuWababababababababababababababababababababababababababuWuWuWuWababababababababababababuWuWuWzyzyzyzzzAzyzyzyzyzgzgzgzguWuWabababuWuWuWabababuWuWuWuWuWuWuWuWuWabuWuWuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababuWuWabababababababababababababababababababababababababuWuWuWababababababababababababababuWuWzyzyzyzzzjzBzCzxzyzyzyzgzDuWabababababuWababababuWabababuWuWuWabuWuWuWuWuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababuWuWabababababababababababababababababababababababuWuWzrabababababababababababababababuWuWzEzFzGznzwzjzjzxzxzyzyzgzDuWababuWabuWuWabababababababuWuWuWababababuWuWuWuWuWuWababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababuWuWuWababababababababababababababababababababuWuWuWabababababababababababababababababuWzyzyzyzHzIzJzjzxzKzyzyzgzguWababuWabuWabababababababuWuWuWababababababuWuWuWuWzrababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababuWuWuWababababababababuWuWuWuWuWabababababuWuWuWabababababababababababababababababababzyzyzyzLzxzjzjzwzxzyzyzyzyuWababuWuWuWababuWababababuWuWabababababababuWuWuWuWuWababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababuWuWababababababuWuWuWuWuWuWuWuWabababuWuWzrabababababababababababababababababababzyzyzyzMzxzxzjzjzjzjzyzyzyuWababuWuWabababuWababababuWuWabababababababzruWuWuWuWababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababuWuWuWuWuWuWuWuWababababababuWuWuWabuWuWababababababababababababababababababababzyzyzyzMzxzCzjzjzjzjzyzyzyuWabababababababuWuWababuWuWababababababababuWuWuWuWuWababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababuWuWuWabababababababababababuWuWuWuWababababababababababababababababababababzyzyzyzMzxzxzjzjzjzjzGzFzEuWuWuWabababababuWuWababuWuWabababababababababuWuWuWabababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababuWuWuWabababababababababababababababuWuWababababababababababababababababababababzyzyzgzMzxzjzjzwzxzgzyzyzyuWuWuWuWuWuWababuWuWababuWuWabababababuWuWuWuWuWuWababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababuWuWababababababababababababababababababuWababababababababababababababababababababzyzyzgzLzxzjzjzjzxzgzgzyzyabuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWabababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababuWuWuWuWababababababababababababuWzruWababababuWuWuWabababababababababuWababababababababzyzyzgzLzwzjzjzjzxzxzgzyzyabuWuWuWuWuWuWuWuWuWuWababababababababababuWuWuWabababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababuWabababababababababababababuWuWuWuWuWuWzrababababuWuWuWuWabababababuWuWababuWabababababzyzyzgzNzIzJzOzjzxzxzgzyzyababuWuWuWuWuWuWuWuWababababababababababuWuWuWuWabababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababzruWuWuWuWuWuWuWababababababuWuWuWababababuWababuWabababababzyzyzyznzjzxzgzjzCzjzgzgzyabababuWuWuWuWuWuWuWabababuWuWuWuWabababuWabuWuWabababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWuWuWababababababuWababababuWababuWuWababababzyzyzyznzjzjzgzjzxzxzgzgzyababuWuWuWuWababuWuWabababuWabababababuWuWuWuWababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWzruWuWuWuWabababuWuWuWababababuWababuWuWabababuWzyzyzyznzCzgzgzgzxzxzgzgzyababuWuWababababuWuWuWababuWababababuWuWuWuWabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababuWuWzruWuWuWabuWuWuWzruWuWuWuWuWababababababuWababuWuWabuWuWuWzEzjzGznzxzgzgzgzgzxzgzyzyabuWuWuWuWuWabababuWuWababuWuWabababuWuWuWuWabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWzyzyzyznzxzjzgzgzjzjzyzyzyuWuWuWababuWuWababuWuWuWababuWababuWuWuWuWuWabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWababababzyzyzgznzjzxzgzjzxzwzGzjzEuWuWababababuWabababuWuWababuWuWabuWuWuWuWuWabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWuWabababzyzgzgznzjzwzjzjzjzjzyzyzyabuWababuWabuWuWababuWuWabababuWuWuWuWuWuWuWabababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWabababuWuWuWuWabababzyzgzgzNzIzJzBzwzjzjzyzyzyabuWuWuWuWababuWababuWuWuWababuWuWuWuWuWuWababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWabababababuWuWuWababzyzgzgzMzjzjzjzjzjzgzyzyzyabababababababuWabababuWuWabuWuWuWabuWuWuWababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWabababababababuWuWuWabzyzyzyzMzgzjzjzjzgzgzyzyzyababababababuWuWababababuWuWuWuWabuWuWuWabababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWuWabababababababababuWuWabzgzPzPzQzPzRzRzRzPzPzPzPzgababuWuWuWuWuWabababuWuWuWuWabuWuWuWuWababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWuWabababababababababababuWuWuWzgzPzSzTzUzSzSzSzVzWzSzPzgabababababababababuWuWuWuWuWuWuWabababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababuWuWuWuWabababababababababababababuWuWzgzPzSzXzYzSzSzSzZzYAazPzgabababababababuWuWuWuWuWuWababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababuWuWabababababababababababababababuWabzgzPzSAbzYzSzSzSzSAczSzPzgabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababuWuWuWabababababababababababababababababzgzPAdzSzSzSAezSzSzSzSzPzgabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababuWuWuWabababababababababababababababababzgzPzSzSzSzSzSzSzSzSzSzPzgabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababuWuWabababababababababababababababababababzgzPzZAfAgzSzSzSAhzSzSzPzgabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababzgzPzPzPzPzPzPzPzPzPzPzPzgabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index eb5c500573b..bbbf693516b 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -14,6 +14,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse "Thunderdome", "UO45", "UO45R", + "UO71", "Xeno", "Hotel" ) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 58d041b9442..2a72f32bedf 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -93,18 +93,21 @@ /var/const/access_cent_bridge = 113//Bridge. /var/const/access_cent_commander = 114//Commander's Office/ID computer. - //The Syndicate +//The Syndicate /var/const/access_syndicate = 150//General Syndicate Access /var/const/access_syndicate_leader = 151//Nuke Op Leader Access /var/const/access_vox = 152//Vox Access //Trade Stations - var/const/access_trade_sol = 160 - //MONEY +//MONEY /var/const/access_crate_cash = 200 +//Awaymissions +/var/const/access_away01 = 271 + + /obj/var/list/req_access = null /obj/var/req_access_txt = "0" /obj/var/list/req_one_access = null diff --git a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm new file mode 100644 index 00000000000..e955229b00b --- /dev/null +++ b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm @@ -0,0 +1,256 @@ + +/area/awaymission/UO71 + name = "UO71" + icon_state = "away" + report_alerts = 0 + tele_proof = 1 + + +/area/awaymission/UO71/plaza + name = "UO71 Plaza" + icon_state = "awaycontent1" + fire = 1 + +/area/awaymission/UO71/centralhall + name = "UO71 Central" + icon_state = "awaycontent2" + fire = 1 + +/area/awaymission/UO71/eng + name = "UO71 Engineering" + icon_state = "awaycontent3" + fire = 1 + +/area/awaymission/UO71/mining + name = "UO71 Mining" + icon_state = "awaycontent4" + fire = 1 + +/area/awaymission/UO71/science + name = "UO71 Science" + icon_state = "awaycontent5" + fire = 1 + +/area/awaymission/UO71/medical + name = "UO71 Medical" + icon_state = "awaycontent6" + fire = 1 + +/area/awaymission/UO71/gateway + name = "UO71 Gateway" + icon_state = "awaycontent7" + fire = 1 + +/area/awaymission/UO71/outside + name = "UO71 Outside" + icon_state = "awaycontent8" + +/area/awaymission/UO71/bridge + name = "UO71 Bridge" + icon_state = "awaycontent21" + fire = 1 + requires_power = 0 + tele_proof = 1 + +/area/awaymission/UO71/queen + name = "UO71 Queen Lair" + icon_state = "awaycontent9" + fire = 1 + requires_power = 0 + tele_proof = 1 + +/area/awaymission/UO71/prince + name = "UO71 Prince Containment" + icon_state = "awaycontent10" + fire = 1 + requires_power = 0 + tele_proof = 1 + +/area/awaymission/UO71/mother + name = "UO71 Mother Containment" + icon_state = "awaycontent10" + fire = 1 + requires_power = 0 + tele_proof = 1 + +/area/awaymission/UO71/loot + name = "UO71 Loot Vault" + icon_state = "awaycontent11" + requires_power = 0 + tele_proof = 1 + +/obj/item/weapon/paper/terrorspiders1 + name = "paper - 'Sealed Facility'" + info = {"SEALED FACILITY
    \ +
    \ + This facility is sealed shut by order of Commander Marquez. Do not enter.
    \ + Terror spiders live here. We believe they are a weapon developed by the syndicate.
    \ + Any surviving personnel are to evacuate immediately via the gateway.
    \ + "} + +/obj/item/weapon/paper/terrorspiders2 + name = "paper - 'The Trio of Terror'" + info = {"Status Report on the 'Terrors'
    \ +
    \ + All the spiders are deadly. We know this much already. Within an hour of their appearance, they have killed several staff.
    \ + Three, however, bear particular mention, as they appear to be leading the spider hivemind.
    \ +
    \ + The Mother is held in containment 1. Advise leaving her alone.
    \ + It is likely that the hundreds of tiny spiders swarming over her back would come to her defense if she was threatened.
    \ +
    \ + The Prince is held in containment 2. He appears very aggressive, incredibly fast, strong, and durable. Extreme force and agility would be required to neutralize him.
    \ + It is likely the appearance of the prince was related to our initial aggression against the Queen. These things can THINK.
    \ +
    \ + The Queen cannot be contained. She lives in the old bar, south of mining. She continues to breed dangerous spiders at an alarming rate.
    \ + Many of her offspring are already roaming the compound, traveling through the vents. Contact with the team sent to subdue her has been lost.
    \ +
    \ +
    \ + Based on the situation, Commander, I advise immediate evacuation through the gateway.
    \ + -Research Director Simons
    \ + "} + + +/obj/item/weapon/paper/terrorspiders3 + name = "paper - 'Final Report'" + info = {"FROM: Field Agent 0738
    \ + TO: Syndicate #873589
    \ + SUBJECT: Mission Success
    \ +
    \ + I have seeded the Terror Queen egg in a dingy looking bar that bored engineers constructed near the mining tunnels.
    \ + No doubt she will grow soon.
    \ +
    \ + I have also placed the Mother and Prince eggs nearby, injected with sedative. Hopefully the dimwitted NT scientists bring them back for study.
    \ + With any luck, the Queen will sense them telepathically, think NT is holding her children hostage, and attack.
    \ +
    \ + I am going to extract out of the gateway before this all goes down.
    \ + I don't imagine the staff have very long to live once the Queen declares war on this place.
    \ + "} + +/obj/item/weapon/paper/terrorspiders4 + name = "paper - 'Prescription for Jones, David'" + info = {"PRESCRIPTION FOR: David Jones
    \ + RANK: Miner
    \ + FOR: Haloperidol
    \ + REASON FOR TREATMENT: Hallucinations, Paranoia
    \ + CAUSE: Hallucinations caused by encounter with toxic spit of spider in the caves. Paranoia caused by disappearing staff and suspicions of syndicate infiltration.
    \ + TREATMENT PLAN: Take as needed. See Dr. Phloxi in one week if symptoms persist.
    \ + "} + +/obj/item/weapon/paper/terrorspiders5 + name = "paper - 'A Study in Terror'" + info = {"Findings Overview
    \ +
    \ +

    Gray Spiders
    Stealthy predators that ambush prey from vents. Otherwise weak.

    \ +

    Red Spiders
    Can kill anyone in melee, but slow.

    \ +

    Green
    Will lay eggs on dead bodies, breeding more spiders.

    \ +

    Black
    Even a single bite is enough to kill a humanoid, given time.

    \ +

    White
    Injects a parasitic agent. Deemed to pose too great an infection risk to study.

    \ +

    Purple
    Only seen guarding the nest of the Queen to the south. Appear to be territorial, and very dangerous.

    \ +

    Prince
    Held in containment 2. Appears to be a sort of super-warrior. Fast, strong, and thickly armored.

    \ +

    Mother
    Carries hordes of spiderlings on its back. Held in containment 1.

    \ +

    Queen
    Unable to contain. Present south of Cargo before contact was lost. Presumed ruler of the local hive.

    \ + "} + +/obj/item/weapon/paper/terrorspiders6 + name = "paper - 'A Study in Venom'" + info = {"Initial Report - Black Widow Venom
    \ +
    \ + Even a single bite kills within a few minutes. Immediate charcoal is necessary for the victim to survive.
    \ + The fascinating thing is that multiple bites actually cause rapid symptom onset. The victim quickly loses the ability to walk.
    \ + One test monkey went from perfect health to death in under 60 seconds - from 3 bites.
    \ + I am so very glad I'm not responsible for keeping these things contained."} + +/obj/item/weapon/paper/terrorspiders7 + name = "paper - 'Security Orders'" + info = {"Directives for Officer James
    \ +
    \ + 1. Find a way to lift the bridge lockdown.
    \ + 2. Kill any spiders you encounter.
    \ + 3. Once on the bridge, open a path to the Queen in the south, and find a way to kill her, ending the infestation.
    \ + Good luck, Officer.
    \ + "} + +/obj/item/weapon/paper/terrorspiders8 + name = "paper - 'Last Words'" + info = {"The Last Words of Nurse Barnes
    \ +
    \ + It is too much. First Phil, then those damn spiders bite Mary too. Heaven help us.
    \ + I'll be evacuating as soon as I've grabbed my supplies. I had to pay for those myself. Stupid budget cuts.
    \ + The new world they've found for us isn't that hospitable, but at least there are no deadly spid---
    \ + (the writing trails off, as if the writer was interrupted)
    \ + "} + + +/obj/item/weapon/gun/energy/laser/awaymission_aeg + name = "Wireless Energy Gun" + desc = "An energy gun that recharges wirelessly during away missions. Does not work on the main station." + force = 10 + origin_tech = null + selfcharge = 1 + var/inawaymission = 1 + +/obj/item/weapon/gun/energy/laser/awaymission_aeg/process() + var/turf/my_loc = get_turf(src) + if(is_away_level(my_loc.z)) + if(inawaymission) + return ..() + if(ismob(loc)) + to_chat(loc, "Your [src] activates, starting to draw power from a nearby wireless power source.") + inawaymission = 1 + else + if(inawaymission) + if(ismob(loc)) + to_chat(loc, "Your [src] deactivates, as it is out of range from its power source.") + power_supply.charge = 0 + inawaymission = 0 + update_icon() + + + +/obj/item/weapon/reagent_containers/glass/beaker/terror_black_toxin + name = "beaker 'Black Terror Venom'" + +/obj/item/weapon/reagent_containers/glass/beaker/terror_black_toxin/New() + ..() + reagents.add_reagent("terror_black_toxin", 50) + update_icon() + + +/obj/machinery/computer/id_upgrader + name = "ID Upgrade Machine" + icon_state = "guest" + icon_screen = "pass" + var/list/access_to_give = list(access_away01) + var/beenused = 0 + var/door_to_open = "UO71_Start" + +/obj/machinery/computer/id_upgrader/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/D = I + if(!access_to_give.len) + to_chat(user, "This machine appears to be configured incorrectly.") + return + var/did_upgrade = 0 + var/list/id_access = D.GetAccess() + for(var/this_access in access_to_give) + if(!(this_access in id_access)) + // don't have it - add it + D.access |= this_access + did_upgrade = 1 + if(did_upgrade) + to_chat(user, "An access type was added to your ID card.") + if(beenused) + return + spawn(1) + beenused = 1 + var/unlocked_something = 0 + for(var/obj/machinery/door/poddoor/P in airlocks) + if(P.density && P.id_tag == door_to_open && P.z == z) + P.open() + unlocked_something = 1 + if(unlocked_something) + to_chat(user, "Activating the machine has unlocked a way forward!") + else + to_chat(user, "Your ID card already has all the access this machine can give.") + + diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm index 8453a71cff4..eefc506ff99 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm @@ -4,6 +4,13 @@ #define MOVING_TO_TARGET 3 #define SPINNING_COCOON 4 +#define TS_AI_AGGRESSIVE 0 +#define TS_AI_DEFENSIVE 1 + +#define TS_DAMAGE_SIMPLE 0 +#define TS_DAMAGE_POISON 1 +#define TS_DAMAGE_BRUTE 2 + #define TS_DESC_RED "Red - Assault" #define TS_DESC_GRAY "Gray - Ambush" #define TS_DESC_GREEN "Green - Nurse" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index ca216da052d..d1f38bbd0eb 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -112,6 +112,12 @@ if(prob(50)) icon_state = "stickyweb2" +/obj/effect/spider/terrorweb/proc/DeCloakNearby() + for(var/mob/living/simple_animal/hostile/poison/terror_spider/gray/G in view(6,src)) + if(G.stat != DEAD) + G.GrayDeCloak() + G.Aggro() + /obj/effect/spider/terrorweb/CanPass(atom/movable/mover, turf/target) if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider)) return 1 @@ -123,6 +129,7 @@ var/mob/living/M = mover M.Stun(4) // 8 seconds. M.Weaken(4) // 8 seconds. + DeCloakNearby() if(iscarbon(mover)) spawn(70) qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm index 04ac9d30bf2..c1a7bf45da7 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm @@ -12,6 +12,7 @@ name = "Black Terror spider" desc = "An ominous-looking spider, black as the darkest night. It has merciless eyes, and a blood-red hourglass pattern on its back." spider_role_summary = "Hit-and-run attacker with extremely venomous bite." + ai_target_method = TS_DAMAGE_POISON icon_state = "terror_widow" icon_living = "terror_widow" @@ -37,3 +38,10 @@ else visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") L.attack_animal(src) + if(!ckey && (!(target in enemies) || L.reagents.has_reagent("terror_black_toxin", 60))) + step_away(src,L) + step_away(src,L) + LoseTarget() + for(var/i in 0 to 3) + step_away(src, L) + visible_message("[src] warily eyes [L] from a distance.") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm new file mode 100644 index 00000000000..b3a0089170b --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -0,0 +1,173 @@ + +// -------------------------------------------------------------------------------- +// ----------------- TERROR SPIDERS: T5 EMPRESS OF TERROR ------------------------- +// -------------------------------------------------------------------------------- +// -------------: ROLE: ruling over planets of uncountable spiders, like Xenomorph Empresses. +// -------------: AI: none - this is strictly adminspawn-only and intended for RP events, coder testing, and teaching people 'how to queen' +// -------------: SPECIAL: Lay Eggs ability that allows laying queen-level eggs. Wide-area EMP and light-breaking abilities. +// -------------: TO FIGHT IT: run away screaming? +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress + name = "Empress of Terror" + desc = "The unholy offspring of spiders, nightmares, and lovecraft fiction." + spider_role_summary = "Adminbus spider" + ai_target_method = TS_DAMAGE_SIMPLE + maxHealth = 1000 + health = 1000 + melee_damage_lower = 30 + melee_damage_upper = 60 + move_to_delay = 5 + ventcrawler = 1 + idle_ventcrawl_chance = 0 + ai_playercontrol_allowtype = 0 + ai_type = TS_AI_AGGRESSIVE + rapid = 1 + canlay = 1000 + spider_tier = TS_TIER_5 + var/phasing = 0 + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/handle_automated_action() + return + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/LayEmpressEggs() + set name = "Lay Empress Eggs" + set category = "Spider" + set desc = "Lay spider eggs. As empress, you can lay queen-level eggs to create a new brood." + var/eggtype = input("What kind of eggs?") as null|anything in list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE) + var/numlings = input("How many in the batch?") as null|anything in list(1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50) + if(eggtype == null || numlings == null) + to_chat(src, "Cancelled.") + return + switch(eggtype) + if(TS_DESC_RED) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red,numlings,1) + if(TS_DESC_GRAY) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/gray,numlings,1) + if(TS_DESC_GREEN) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green,numlings,1) + if(TS_DESC_BLACK) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/black,numlings,1) + if(TS_DESC_PURPLE) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple,numlings,0) + if(TS_DESC_WHITE) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/white,numlings,0) + if(TS_DESC_PRINCE) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/prince,numlings,1) + if(TS_DESC_MOTHER) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/mother,numlings,1) + if(TS_DESC_QUEEN) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/queen,numlings,1) + else + to_chat(src, "Unrecognized egg type.") + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressScreech() + set name = "Empress Screech" + set category = "Spider" + set desc = "Emit horrendusly loud screech which breaks lights and cameras in a massive radius. Good for making a spider nest in a pinch." + for(var/obj/machinery/light/L in range(14, src)) + if(L.on) + L.broken() + for(var/obj/machinery/camera/C in range(14, src)) + if(C.status) + C.toggle_cam(src, 0) + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressToggleDebug() + set name = "Toggle Debug" + set category = "Spider" + set desc = "Enables/disables debug mode for spiders." + if(spider_debug) + spider_debug = 0 + to_chat(src, "Debug: DEBUG MODE is now OFF for all spiders in the world.") + else + spider_debug = 1 + to_chat(src, "Debug: DEBUG MODE is now ON for all spiders in the world.") + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + T.spider_debug = spider_debug + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressToggleInstant() + set name = "Toggle Instant" + set category = "Spider" + set desc = "Enables/disables instant growth for spiders." + if(spider_growinstantly) + spider_growinstantly = 0 + to_chat(src, "Debug: INSTANT GROWTH is now OFF for all spiders in the world.") + else + spider_growinstantly = 1 + to_chat(src, "Debug: INSTANT GROWTH is now ON for all spiders in the world.") + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + T.spider_growinstantly = spider_growinstantly + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressKillSpider() + set name = "Erase Spider" + set category = "Spider" + set desc = "Kills a spider. If they are player-controlled, also bans them from controlling any other spider for the rest of the round." + var/choices = list() + for(var/mob/living/simple_animal/hostile/poison/terror_spider/L in ts_spiderlist) + if(L == src) + continue + if(L.stat == DEAD) + continue + choices += L + var/killtarget = input(src, "Which terror spider should die?") in null|choices + if(!killtarget) + return + else if(!isliving(killtarget)) + to_chat(src, "[killtarget] is not living.") + else if(!istype(killtarget, /mob/living/simple_animal/hostile/poison/terror_spider)) + to_chat(src, "[killtarget] is not a terror spider.") + else + var/mob/living/simple_animal/hostile/poison/terror_spider/T = killtarget + if(T.ckey) + // living player + ts_ckey_blacklist += T.ckey + to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") + T.gib() + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EraseBrood() + set name = "Erase Brood" + set category = "Spider" + set desc = "Debug: kill off all other spiders in the world. Takes two minutes to work." + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(T.spider_tier < spider_tier) + T.degenerate = 1 + to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") + for(var/obj/effect/spider/eggcluster/terror_eggcluster/T in ts_egg_list) + qdel(T) + for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list) + T.stillborn = 1 + to_chat(src, "Brood will die off shortly.") + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/SpiderlingFlood() + set name = "Spiderling Flood" + set category = "Spider" + set desc = "Debug: Spawns N spiderlings. They grow into random spider types (red/green/gray/white/black). Pure horror!" + var/numlings = input("How many?") as null|anything in list(10, 20, 30, 40, 50) + var/sbpc = input("%chance to be stillborn?") as null|anything in list(0, 25, 50, 75, 100) + for(var/i=0, i[src] steps into a bluespace portal!", "You step into the realm of nightmares.") + incorporeal_move = 1 + alpha = 0 + else + visible_message("[src] steps out of a bluespace portal!", "You return from the realm of nightmares.") + incorporeal_move = 0 + alpha = 255 + new /obj/effect/effect/bad_smoke(loc) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm index ddfe48bae09..5e632a69103 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm @@ -2,24 +2,29 @@ // -------------------------------------------------------------------------------- // ----------------- TERROR SPIDERS: T1 GRAY TERROR ------------------------------- // -------------------------------------------------------------------------------- -// -------------: ROLE: fast, weak terror spider -// -------------: SPECIAL: silences targets -// -------------: TO FIGHT IT: shoot it! +// -------------: ROLE: ambusher +// -------------: AI: hides in vents, emerges when prey is near to kill it, then hides again. Intended to scare normal crew. +// -------------: SPECIAL: invisible when on top of a vent, emerges when prey approaches or gets trapped in webs. Bite silences targets. +// -------------: TO FIGHT IT: shoot it through a window, or make it regret ambushing you // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 /mob/living/simple_animal/hostile/poison/terror_spider/gray name = "Gray Terror spider" - desc = "An ominous-looking gray spider, it seems jittery." - spider_role_summary = "Fast-moving but weak spider." + desc = "An ominous-looking gray spider. It twitches occasionally, always seeming ready to pounce." + spider_role_summary = "Stealth spider that ambushes weak humans from vents." + ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_gray" icon_living = "terror_gray" icon_dead = "terror_gray_dead" - maxHealth = 120 // same health as hunter spider, aka, pretty weak.. but silences its targets + maxHealth = 120 // same health as hunter spider, aka, pretty weak.. but its almost invisible. health = 120 melee_damage_lower = 10 melee_damage_upper = 20 move_to_delay = 5 // normal speed stat_attack = 1 // ensures they will target people in crit, too! + wander = 0 // wandering defeats the purpose of stealth + idle_vision_range = 3 // very low idle vision range + vision_type = null // prevent them seeing through walls when doing AOE web. /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_specialattack(mob/living/carbon/human/L, poisonable) @@ -35,4 +40,102 @@ visible_message("[src] buries grey fangs deep into the [inject_target] of [target]!") else visible_message("[src] bites [target], but cannot inject venom into their [inject_target]!") - L.attack_animal(src) \ No newline at end of file + L.attack_animal(src) + +/mob/living/simple_animal/hostile/poison/terror_spider/gray/adjustBruteLoss(damage) + ..(damage) + if(invisibility > 0 || icon_state == "terror_gray_cloaked") + GrayDeCloak() + +/mob/living/simple_animal/hostile/poison/terror_spider/gray/adjustFireLoss(damage) + ..(damage) + if(invisibility > 0 || icon_state == "terror_gray_cloaked") + GrayDeCloak() + +/mob/living/simple_animal/hostile/poison/terror_spider/gray/Aggro() + GrayDeCloak() + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/gray/AttackingTarget() + if(invisibility > 0 || icon_state == "terror_gray_cloaked") + GrayDeCloak() + else + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/GrayCloak() + visible_message("[src] hides in the vent.") + invisibility = SEE_INVISIBLE_LEVEL_ONE + icon_state = "terror_gray_cloaked" + icon_living = "terror_gray_cloaked" + if(!ckey) + vision_range = 3 + idle_vision_range = 3 + // Bugged, does not work yet. Also spams webs. Also doesn't look great. But... planned. + move_to_delay = 15 // while invisible, slow. + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/GrayDeCloak() + invisibility = 0 + icon_state = "terror_gray" + icon_living = "terror_gray" + vision_range = 9 + idle_vision_range = 9 + move_to_delay = 5 + prob_ai_hides_in_vents = 10 + + +/mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_special_action() + if(prob(prob_ai_hides_in_vents)) + var/obj/machinery/atmospherics/unary/vent_pump/e = locate() in get_turf(src) + if(e) + if(!e.welded || spider_awaymission) + if(invisibility != SEE_INVISIBLE_LEVEL_ONE) // aka: 35. ghosts have 15 with no darkness, 60 with darkness. Weird... + var/list/g_turfs_webbed = ListWebbedTurfs() + var/webcount = g_turfs_webbed.len + if(webcount >= 4) + // if there are already at least 4 webs around us, then we have a good web setup already. Cloak. + GrayCloak() + // I wonder if we should settle down here forever? + var/foundqueen = 0 + for(var/mob/living/H in view(src, 10)) + if(istype(H, /mob/living/simple_animal/hostile/poison/terror_spider/queen)) + foundqueen = 1 + break + if(!foundqueen) + var/list/g_turfs_visible = ListVisibleTurfs() + if(g_turfs_visible.len >= 12) + // So long as the room isn't tiny, and it has no queen in it, sure, settle there + // since we are settled now, disable most AI behaviors so we don't waste CPU. + ai_ventcrawls = 0 + ai_spins_webs = 0 + ai_break_lights = 0 + prob_ai_hides_in_vents = 3 + visible_message("[src] finishes setting up its trap in [get_area(src)].") + else + var/list/g_turfs_valid = ListValidTurfs() + var/turfcount = g_turfs_valid.len + if(turfcount == 0) + // if there is literally nowhere else we could put a web, cloak. + GrayCloak() + else + // otherwise, pick one of the valid turfs with no web to create a web there. + new /obj/effect/spider/terrorweb(pick(g_turfs_valid)) + visible_message("[src] spins a web.") + else + if(invisibility == SEE_INVISIBLE_LEVEL_ONE) + // if our vent is welded, decloak + GrayDeCloak() + else + if(invisibility == SEE_INVISIBLE_LEVEL_ONE) + // if there is no vent under us, and we are cloaked, decloak + GrayDeCloak() + var/vdistance = 99 + var/temp_vent = null + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) + if(!v.welded) + if(get_dist(src,v) < vdistance) + temp_vent = v + vdistance = get_dist(src,v) + if(temp_vent) + if(get_dist(src,temp_vent) > 0 && get_dist(src,temp_vent) < 5) + step_to(src,temp_vent) + // if you're bumped off your vent, try to get back to it \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm index 56265386686..9b8561bf922 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -3,6 +3,7 @@ // ----------------- TERROR SPIDERS: T1 GREEN TERROR ------------------------------ // -------------------------------------------------------------------------------- // -------------: ROLE: reproduction +// -------------: AI: after it kills you, it webs you and lays new terror eggs on your body // -------------: SPECIAL: can also create webs, web normal objects, etc // -------------: TO FIGHT IT: kill it however you like - just don't die to it! // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 @@ -11,7 +12,7 @@ name = "Green Terror spider" desc = "An ominous-looking green spider. It has a small egg-sac attached to it, and dried blood stains on its carapace." spider_role_summary = "Average melee spider that webs its victims and lays more spider eggs" - + ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_green" icon_living = "terror_green" icon_dead = "terror_green_dead" @@ -20,7 +21,6 @@ melee_damage_lower = 10 melee_damage_upper = 20 var/feedings_to_lay = 2 - var/datum/action/innate/terrorspider/greeneggs/greeneggs_action @@ -45,6 +45,43 @@ DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 1, 1) fed -= feedings_to_lay +/mob/living/simple_animal/hostile/poison/terror_spider/green/spider_special_action() + if(cocoon_target) + if(get_dist(src, cocoon_target) <= 1) + spider_steps_taken = 0 + DoWrap() + else + if(spider_steps_taken > spider_max_steps) + spider_steps_taken = 0 + cocoon_target = null + busy = 0 + stop_automated_movement = 0 + else + spider_steps_taken++ + CreatePath(cocoon_target) + step_to(src,cocoon_target) + if(spider_debug) + visible_message("[src] moves towards [cocoon_target] to cocoon it.") + else if(fed >= feedings_to_lay) + DoLayGreenEggs() + else if(world.time > (last_cocoon_object + freq_cocoon_object)) + last_cocoon_object = world.time + var/list/can_see = view(src, 10) + for(var/mob/living/C in can_see) + if(C.stat == DEAD && !isterrorspider(C) && !C.anchored) + spider_steps_taken = 0 + cocoon_target = C + return + for(var/obj/O in can_see) + if(O.anchored) + continue + if(istype(O, /obj/item) || istype(O, /obj/structure) || istype(O, /obj/machinery)) + if(!istype(O, /obj/item/weapon/paper)) + cocoon_target = O + stop_automated_movement = 1 + spider_steps_taken = 0 + return + /mob/living/simple_animal/hostile/poison/terror_spider/green/spider_specialattack(mob/living/carbon/human/L, poisonable) if(!poisonable) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm index 2c58a133792..e3eb1b1d49e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm @@ -18,6 +18,21 @@ hsline += " AI " to_chat(src,hsline) +/mob/living/simple_animal/hostile/poison/terror_spider/proc/SetHiveCommand(set_ai, set_ventcrawl) + var/numspiders = 0 + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(spider_awaymission && !T.spider_awaymission) + continue + else if(!spider_awaymission && T.spider_awaymission) + continue + numspiders += 1 + if(spider_tier >= T.spider_tier) + if(T.ai_type != set_ai) + T.ai_type = set_ai + if(T.idle_ventcrawl_chance != set_ventcrawl) + T.idle_ventcrawl_chance = set_ventcrawl + return numspiders + /mob/living/simple_animal/hostile/poison/terror_spider/proc/CountSpiders() var/numspiders = 0 for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm index f41ebb54b43..b6500253c03 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm @@ -3,6 +3,7 @@ // ----------------- TERROR SPIDERS: T3 MOTHER OF TERROR -------------------------- // -------------------------------------------------------------------------------- // -------------: ROLE: living schmuck bait +// -------------: AI: no special ai // -------------: SPECIAL: spawns an ungodly number of spiderlings when killed // -------------: TO FIGHT IT: don't! Just leave it alone! It is harmless by itself... but god help you if you aggro it. // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 @@ -11,7 +12,7 @@ name = "Mother of Terror spider" desc = "An enormous spider. Hundreds of tiny spiderlings are crawling all over it. Their beady little eyes all stare at you. The horror!" spider_role_summary = "Schmuck bait. Extremely weak in combat, but spawns many spiderlings when it dies." - + ai_target_method = TS_DAMAGE_SIMPLE icon_state = "terror_gray2" icon_living = "terror_gray2" icon_dead = "terror_gray2_dead" @@ -20,10 +21,9 @@ melee_damage_lower = 10 melee_damage_upper = 20 move_to_delay = 5 - + idle_ventcrawl_chance = 5 spider_tier = TS_TIER_3 spider_opens_doors = 2 - var/canspawn = 1 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 5a3a746e1a9..e230e1fe666 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 @@ -12,26 +12,23 @@ name = "Prince of Terror spider" desc = "An enormous, terrifying spider. It looks like it is judging everything it sees. Its hide seems armored, and it bears the scars of many battles." spider_role_summary = "Miniboss terror spider. Lightning bruiser." - + ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_allblack" icon_living = "terror_allblack" icon_dead = "terror_allblack_dead" - maxHealth = 600 // 30 laser shots health = 600 regen_points_per_hp = 6 // double the normal - IE halved regen speed - melee_damage_lower = 20 melee_damage_upper = 30 move_to_delay = 4 // faster than normal - ventcrawler = 0 + ai_ventcrawls = 0 environment_smash = 3 - loot = list(/obj/item/clothing/accessory/medal) + idle_ventcrawl_chance = 0 spider_tier = TS_TIER_3 spider_opens_doors = 2 - var/datum/action/innate/terrorspider/princesmash/princesmash_action @@ -40,6 +37,12 @@ princesmash_action = new() princesmash_action.Grant(src) +/mob/living/simple_animal/hostile/poison/terror_spider/prince/death(gibbed) + if(!hasdied) + if(spider_uo71) + UnlockBlastDoors("UO71_SciStorage", "UO71 Secure Science Storage is now unlocked!") + ..() + /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) if(prob(15)) visible_message("[src] rams into [L], knocking them to the floor!") 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 7b801d76651..81e60797864 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 @@ -3,6 +3,7 @@ // ----------------- TERROR SPIDERS: T2 PURPLE TERROR ----------------------------- // -------------------------------------------------------------------------------- // -------------: ROLE: guarding queen nests +// -------------: AI: dies if too far from queen // -------------: SPECIAL: chance to stun on hit // -------------: TO FIGHT IT: shoot it from range, bring friends! // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 @@ -11,7 +12,7 @@ name = "Purple Terror spider" desc = "An ominous-looking purple spider. It looks about warily, as if waiting for something." spider_role_summary = "Guards the nest of the Queen of Terror." - + ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_purple" icon_living = "terror_purple" icon_dead = "terror_purple_dead" @@ -20,17 +21,28 @@ melee_damage_lower = 15 melee_damage_upper = 25 move_to_delay = 6 - spider_tier = TS_TIER_2 spider_opens_doors = 2 - ventcrawler = 0 + ai_ventcrawls = 0 environment_smash = 3 - + idle_ventcrawl_chance = 0 // stick to the queen! var/dcheck_counter = 0 var/queen_visible = 1 var/cycles_noqueen = 0 + +/mob/living/simple_animal/hostile/poison/terror_spider/purple/death(gibbed) + if(spider_myqueen) + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/Q = spider_myqueen + if(Q.stat != DEAD && !Q.ckey) + if(get_dist(src,Q) > 20) + if(!degenerate && !Q.degenerate) + degenerate = 1 + Q.DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple,1,0) + visible_message("[src] chitters in the direction of [Q]!") + ..() + /mob/living/simple_animal/hostile/poison/terror_spider/purple/spider_specialattack(mob/living/carbon/human/L, poisonable) if(cycles_noqueen < 6 && prob(10)) visible_message("[src] rams into [L], knocking them to the floor!") 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 6ee528218ce..36587125a58 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 @@ -3,6 +3,7 @@ // ----------------- TERROR SPIDERS: T4 QUEEN OF TERROR --------------------------- // -------------------------------------------------------------------------------- // -------------: ROLE: gamma-level threat to the whole station, like a blob +// -------------: AI: builds a nest, lays many eggs, attempts to take over the station // -------------: SPECIAL: spins webs, breaks lights, breaks cameras, webs objects, lays eggs, commands other spiders... // -------------: TO FIGHT IT: bring an army, and take no prisoners. Mechs and/or decloner guns are a very good idea. // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 @@ -11,7 +12,7 @@ name = "Queen of Terror spider" desc = "An enormous, terrifying spider. Its egg sac is almost as big as its body, and teeming with spider eggs!" spider_role_summary = "Commander of the spider forces. Lays eggs, directs the brood." - + ai_target_method = TS_DAMAGE_SIMPLE icon_state = "terror_queen" icon_living = "terror_queen" icon_dead = "terror_queen_dead" @@ -29,22 +30,18 @@ var/neststep = 0 var/hasnested = 0 var/spider_max_per_nest = 20 // above this, queen stops spawning more, and declares war. - var/canlay = 0 // main counter for egg-laying ability! # = num uses, incremented at intervals var/spider_can_fakelings = 3 // spawns defective spiderlings that don't grow up, used to freak out crew, atmosphere - + idle_ventcrawl_chance = 0 force_threshold = 18 // outright immune to anything of force under 18, this means welders can't hurt it, only guns can - ranged = 1 retreat_distance = 5 minimum_distance = 5 projectilesound = 'sound/weapons/pierce.ogg' projectiletype = /obj/item/projectile/terrorqueenspit - spider_tier = TS_TIER_4 spider_opens_doors = 2 loot = list(/obj/item/clothing/accessory/medal) - var/datum/action/innate/terrorspider/queen/queennest/queennest_action var/datum/action/innate/terrorspider/queen/queensense/queensense_action var/datum/action/innate/terrorspider/queen/queeneggs/queeneggs_action @@ -76,6 +73,9 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed) if(!hasdied) + SetHiveCommand(0, 15) // Hive becomes very aggressive. + if(spider_uo71) + UnlockBlastDoors("UO71_Caves", "UO71 Caves are now unlocked!") // When a queen dies, so do her player-controlled purple-type guardians. Intended as a motivator for purples to ensure they guard her. for(var/mob/living/simple_animal/hostile/poison/terror_spider/purple/P in ts_spiderlist) if(ckey) @@ -84,6 +84,131 @@ P.degenerate = 1 ..() +/mob/living/simple_animal/hostile/poison/terror_spider/queen/Retaliate() + ..() + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + T.enemies |= enemies + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/handle_automated_action() + ..() + if(!stat && !ckey && AIStatus != AI_OFF && !target && !path_to_vent) + switch(neststep) + if(0) + // we have no nest :( + var/ok_to_nest = 1 + var/area/new_area = get_area(loc) + if(new_area) + if(findtext(new_area.name, "hall")) + ok_to_nest = 0 + // nesting in a hallway would be very stupid - crew would find and kill you almost instantly + var/numhostiles = 0 + for(var/mob/living/H in oview(10, src)) + if(!istype(H, /mob/living/simple_animal/hostile/poison/terror_spider)) + if(H.stat != DEAD) + numhostiles += 1 + // nesting RIGHT NEXT TO SOMEONE is even worse + if(numhostiles > 0) + ok_to_nest = 0 + var/vdistance = 99 + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(10, src)) + if(!v.welded) + if(get_dist(src, v) < vdistance) + entry_vent = v + vdistance = get_dist(src, v) + if(!entry_vent) + ok_to_nest = 0 + // don't nest somewhere with no vent - your brood won't be able to get out! + if(ok_to_nest && entry_vent) + nest_vent = entry_vent + neststep = 1 + visible_message("\The [src] settles down, starting to build a nest.") + else if(entry_vent) + if(!path_to_vent) + visible_message("\The [src] looks around warily - then seeks a better nesting ground.") + path_to_vent = 1 + else + visible_message("\The [src] looks around, searching for the vent that should be there, but isn't. A bluespace portal forms on her, and she is gone.") + qdel(src) + new /obj/effect/portal(get_turf(loc)) + else if(1) + if(world.time > (lastnestsetup + nestfrequency)) + lastnestsetup = world.time + NestMode() + neststep = 2 + else if(2) + if(world.time > (lastnestsetup + nestfrequency)) + lastnestsetup = world.time + spider_lastspawn = world.time + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2, 0) + neststep = 3 + else if(3) + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + if(prob(20)) + var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) + if(!N) + spider_lastspawn = world.time + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 0) + neststep = 4 + else if(4) + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + if(prob(20)) + var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) + if(!N) + if(!spider_awaymission) + QueenFakeLings() + spider_lastspawn = world.time + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1) + neststep = 5 + else if(5) + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + if(prob(20)) + var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) + if(!N) + if(!spider_awaymission) + QueenFakeLings() + spider_lastspawn = world.time + if(prob(33)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/gray, 2, 1) + else if(prob(50)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1) + else + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 1) + var/spidercount = CountSpiders() + if(spidercount >= spider_max_per_nest) // station overwhelmed! + neststep = 6 + else if(6) + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + spider_lastspawn = world.time + // go hostile, EXTERMINATE MODE. + SetHiveCommand(0, 15) // AI=0 (attack everyone), ventcrawl=15%/tick + var/numspiders = CountSpiders() + if(numspiders < spider_max_per_nest) + if(prob(33)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/black, 2, 1) + else if(prob(50)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 0) + else + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 1) + else if(spider_awaymission) + neststep = 7 + spider_spawnfrequency = spider_spawnfrequency_stable + // if we're an away mission queen... don't keep spawning spiders at high rates. Away team should have a chance. + else if(7) + if(world.time > (spider_lastspawn + spider_spawnfrequency)) + spider_lastspawn = world.time + var/numspiders = CountSpiders() + if(numspiders < spider_max_per_nest) + // someone is killing my children... + if(prob(25)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/black, 2, 1) + else if(prob(33)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 0) + else if(prob(50)) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 1) + else + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2, 0) + neststep = 6 + /mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/NestMode() queeneggs_action = new() queeneggs_action.Grant(src) @@ -94,6 +219,7 @@ queennest_action.Remove(src) hasnested = 1 ventcrawler = 0 + ai_ventcrawls = 0 environment_smash = 3 DoQueenScreech(8, 100, 8, 100) MassFlicker() @@ -159,7 +285,6 @@ if(eggtype == null || numlings == null) to_chat(src, "Cancelled.") return - //spider_lastspawn = world.time // don't think we actually need this, if queen is laying manually canlay controls her rate. canlay -= numlings if(eggtype == TS_DESC_RED) DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, numlings, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm index cd48027775d..1b48ccd59b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm @@ -12,9 +12,8 @@ /mob/living/simple_animal/hostile/poison/terror_spider/red name = "Red Terror spider" desc = "An ominous-looking red spider, it has eight beady red eyes, and nasty, big, pointy fangs! It looks like it has a vicious streak a mile wide." - spider_role_summary = "High health, high damage, very slow, melee juggernaut" - + ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_red" icon_living = "terror_red" icon_dead = "terror_red_dead" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm index ccb7a5c1148..4e58a858504 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm @@ -14,6 +14,7 @@ faction = list("terrorspiders") var/spider_myqueen = null var/use_vents = 1 + var/list/enemies = list() /obj/effect/spider/spiderling/terror_spiderling/New() ..() @@ -91,6 +92,7 @@ S.faction = faction S.spider_myqueen = spider_myqueen S.master_commander = master_commander + S.enemies = enemies qdel(src) // -------------------------------------------------------------------------------- @@ -106,6 +108,7 @@ C.faction = faction C.spider_myqueen = spider_myqueen C.master_commander = master_commander + C.enemies = enemies if(spider_growinstantly) C.amount_grown = 250 C.spider_growinstantly = 1 @@ -122,6 +125,7 @@ var/spiderling_type = null var/spiderling_number = 1 var/spiderling_ventcrawl = 1 + var/list/enemies = list() /obj/effect/spider/eggcluster/terror_eggcluster/New() ..() @@ -162,6 +166,7 @@ S.faction = faction S.spider_myqueen = spider_myqueen S.master_commander = master_commander + S.enemies = enemies if(spider_growinstantly) S.amount_grown = 250 var/rnum = 5 - spiderling_number diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm new file mode 100644 index 00000000000..4fa7af2b9f8 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm @@ -0,0 +1,319 @@ +// -------------------------------------------------------------------------------- +// --------------------- TERROR SPIDERS: TARGETING CODE ----------------------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/ListTargets() + var/list/targets1 = list() + var/list/targets2 = list() + var/list/targets3 = list() + for(var/mob/living/H in view(src, vision_range)) + if(H.stat == DEAD) + continue + if(H.flags & GODMODE) + continue + if(H.stat == UNCONSCIOUS && !stat_attack) + continue + if(ai_type == TS_AI_DEFENSIVE && !(H in enemies)) + continue + if(isterrorspider(H)) + if(H in enemies) + targets3 += H + continue + if(iscarbon(H)) + var/mob/living/carbon/C = H + if(IsInfected(C)) // only target the infected if they're attacking us. Even then, lowest priority. + if(C in enemies) + targets3 += C + continue + else if(C.reagents.has_reagent("terror_black_toxin",60)) + // only target those dying of black spider venom if they are close, or our enemy + if(get_dist(src,C) <= 2 || (C in enemies)) + targets2 += C + else + // Target prioritization by spider type. BRUTE spiders prioritize lower armor values, POISON spiders prioritize poisonable targets + if(ai_target_method == TS_DAMAGE_BRUTE) + var/theirarmor = C.getarmor(type = "melee") + // Example values: Civilian: 2, Engineer w/ Hardsuit: 10, Sec Officer with armor: 19, HoS: 48, Deathsquad: 80 + if(theirarmor < 10) + targets1 += C + else if(C in enemies) + if(theirarmor < 30) + targets2 += C + else + targets3 += C + else + targets3 += C + else if(ai_target_method == TS_DAMAGE_POISON) + if(C.can_inject(null,0,"chest",0)) + targets1 += C + else if(C in enemies) + targets2 += C + else + targets3 += C + else + // TS_DAMAGE_SIMPLE + if(C in enemies) + targets2 += C + else + targets3 += C + else + if(istype(H,/mob/living/simple_animal)) + var/mob/living/simple_animal/S = H + if(S.force_threshold > melee_damage_upper) + continue + if(H in enemies) + targets2 += H + else + targets3 += H + if(health < maxHealth) + // if we're hurt, and ONLY if we're hurt, do the additional check for mechs/space pods. Save processing time. + for(var/obj/mecha/M in view(src, vision_range)) + if(get_dist(M, src) <= 2) + targets2 += M + else + targets3 += M + for(var/obj/spacepod/S in view(src, vision_range)) + targets3 += S + if(targets1.len) + return targets1 + if(targets2.len) + return targets2 + return targets3 + +/mob/living/simple_animal/hostile/poison/terror_spider/LoseTarget() + if(target && isliving(target)) + var/mob/living/T = target + if(T.stat > 0) + killcount++ + regen_points += regen_points_per_kill + attackstep = 0 + attackcycles = 0 + ..() + +// -------------------------------------------------------------------------------- +// --------------------- TERROR SPIDERS: AI BEHAVIOR CODE ------------------------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/handle_automated_action() + if(!stat && !ckey) // if we are not dead, and we're not player controlled + if(AIStatus != AI_OFF && !target) + var/my_ventcrawl_freq = freq_ventcrawl_idle + if(ts_count_dead > 0) + if(world.time < (ts_death_last + ts_death_window)) + my_ventcrawl_freq = freq_ventcrawl_combat + // First, check for general actions that any spider could take. + if(path_to_vent) + if(entry_vent) + if(spider_steps_taken > spider_max_steps) + path_to_vent = 0 + stop_automated_movement = 0 + spider_steps_taken = 0 + path_to_vent = 0 + entry_vent = null + else if(get_dist(src, entry_vent) <= 1) + path_to_vent = 0 + stop_automated_movement = 1 + spider_steps_taken = 0 + spawn(50) + stop_automated_movement = 0 + TSVentCrawlRandom(entry_vent) + else + spider_steps_taken++ + CreatePath(entry_vent) + step_to(src,entry_vent) + if(spider_debug > 0) + visible_message("[src] moves towards the vent [entry_vent].") + else + path_to_vent = 0 + else if(ai_break_lights && world.time > (last_break_light + freq_break_light)) + last_break_light = world.time + for(var/obj/machinery/light/L in range(1, src)) + if(!L.status) + step_to(src,L) + L.on = 1 + L.broken() + L.do_attack_animation(src) + visible_message("[src] smashes the [L.name].") + break + else if(ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs)) + last_spins_webs = world.time + var/obj/effect/spider/terrorweb/T = locate() in get_turf(src) + if(!T) + new /obj/effect/spider/terrorweb(get_turf(src)) + visible_message("[src] puts up some spider webs.") + else if(ai_ventcrawls && world.time > (last_ventcrawl_time + my_ventcrawl_freq)) + if(prob(idle_ventcrawl_chance)) + last_ventcrawl_time = world.time + var/vdistance = 99 + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(10, src)) + if(!v.welded) + if(get_dist(src,v) < vdistance) + entry_vent = v + vdistance = get_dist(src,v) + if(entry_vent) + path_to_vent = 1 + else + // If none of the general actions apply, check for class-specific actions. + spider_special_action() + else if(AIStatus != AI_OFF && target) + CreatePath(target) + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/adjustBruteLoss(damage) + ..(damage) + Retaliate() + +/mob/living/simple_animal/hostile/poison/terror_spider/adjustFireLoss(damage) + ..(damage) + Retaliate() + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/Retaliate() + var/list/around = oview(src, 7) + var/list/ts_nearby = list() + for(var/atom/movable/A in around) + if(A in enemies) + continue + if(isterrorspider(A)) + ts_nearby += A + continue + if(isliving(A)) + var/mob/living/M = A + if(!("terrorspiders" in M.faction)) + enemies |= M + visible_message("[src] glares at [M]! ") + else if(istype(A, /obj/mecha)) + var/obj/mecha/M = A + if(M.occupant) + enemies |= M + enemies |= M.occupant + else if(istype(A, /obj/spacepod)) + var/obj/spacepod/M = A + if(M.pilot) + enemies |= M + enemies |= M.pilot + for(var/mob/living/simple_animal/hostile/poison/terror_spider/H in ts_nearby) + var/retaliate_faction_check = 0 + for(var/F in faction) + if(F in H.faction) + retaliate_faction_check = 1 + break + if(retaliate_faction_check && !attack_same && !H.attack_same) + H.enemies |= enemies + return 0 + +// -------------------------------------------------------------------------------- +// --------------------- TERROR SPIDERS: PATHING CODE ----------------------------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/CreatePath(mygoal) + var/m2 = get_turf(src) + if(m2 == mylocation) + chasecycles++ + ClearObstacle(get_turf(mygoal)) + if(chasecycles >= 2) + chasecycles = 0 + if(spider_opens_doors) + var/tgt_dir = get_dir(src,mygoal) + for(var/obj/machinery/door/airlock/A in view(1, src)) + if(A.density) + try_open_airlock(A) + for(var/obj/machinery/door/firedoor/F in view(1, src)) + if(tgt_dir == get_dir(src,F) && F.density && !F.welded) + visible_message("[src] pries open the firedoor!") + F.open() + + else + mylocation = m2 + chasecycles = 0 + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/ClearObstacle(turf/target_turf) + // ***** This does not allow spiders to smash windoors (e.g: UO71 bar windoor) + var/list/valid_obstacles = list(/obj/structure/window, /obj/structure/closet, /obj/structure/table, /obj/structure/grille, /obj/structure/rack, /obj/machinery/door/window) + for(var/dir in cardinal) // North, South, East, West + var/obj/structure/obstacle = locate(/obj/structure, get_step(src, dir)) + if(is_type_in_list(obstacle, valid_obstacles)) + obstacle.attack_animal(src) + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/TSVentCrawlRandom(/var/entry_vent) + if(entry_vent) + if(get_dist(src, entry_vent) <= 2) + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch) + vents.Add(temp_vent) + if(!vents.len) + entry_vent = null + return + var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) + visible_message("[src] scrambles into the ventillation ducts!", "You hear something squeezing through the ventilation ducts.") + spawn(rand(20,60)) + var/original_location = loc + forceMove(exit_vent) + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + spawn(travel_time) + if(!exit_vent || exit_vent.welded) + forceMove(original_location) + entry_vent = null + return + if(prob(50)) + audible_message("You hear something squeezing through the ventilation ducts.") + spawn(travel_time) + if(!exit_vent || exit_vent.welded) + forceMove(original_location) + entry_vent = null + return + forceMove(exit_vent.loc) + entry_vent = null + var/area/new_area = get_area(loc) + if(new_area) + new_area.Entered(src) + +// -------------------------------------------------------------------------------- +// --------------------- TERROR SPIDERS: ENVIRONMENT CODE ------------------------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListValidTurfs() + var/list/potentials = list() + for(var/turf/simulated/T in oview(3,get_turf(src))) + if(T.density == 0 && get_dist(get_turf(src),T) == 3) + var/obj/effect/spider/terrorweb/W = locate() in T + if(!W) + var/obj/structure/grille/G = locate() in T + if(!G) + var/obj/structure/window/O = locate() in T + if(!O) + potentials += T + return potentials + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListWebbedTurfs() + var/list/webbed = list() + for(var/turf/simulated/T in oview(3,get_turf(src))) + if(T.density == 0 && get_dist(get_turf(src),T) == 3) + var/obj/effect/spider/terrorweb/W = locate() in T + if(W) + webbed += T + return webbed + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListVisibleTurfs() + var/list/vturfs = list() + for(var/turf/simulated/T in oview(7,get_turf(src))) + if(T.density == 0) + vturfs += T + return vturfs + +// -------------------------------------------------------------------------------- +// --------------------- TERROR SPIDERS: MISC AI CODE ----------------------------- +// -------------------------------------------------------------------------------- + +/mob/living/simple_animal/hostile/poison/terror_spider/proc/UnlockBlastDoors(target_id_tag, msg_to_send) + var/unlocked_something = 0 + for(var/obj/machinery/door/poddoor/P in airlocks) + if(P.density && P.id_tag == target_id_tag && P.z == z) + P.open() + unlocked_something = 1 + if(unlocked_something) + for(var/mob/living/carbon/human/H in player_list) + if(H.z != z) + continue + to_chat(H,"----------") + to_chat(H,"[msg_to_send]") + to_chat(H,"----------") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 7fa291eb2a6..e1eea163a5b 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -1,4 +1,3 @@ - var/global/list/ts_ckey_blacklist = list() var/global/ts_count_dead = 0 var/global/ts_count_alive_awaymission = 0 @@ -43,6 +42,15 @@ var/global/list/ts_spiderling_list = list() // Ventcrawling ventcrawler = 1 // allows player ventcrawling + var/ai_ventcrawls = 1 + var/idle_ventcrawl_chance = 3 // default 3% chance to ventcrawl when not in combat to a random exit vent + var/freq_ventcrawl_combat = 1800 // 3 minutes + var/freq_ventcrawl_idle = 9000 // 15 minutes + var/last_ventcrawl_time = -9000 // Last time the spider crawled. Used to prevent excessive crawling. Setting to freq*-1 ensures they can crawl once on spawn. + + // AI movement tracking + var/spider_steps_taken = 0 // leave at 0, its a counter for ai steps taken. + var/spider_max_steps = 15 // after we take X turns trying to do something, give up! // Speech speak_chance = 0 // quiet but deadly @@ -74,12 +82,31 @@ var/global/list/ts_spiderling_list = list() vision_type = new /datum/vision_override/nightvision/thermals/ling_augmented_eyesight see_invisible = 5 + // AI aggression settings + var/ai_type = TS_AI_AGGRESSIVE // 0 = aggressive to everyone, 1 = defends self only + var/ai_target_method = TS_DAMAGE_SIMPLE + // AI player control by ghosts var/ai_playercontrol_allowtype = 1 // if 0, this specific class of spider is not player-controllable. Default set in code for each class, cannot be changed. + var/ai_break_lights = 1 // AI lightbreaking behavior + var/freq_break_light = 600 + var/last_break_light = 0 // leave this, changed by procs. + + var/ai_spins_webs = 1 // AI web-spinning behavior + var/freq_spins_webs = 600 + var/last_spins_webs = 0 // leave this, changed by procs. + + var/freq_cocoon_object = 1200 // two minutes between each attempt + var/last_cocoon_object = 0 // leave this, changed by procs. + + var/prob_ai_hides_in_vents = 15 // probabily of a gray spider hiding in a vent + var/spider_opens_doors = 1 // all spiders can open firedoors (they have no security). 1 = can open depowered doors. 2 = can open powered doors faction = list("terrorspiders") var/spider_awaymission = 0 // if 1, limits certain behavior in away missions + var/spider_uo71 = 0 // if 1, spider is in the UO71 away mission + var/spider_unlock_id_tag = "" // if defined, unlock awaymission blast doors with this tag on death var/spider_role_summary = "UNDEFINED" var/spider_placed = 0 @@ -90,16 +117,18 @@ var/global/list/ts_spiderling_list = list() var/obj/machinery/atmospherics/unary/vent_pump/nest_vent // home vent, usually used by queens var/fed = 0 var/travelling_in_vent = 0 + var/list/enemies = list() + var/path_to_vent = 0 var/killcount = 0 var/busy = 0 // leave this alone! var/spider_tier = TS_TIER_1 // 1 for red,gray,green. 2 for purple,black,white, 3 for prince, mother. 4 for queen var/hasdied = 0 + var/list/spider_special_drops = list() var/attackstep = 0 var/attackcycles = 0 var/spider_myqueen = null var/mylocation = null var/chasecycles = 0 - var/last_cocoon_object = 0 // leave this, changed by procs. var/datum/action/innate/terrorspider/web/web_action var/datum/action/innate/terrorspider/wrap/wrap_action @@ -124,6 +153,8 @@ var/global/list/ts_spiderling_list = list() /mob/living/simple_animal/hostile/poison/terror_spider/AttackingTarget() if(isterrorspider(target)) + if(target in enemies) + enemies -= target var/mob/living/simple_animal/hostile/poison/terror_spider/T = target if(T.spider_tier > spider_tier) visible_message("[src] bows in respect for the terrifying presence of [target].") @@ -223,6 +254,15 @@ var/global/list/ts_spiderling_list = list() if(is_away_level(z)) spider_awaymission = 1 ts_count_alive_awaymission++ + if(spider_tier >= 3) + ai_ventcrawls = 0 // means that pre-spawned bosses on away maps won't ventcrawl. Necessary to keep prince/mother in one place. + if(istype(get_area(src), /area/awaymission/UO71)) // if we are playing the away mission with our special spiders... + spider_uo71 = 1 + if(world.time < 600) + // these are static spiders, specifically for the UO71 away mission, make them stay in place + ai_ventcrawls = 0 + spider_placed = 1 + wander = 0 else ts_count_alive_station++ // after 30 seconds, assuming nobody took control of it yet, offer it to ghosts. diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm index 191eed19c47..9d8091c202b 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm @@ -1,4 +1,3 @@ - // -------------------------------------------------------------------------------- // ----------------- TERROR SPIDERS: T2 WHITE TERROR ------------------------------ // -------------------------------------------------------------------------------- @@ -12,7 +11,7 @@ name = "White Terror spider" desc = "An ominous-looking white spider, its ghostly eyes and vicious-looking fangs are the stuff of nightmares." spider_role_summary = "Rare, bite-and-run spider that infects hosts with spiderlings" - + ai_target_method = TS_DAMAGE_POISON icon_state = "terror_white" icon_living = "terror_white" icon_dead = "terror_white_dead" @@ -25,6 +24,18 @@ loot = list(/obj/item/clothing/accessory/medal) +/mob/living/simple_animal/hostile/poison/terror_spider/white/LoseTarget() + stop_automated_movement = 0 + attackstep = 0 + attackcycles = 0 + ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/white/death(gibbed) + if(!hasdied) + if(spider_uo71) + UnlockBlastDoors("UO71_Bridge", "UO71 Bridge is now unlocked!") + ..() + /mob/living/simple_animal/hostile/poison/terror_spider/white/spider_specialattack(mob/living/carbon/human/L, poisonable) if(!poisonable) ..() @@ -35,6 +46,9 @@ if(!IsInfected(L)) visible_message("[src] buries its long fangs deep into the [inject_target] of [L]!") new /obj/item/organ/internal/body_egg/terror_eggs(L) + if(!ckey) + LoseTarget() + walk_away(src,L,2,1) /mob/living/simple_animal/hostile/poison/terror_spider/proc/IsInfected(mob/living/carbon/C) // Terror AI requires this if(C.get_int_organ(/obj/item/organ/internal/body_egg)) diff --git a/config/example/away_mission_config.txt b/config/example/away_mission_config.txt index f440c9a231a..20e371184df 100644 --- a/config/example/away_mission_config.txt +++ b/config/example/away_mission_config.txt @@ -20,6 +20,7 @@ #===================================# # USABLE AWAY MISSIONS # #===================================# + _maps/map_files/RandomZLevels/beach.dmm _maps/map_files/RandomZLevels/listeningpost.dmm _maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -28,6 +29,7 @@ _maps/map_files/RandomZLevels/academy.dmm _maps/map_files/RandomZLevels/blackmarketpackers.dmm _maps/map_files/RandomZLevels/spacehotel.dmm _maps/map_files/RandomZLevels/wildwest.dmm +_maps/map_files/RandomZLevels/terrorspiders.dmm #===================================# # SPECIAL AWAY MISSIONS # diff --git a/paradise.dme b/paradise.dme index 15ba163910a..a3e1a72ac6f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1114,6 +1114,7 @@ #include "code\modules\awaymissions\mission_code\spacehotel.dm" #include "code\modules\awaymissions\mission_code\spacehotel_npcs.dm" #include "code\modules\awaymissions\mission_code\stationCollision.dm" +#include "code\modules\awaymissions\mission_code\UO71-terrorspiders.dm" #include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\client\asset_cache.dm" #include "code\modules\client\client defines.dm" @@ -1733,6 +1734,7 @@ #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\actions.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\black.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\chem.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\empress.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\ghost.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\gray.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\green.dm" @@ -1743,6 +1745,7 @@ #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\queen.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\red.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\reproduction.dm" +#include "code\modules\mob\living\simple_animal\hostile\terror_spiders\terror_ai.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\terror_spiders.dm" #include "code\modules\mob\living\simple_animal\hostile\terror_spiders\white.dm" #include "code\modules\mob\new_player\login.dm" From 90582774cc4d9445f852a2832ec78b7fa5243c24 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 14 Feb 2017 01:49:36 -0800 Subject: [PATCH 029/308] Fixes --- _maps/map_files/RandomZLevels/terrorspiders.dmm | 14 +++++++------- .../hostile/terror_spiders/actions.dm | 2 +- .../hostile/terror_spiders/queen.dm | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/_maps/map_files/RandomZLevels/terrorspiders.dmm b/_maps/map_files/RandomZLevels/terrorspiders.dmm index db75aec4744..b4f7875bf7f 100644 --- a/_maps/map_files/RandomZLevels/terrorspiders.dmm +++ b/_maps/map_files/RandomZLevels/terrorspiders.dmm @@ -170,7 +170,7 @@ "dn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) "do" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) "dp" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "green"},/area/awaymission/UO71/plaza) -"dq" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/mask/bandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"dq" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/device/plant_analyzer,/obj/item/clothing/mask/bandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) "dr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaymission/UO71/plaza) "ds" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "271"},/obj/item/weapon/storage/belt/security,/obj/item/device/flash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) "dt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 7; tag = "icon-manifold-r-f (WEST)"},/obj/structure/stool/bed/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) @@ -185,9 +185,9 @@ "dC" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) "dD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) "dE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) -"dF" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) +"dF" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaymission/UO71/plaza) "dG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaymission/UO71/plaza) -"dH" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/clothing/suit/apron,/obj/item/clothing/mask/bandana,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) +"dH" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "271"},/obj/item/clothing/suit/apron,/obj/item/clothing/mask/bandana,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaymission/UO71/plaza) "dI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) "dJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Security Checkpoint Maintenance"; req_access_txt = "271"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/plaza) "dK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; initialize_directions = 14; tag = "icon-manifold-b-f (NORTH)"},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaymission/UO71/plaza) @@ -596,6 +596,7 @@ "lx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) "ly" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) "lz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/gateway) +"lA" = (/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/device/radio/off,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/gun/energy/kinetic_accelerator,/obj/item/borg/upgrade/modkit/damage,/obj/item/borg/upgrade/modkit/chassis_mod/orange,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "lB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) "lC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaymission/UO71/science) "lD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "271"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaymission/UO71/gateway) @@ -1020,6 +1021,7 @@ "tG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "whitehall"},/area/awaymission/UO71/medical) "tH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/UO71/medical) "tI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/rust,/area/awaymission/UO71/medical) +"tJ" = (/obj/machinery/light/small{dir = 4},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/gun/energy/kinetic_accelerator,/obj/item/borg/upgrade/modkit/tracer,/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaymission/UO71/mining) "tK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/science) "tL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{id_tag = "UO71_Armory"; name = "Armory Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) "tM" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access_txt = "271"},/obj/machinery/door/poddoor{id_tag = "UO71_Bridge"; name = "Bridge Lockdown Door"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/bridge) @@ -1254,7 +1256,6 @@ "yi" = (/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{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "yj" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "yk" = (/obj/machinery/suit_storage_unit/mining,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) -"yl" = (/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/device/radio/off,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/gun/energy/kinetic_accelerator/super,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "ym" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/simulated/floor/plating{dir = 5; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) "yn" = (/obj/machinery/mineral/processing_unit_console{machinedir = 8},/turf/simulated/wall/rust,/area/awaymission/UO71/mining) "yo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Mining"; dir = 4; network = list("UO71")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) @@ -1262,7 +1263,6 @@ "yq" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "yr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "floorgrime"},/area/awaymission/UO71/mining) "ys" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) -"yt" = (/obj/machinery/light/small{dir = 4},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/gun/energy/kinetic_accelerator/super,/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaymission/UO71/mining) "yu" = (/obj/machinery/conveyor{dir = 2; id = "UO71_mining"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 4; heat_capacity = 1e+006; icon_state = "warnplate"},/area/awaymission/UO71/mining) "yv" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) "yw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 7; tag = "icon-manifold-b-f (WEST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaymission/UO71/mining) @@ -1447,8 +1447,8 @@ aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababab aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwTxKxLwWxMxNxOxPwuabababababababababnpxQxRxSxTxUnpababababababababababababababababababababababababababaaaaaaaaaaaaaa aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuwuwvwvwvwvwuxVxWwuabababababababababnpxXxYxZnpnpnTababababababababababababababababababababababababababaaaaaaaaaaaaaa aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyaybycydyewvwvwuwuwuabababababnpnTnTnpnpababababababababababababababababababababababababababababaaaaaaaaaaaaaa -aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyfygyhydyiyjykykylwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa -aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvymynyoxkypyqyrysytwvababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyfygyhydyiyjykyklAwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvymynyoxkypyqyrystJwvababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyuygyvywyxyyyzyAyBwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwuyayCyDyEyFyjyGyHyIwvababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwvyayJyKyLyMwuwuwvwuwuababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index d1f38bbd0eb..096e717c6d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -114,7 +114,7 @@ /obj/effect/spider/terrorweb/proc/DeCloakNearby() for(var/mob/living/simple_animal/hostile/poison/terror_spider/gray/G in view(6,src)) - if(G.stat != DEAD) + if(!G.ckey && G.stat != DEAD) G.GrayDeCloak() G.Aggro() 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 36587125a58..64fb9e098ea 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 @@ -130,18 +130,18 @@ visible_message("\The [src] looks around, searching for the vent that should be there, but isn't. A bluespace portal forms on her, and she is gone.") qdel(src) new /obj/effect/portal(get_turf(loc)) - else if(1) + if(1) if(world.time > (lastnestsetup + nestfrequency)) lastnestsetup = world.time - NestMode() neststep = 2 - else if(2) + NestMode() + if(2) if(world.time > (lastnestsetup + nestfrequency)) lastnestsetup = world.time spider_lastspawn = world.time DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2, 0) neststep = 3 - else if(3) + if(3) if(world.time > (spider_lastspawn + spider_spawnfrequency)) if(prob(20)) var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) @@ -149,7 +149,7 @@ spider_lastspawn = world.time DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 0) neststep = 4 - else if(4) + if(4) if(world.time > (spider_lastspawn + spider_spawnfrequency)) if(prob(20)) var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) @@ -159,7 +159,7 @@ spider_lastspawn = world.time DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1) neststep = 5 - else if(5) + if(5) if(world.time > (spider_lastspawn + spider_spawnfrequency)) if(prob(20)) var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) @@ -176,7 +176,7 @@ var/spidercount = CountSpiders() if(spidercount >= spider_max_per_nest) // station overwhelmed! neststep = 6 - else if(6) + if(6) if(world.time > (spider_lastspawn + spider_spawnfrequency)) spider_lastspawn = world.time // go hostile, EXTERMINATE MODE. @@ -193,7 +193,7 @@ neststep = 7 spider_spawnfrequency = spider_spawnfrequency_stable // if we're an away mission queen... don't keep spawning spiders at high rates. Away team should have a chance. - else if(7) + if(7) if(world.time > (spider_lastspawn + spider_spawnfrequency)) spider_lastspawn = world.time var/numspiders = CountSpiders() From 05f490d5afbebafec701881638f0db9989c8f8e0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 14 Feb 2017 03:08:54 -0800 Subject: [PATCH 030/308] Allows dead ventdrag, lets queens bite spiders, refactors empress - Allows people to drag dead bodies through webs. - Allows queens and higher to bite normal spiders. They cannot bite back. Spider discipline! - Massively refactors empress to use buttons instead of verbs. Removes many empress abilities. --- .../hostile/terror_spiders/actions.dm | 4 +- .../hostile/terror_spiders/empress.dm | 122 +++--------------- .../hostile/terror_spiders/queen.dm | 2 +- .../hostile/terror_spiders/terror_spiders.dm | 4 +- 4 files changed, 27 insertions(+), 105 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 096e717c6d8..4edccfc6892 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -124,9 +124,11 @@ if(istype(mover, /obj/item/projectile/terrorqueenspit)) return 1 if(isliving(mover)) + var/mob/living/M = mover + if(M.stat == DEAD) + return 1 if(prob(80)) to_chat(mover, "You get stuck in [src] for a moment.") - var/mob/living/M = mover M.Stun(4) // 8 seconds. M.Weaken(4) // 8 seconds. DeCloakNearby() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index b3a0089170b..5a62d95d9f8 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -4,7 +4,7 @@ // -------------------------------------------------------------------------------- // -------------: ROLE: ruling over planets of uncountable spiders, like Xenomorph Empresses. // -------------: AI: none - this is strictly adminspawn-only and intended for RP events, coder testing, and teaching people 'how to queen' -// -------------: SPECIAL: Lay Eggs ability that allows laying queen-level eggs. Wide-area EMP and light-breaking abilities. +// -------------: SPECIAL: Lay Eggs ability that allows laying queen-level eggs. // -------------: TO FIGHT IT: run away screaming? // -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 @@ -25,15 +25,18 @@ rapid = 1 canlay = 1000 spider_tier = TS_TIER_5 - var/phasing = 0 + var/datum/action/innate/terrorspider/queen/empress/empresslings/empresslings_action + 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) /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/handle_automated_action() return -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/LayEmpressEggs() - set name = "Lay Empress Eggs" - set category = "Spider" - set desc = "Lay spider eggs. As empress, you can lay queen-level eggs to create a new brood." +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/NestMode() + ..() + queeneggs_action.button.name = "Empress Eggs" + queenfakelings_action.button.name = "Empress Lings" + +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/LayQueenEggs() var/eggtype = input("What kind of eggs?") as null|anything in list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE) var/numlings = input("How many in the batch?") as null|anything in list(1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50) if(eggtype == null || numlings == null) @@ -61,87 +64,7 @@ else to_chat(src, "Unrecognized egg type.") -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressScreech() - set name = "Empress Screech" - set category = "Spider" - set desc = "Emit horrendusly loud screech which breaks lights and cameras in a massive radius. Good for making a spider nest in a pinch." - for(var/obj/machinery/light/L in range(14, src)) - if(L.on) - L.broken() - for(var/obj/machinery/camera/C in range(14, src)) - if(C.status) - C.toggle_cam(src, 0) - -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressToggleDebug() - set name = "Toggle Debug" - set category = "Spider" - set desc = "Enables/disables debug mode for spiders." - if(spider_debug) - spider_debug = 0 - to_chat(src, "Debug: DEBUG MODE is now OFF for all spiders in the world.") - else - spider_debug = 1 - to_chat(src, "Debug: DEBUG MODE is now ON for all spiders in the world.") - for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) - T.spider_debug = spider_debug - -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressToggleInstant() - set name = "Toggle Instant" - set category = "Spider" - set desc = "Enables/disables instant growth for spiders." - if(spider_growinstantly) - spider_growinstantly = 0 - to_chat(src, "Debug: INSTANT GROWTH is now OFF for all spiders in the world.") - else - spider_growinstantly = 1 - to_chat(src, "Debug: INSTANT GROWTH is now ON for all spiders in the world.") - for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) - T.spider_growinstantly = spider_growinstantly - -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EmpressKillSpider() - set name = "Erase Spider" - set category = "Spider" - set desc = "Kills a spider. If they are player-controlled, also bans them from controlling any other spider for the rest of the round." - var/choices = list() - for(var/mob/living/simple_animal/hostile/poison/terror_spider/L in ts_spiderlist) - if(L == src) - continue - if(L.stat == DEAD) - continue - choices += L - var/killtarget = input(src, "Which terror spider should die?") in null|choices - if(!killtarget) - return - else if(!isliving(killtarget)) - to_chat(src, "[killtarget] is not living.") - else if(!istype(killtarget, /mob/living/simple_animal/hostile/poison/terror_spider)) - to_chat(src, "[killtarget] is not a terror spider.") - else - var/mob/living/simple_animal/hostile/poison/terror_spider/T = killtarget - if(T.ckey) - // living player - ts_ckey_blacklist += T.ckey - to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") - T.gib() - -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/EraseBrood() - set name = "Erase Brood" - set category = "Spider" - set desc = "Debug: kill off all other spiders in the world. Takes two minutes to work." - for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) - if(T.spider_tier < spider_tier) - T.degenerate = 1 - to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") - for(var/obj/effect/spider/eggcluster/terror_eggcluster/T in ts_egg_list) - qdel(T) - for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list) - T.stillborn = 1 - to_chat(src, "Brood will die off shortly.") - -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/verb/SpiderlingFlood() - set name = "Spiderling Flood" - set category = "Spider" - set desc = "Debug: Spawns N spiderlings. They grow into random spider types (red/green/gray/white/black). Pure horror!" +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/QueenFakeLings() var/numlings = input("How many?") as null|anything in list(10, 20, 30, 40, 50) var/sbpc = input("%chance to be stillborn?") as null|anything in list(0, 25, 50, 75, 100) for(var/i=0, i[src] steps into a bluespace portal!", "You step into the realm of nightmares.") - incorporeal_move = 1 - alpha = 0 - else - visible_message("[src] steps out of a bluespace portal!", "You return from the realm of nightmares.") - incorporeal_move = 0 - alpha = 255 - new /obj/effect/effect/bad_smoke(loc) \ No newline at end of file +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/proc/EraseBrood() + for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) + if(T.spider_tier < spider_tier) + T.degenerate = 1 + to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") + for(var/obj/effect/spider/eggcluster/terror_eggcluster/T in ts_egg_list) + qdel(T) + for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list) + T.stillborn = 1 + to_chat(src, "Brood will die off shortly.") + 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 64fb9e098ea..4b9551e7ace 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 @@ -335,5 +335,5 @@ if(L.reagents) if(L.can_inject(null, 0, "chest", 0)) L.reagents.add_reagent("terror_queen_toxin", 15) - if(!istype(L, /mob/living/simple_animal/hostile/poison/terror_spider)) + if(!isterrorspider(L)) L.adjustToxLoss(30) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index e1eea163a5b..7e96a464325 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -157,11 +157,11 @@ var/global/list/ts_spiderling_list = list() enemies -= target var/mob/living/simple_animal/hostile/poison/terror_spider/T = target if(T.spider_tier > spider_tier) - visible_message("[src] bows in respect for the terrifying presence of [target].") + visible_message("[src] cowers before [target].") else if(T.spider_tier == spider_tier) visible_message("[src] nuzzles [target].") else if(T.spider_tier < spider_tier && spider_tier >= 4) - visible_message("[src] gives [target] a stern look.") + target.attack_animal(src) else visible_message("[src] harmlessly nuzzles [target].") T.CheckFaction() From 39ccbbb0221f910dbba8280bef02f04e80197e9c Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 15 Feb 2017 03:09:33 -0800 Subject: [PATCH 031/308] Clarifies that greens only get fed, and spiders only get regen boost, from human/ type prey --- .../living/simple_animal/hostile/terror_spiders/actions.dm | 5 ++++- .../mob/living/simple_animal/hostile/terror_spiders/green.dm | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 4edccfc6892..66a81e7eb59 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -197,12 +197,15 @@ if(iscarbon(L)) regen_points += regen_points_per_kill fed++ + visible_message("[src] sticks a proboscis into [L] and sucks a viscous substance out.") + to_chat(src, "You feel invigorated!") + else + visible_message("[src] wraps [L] in a web.") large_cocoon = 1 last_cocoon_object = 0 L.loc = C C.pixel_x = L.pixel_x C.pixel_y = L.pixel_y - visible_message("[src] sticks a proboscis into [L] and sucks a viscous substance out.") break if(large_cocoon) C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm index 9b8561bf922..ace7509ccdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -34,7 +34,7 @@ if(E) to_chat(src, "There is already a cluster of eggs here!") else if(fed < feedings_to_lay) - to_chat(src, "You must wrap more prey before you can do this!") + to_chat(src, "You must wrap more humanoid prey before you can do this!") else visible_message("[src] begins to lay a cluster of eggs.") if(prob(33)) From d3444658c99bc0591a6060eee40a5e7107869d4c Mon Sep 17 00:00:00 2001 From: allfd Date: Wed, 15 Feb 2017 22:11:32 -0500 Subject: [PATCH 032/308] Fixes cough and sneeze oversight --- code/modules/mob/living/carbon/human/species/station.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index c07a3667a02..bdceaaa27a0 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -298,6 +298,10 @@ scream_verb = "shrieks" male_scream_sound = 'sound/voice/shriek1.ogg' female_scream_sound = 'sound/voice/shriek1.ogg' + male_cough_sounds = 'sound/voice/shriek1.ogg' + female_cough_sounds = 'sound/voice/shriek1.ogg' + male_sneeze_sound = 'sound/voice/shriek1.ogg' + female_sneeze_sound = 'sound/voice/shriek1.ogg' icon_skin_tones = list( 1 = "Default Green", From 8a7b1ad2fcdd37da2d813159e7e8fd24318a8111 Mon Sep 17 00:00:00 2001 From: allfd Date: Wed, 15 Feb 2017 22:46:10 -0500 Subject: [PATCH 033/308] Fix list issue --- code/modules/mob/living/carbon/human/species/station.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index bdceaaa27a0..1e86cbda7e2 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -298,8 +298,8 @@ scream_verb = "shrieks" male_scream_sound = 'sound/voice/shriek1.ogg' female_scream_sound = 'sound/voice/shriek1.ogg' - male_cough_sounds = 'sound/voice/shriek1.ogg' - female_cough_sounds = 'sound/voice/shriek1.ogg' + male_cough_sounds = list('sound/voice/shriek1.ogg') + female_cough_sounds = list('sound/voice/shriek1.ogg') male_sneeze_sound = 'sound/voice/shriek1.ogg' female_sneeze_sound = 'sound/voice/shriek1.ogg' From eb1f49518d0c84e57ce299ae49ffd6fa34a5a312 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 16 Feb 2017 02:53:31 -0800 Subject: [PATCH 034/308] Moves some blob start locations --- _maps/map_files/cyberiad/cyberiad.dmm | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 532fcd6f9bc..a909af22e79 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -2201,7 +2201,7 @@ "aQq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aQr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aQs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"aQt" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aQt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aQu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aQv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aQw" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -2230,7 +2230,7 @@ "aQT" = (/obj/machinery/door/airlock/engineering{name = "Electrical Maintenance"; req_access_txt = "11"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) "aQU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) "aQV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/maintenance/electrical) -"aQW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) +"aQW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/electrical) "aQX" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) "aQY" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/electrical) "aQZ" = (/obj/structure/table,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/device/assembly/prox_sensor{pixel_x = -5; pixel_y = 5},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -2693,7 +2693,7 @@ "aZO" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aZP" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aZQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/crew_quarters/toilet) -"aZR" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/toilet) +"aZR" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aZS" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/recharge_station,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aZT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall,/area/crew_quarters/bar) "aZU" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -3363,7 +3363,7 @@ "bmI" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor/wood,/area/library) "bmJ" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "Library East"; dir = 8; network = list("SS13")},/turf/simulated/floor/wood,/area/library) "bmK" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) -"bmL" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) +"bmL" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) "bmM" = (/obj/structure/cult/tome,/obj/item/device/videocam,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) "bmN" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) "bmO" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) @@ -5638,7 +5638,7 @@ "cev" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "cew" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "cex" = (/obj/machinery/alarm/server{dir = 4; pixel_x = -22; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) -"cey" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) +"cey" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "cez" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "ceA" = (/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) "ceB" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) @@ -6752,7 +6752,7 @@ "czR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/tech) "czS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/storage/tech) "czT" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/tech) -"czU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark{name = "blobstart"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/storage/tech) +"czU" = (/obj/machinery/atmospherics/unary/portables_connector{layer = 2},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "czV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plasteel,/area/engine/controlroom) "czW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "czX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) @@ -6812,7 +6812,7 @@ "cAZ" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{frequency = 1449; id_tag = "incinerator_access_control"; name = "Incinerator Access Console"; pixel_x = -26; pixel_y = 6; req_access_txt = "12"; tag_exterior_door = "incinerator_airlock_exterior"; tag_interior_door = "incinerator_airlock_interior"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -24; pixel_y = -6},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cBa" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cBb" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cBc" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cBc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/storage/tech) "cBd" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cBe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cBf" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -7625,6 +7625,7 @@ "cQG" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{dir = 8; id_tag = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior) "cQH" = (/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},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/equipmentstorage) "cQI" = (/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) +"cQJ" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cQK" = (/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) "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) @@ -7747,6 +7748,7 @@ "cSZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/engine/chiefs_office) "cTa" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cTb" = (/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) +"cTc" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cTd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "cTe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) "cTf" = (/obj/machinery/camera{c_tag = "Engineering Equipment East"; dir = 8; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/engineeringcart,/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) @@ -9210,14 +9212,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIclCclDclEbRybRAclFbRyclGclHbRAbPIbPIbYuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceYcincincinceYbYPclIclJclKckmcfbcfbclLclMclNclOclPclPclPclQcgQcgQcgQcizcgSclRcktclScktclTcgWckvckwclUckwclVcgWclWclXclYchcclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmnchhcfIccuccucmockPckQcmpcmqcmrcjlcmscmtcmucmvcmwcmxcmycmzcmAcmBcmCcmDcjucmEchxcmFcmGcmHcmIcmJcmKcmLclpcllcmMcjGcjGcjGcmNcmOclpcbjcmPccZclrclrcbjcmQcmRcbnbPtcmScmTcmUcgscmVcmWcmXcmYcmZcnacnbcgucnccndcnecgucgscgscgscgscgscgscgscgsaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacnfcieclzciecieckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIbPIbPIbPIbPIbPIbPIbPIbPIbPIbYuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabafOcgQcngcngcgQcngcngcgQaaaaaacgAcnhcnicnjcgAbYPbYPbYPcamcnkcnlcnmcnmcnmcamcamcgQcnncnocnpcnqcgQcnrcnscgSclRcktcktcktcntcgWckvckwckwcnucnvcnwcnxcnycnzchcchcchcchcchccnAchcchccnBcnCchhchhcnDchhchkchhchhcaAcnEcnEcaAcnFcnGcnHcnIcnJcnKcnLcnMcnNcnObQVcnPcmycmzcnQcnRcnScnTcnUcnVchxcnWcnXcnYcnZcoacobcoccodcoecodcofcofcofcodcogcodcodcohcoiclrclrcbjcojclscbncbucolcomconceAcopcoqcoqcorcoscotcoucovcowcoxcoycozcoAcoBcoCcoDcoEcoFcoGcoHaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaacidciecoIcoJcoJckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaacgQcoKcoLcgQcoKcoLcgQaaaaaacoMceXcoNceXcoOaaaaabaaacamcamcamcamcamcamcamcoPcgQcoQcoRcoScoTclPcoUcoVcgScoWcoXcoYcktcoZcpacpbcpccpdcpecpfcgWcpgcphcpicpjcpkcpkcpkcpkcplcpmcpncpocpocppcppcpqcprcpschfcaAcptcpucpvcpwcpxckQcpycnIcpzcpAcpBcpCceicpDcpEcpFcpGcpHcpHcpIcpHcpHcpHcpJchxcpKcpLcpMcpNcpOcpPcpQcpRcpScpRcpTcpUcpVcpRcpWcpXcodcpYcpZcdacbjcbjcqacqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncqocqpcqqcqrcqqcqscqrcqrcqrcgEcqucqvcqwcqxaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacieciecqyckbckbckbckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOaaaafOcgQcqzcoLcgQcqzcoLcgQaaaaaaaabaabaabaabaabaabaabaabaabcgQcoLcqAcqBcgQcqCcqDcgQcqEcgQcgQcqFcgQcgQcqGcgScqHcqIcqJcqKcqLcqMcqNcqOcqPcqQcqRcpacqScqTcqUcqVcqWcqWcqWcqWcqXcqYcqZcracrbcracrccrdcrecrfcrgcrhcricrjcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrwcrxcrybXubXucrzcrAcrBcrtcrCcrDcrDcrEcrDcrFcrGcrHcrIcpRcrJcrKcrLcrMcrLcrNcrOcrPcodcbjcgUcbjcbjcrRcrSclsbLRbPtcgscrTcgscgscrUcrVcrWcrXcrYcqrcrZcsacsbcqkcsbcqkcsccqkcqkcgscsdcsecsfcsgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaacieckbckbckbckbckbckbcshckbcsickbckbckbckbckbciecieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafOaaaafOcgQcqzcoLcgQcqzcoLcgQaaaaaaaabaabaabaabaabaabaabaabaabcgQcoLcqAcqBcgQcqCcqDcgQcqEcgQcgQcqFcgQcgQcqGcgScqHcqIcqJcqKcqLcqMcqNcqOcqPcqQcqRcpacqScqTcqUcqVcqWcqWcqWcqWcqXcqYcqZcracrbcracrccrdcrecrfcrgcrhcricrjcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrwcrxcrybXubXucrzcrAcrBcrtcrCcrDcrDcrEcrDcrFcrGcrHcrIcpRcrJcrKcrLcrMcrLcrNcrOcrPcodcbjcgUcbjcbjcrRcrSclsbLRbPtcgscrTcgscgscrUcrVcrWcrXcrYcqrcrZcsacsbcqkcsbcqkczUcqkcqkcgscsdcsecsfcsgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaacieckbckbckbckbckbckbcshckbcsickbckbckbckbckbciecieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcsjafOaabaMraMrafOcgQcgQcqFcgQcgQcqFcgQcgQcgQcngcngcngcgQcgQcgQcgQcgQcgQcgQcoLcskcslcgQcsmcgQcgQcsncgQcsocspcoLcgQcsqcgScsrcsscstclRcsucsvcswckvcsxcsycszcsvcsAcsBcsCcsDcsDcsEcsFcsGcsHcsIcsJcsKcsLcsMchfcsNcsLcsLcsOcsPcsQcsRcsScrlcsTcsUcsVcsWcsXcsYcsZctactbcsYcsYctcctdctdctdctdctdctectfctgcthcthctictjctkctlctmctncpRctoctpctqctrctqctscttcrLctuctvctwbLRctxbLRcrSclsbLRbIictyctzctAcgscgscgscgscgsctBcqkctCctDcsccqkctEcqkclucqkctFcgsctGctHctIcgsaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaciectJctJctJctJctJctJctKckbctLctJcsickbckbckbckbcieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOafOcngcoLcoLcoLcoLctMctNcoLcoLcoQctOctOctPctOctOctOctOctOctOctOctOctOctOctOctOcoRcgQcskcqzctQcgQcsqctRctRctRctRctRctRcgWcgWcgWcgWcgWcgWcgWctSctTctUcgYctWctXctYctYctZcuacsJcsLcsLcubcuccudcsLcsLcsLcuecufcugcrjcuhcuicujctdcukculcumcecculcuncuocuocuocupcuqcuqcuqcuqcurcusceccutcuucuvcuwcuxcuycuzcuAcpRcuBcuCcrLcuDcrLcuEcuFcuGchUcuIcuJcuKbLRcuLcrSclscuMbIibPAcuNcuOcuPcuQbGGbGGcgscuRcuScuTcuUcuVcuWcuXcuYcuZcvacvbcgscvccvdcvecvfaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaacvgcjZcjZcjZcjZcjZcjZcjZcvhcvickbckbckbckbcvjckccieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabafOaabaabafOcngcvkcvlcvmcoLcoLcvncoLcoLcsncgQcgQcgQcgQcgQcgQcqFcgQcgQcgQcgQcvocvocvocvocvocvocvocvocvocgQcsqcvpaaaaaaaaaaaacvqcvrcvscvtcvucvvcvwcvxcvycvzcvAcvBcvCcvDcvEcvEcvFcvGcvHcvIcvIcvIcvIcvJcvIcsLcsLcaAcvKcvLcvMcvNcvOcvPcuxcvQcvRcvScvTcvUcvVcvWcuqcuocvXcvYcvYcvYcvYcvZcwacwbcwccwdcwecwfcwgbQVcwhcwicpRcwjcwkcwlcwmcwncrLcwocpRcpRbIicwpbIibIibIicwqcwrcwsbIibGGcuNcwtcwucuQcuQcuQcgscgscgscgscgscgscgscgscgscgscgscgscgscgscgscgscgsaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaciecoJcoJcoJcoJcoJcoJcwvckbcoIcoJcwwckbckbckbckbcieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgQcwxcwxcwxcwxcwxcwxcwycwxcsncwzcgQcoLcwAcwBcwCcoLcwCcwDcwEcwBcvocwFcwFcvocwGcvocwHcwIcvocoLcqGcngaaacwJcwKcwLcwMcwNcwOcwPcwQcwRcwScwTcwUcwVcwWchVcwYcwZcxacxbcxccxdcvHcxecxfcxfcxfcxgcvIcsLcsLcxhcxhcxhcxhcxicxhcxjcxjcxkcxhcxhcxlcxhcxmcxncxocxpcxocxqcxrcxscxtcxucxvcxwcxxcxycxzcxAcxBcxCcxDcpscpRcpRcxEcpRcxFcpRcxGcxHcxIcsMcxJcxKcxLcxMcxNcxOcxPcxQcxNbGGcuNcxRbGGbGGcxScxTcxUctybGGbGGbGGbGGbGGbGGbGGcxVcxWbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacieckbckbckbckbckbckbcshckbcwwckbckbckbckbckbciecieaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxXcxYcxYcxYcxYcxYcxYcxZcyacybcyccydcyecyfcwycsncygcgQcoLcyhcwBcoLcoLcoLcwDcqBcwBcvocwFcyicwIcwIcyjcwIcykcvocylcqGcngaaacymcyncyocypcyqcwOcyrcyscytcyucvxcyvcsBcywcvBcyxctYcyyctYcyzcyAcyBcyCcyDcyDcyDcyEcvIcsLcsLcxhcyFcyGcyHcyIcyJcyKcyKcyLcyMcyNcyOcyPcyQcyRcyScyTcyUcyVcyWcyXcyYcyZczaczbcxBczcczdczecxxczfczgczhczicziczjczkczlczmcznczoczmczmczmczpczmczmczqczrczscztczuczvczwczxczyczyczzczyczyczyczyczAczBczyczyczyczCczDbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacieciecqyckbckbckbckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczEczFczFczFczFczGczHczIczJczKczKczLcwxcsncoLcqFcoLcoLcoLcoLcoLcoLcoLcoLcoLcvocvocwIczMcwIcvocwIczMcvoczNcsqcngaaacymczOczPczQczRczSczTczUczRczRchWczWczXczYczZczZcAacAbctYcAccAdcyBcyDcyDcyDcyDcAecvIcsLcsLcxhcAfcAgcAhcAicAjcAkcAkcAlcAmcAncAocyKcApcxhcAqcuocArcvYcAscAtcAucAvcAwcAxcxBcAycAzcAAcxBcABcACcADcAEcAEcAEcAEcAEcAFcAGcAHcAIcAJcAJcAKcAKcAJcALcokcqtcoocAPcAPcAQcARcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAScATcAUbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnfcieciectJctJckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcAWcAXcAYcAXcAZcBacBbcBccBdcBecwxcsncgQcgQcBfcngcngcngcngcngcngcngcBgcvocwIcwIcwIcwIcBhcwIcwIcvocygcqGcngaaacymcBicBjcBkcBlcwOcBmcBncBocBpcvxcyvcsBcnycBqcsDcrQcsDcvBcvBcvBcBscBtcyDcyDcBucBvcvIcsLcBwcxhcBxcBycBzcBAcBAcBBcBCcBDcBAcBAcBEcyKcBFcxhcBGcuocBHcvYcvYcBIcvYcvYcAwcBJcxBcBKcBLcBMcxBcBNcBOcBwcBPcBPcBPcBPcBPcBQcBQcBQcBPcBPaaaaaaaaaaaacBRcBScBTcBUcAPcBVcBWcBXcBYcBZcCacCbcCccCdcCecCfcCgcChcCicAPcAScCjcCkcClcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCncCocieclzcieckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczEczFczFczFczFczGczHczIczJczKczKczLcwxcsncoLcqFcoLcoLcoLcoLcoLcoLcoLcoLcoLcvocvocwIczMcwIcvocwIczMcvoczNcsqcngaaacymczOczPczQczRczSczTcBcczRczRchWczWczXczYczZczZcAacAbctYcAccAdcyBcyDcyDcyDcyDcAecvIcsLcsLcxhcAfcAgcAhcAicAjcAkcAkcAlcAmcAncAocyKcApcxhcAqcuocArcvYcAscAtcAucAvcAwcAxcxBcAycAzcAAcxBcABcACcADcAEcAEcAEcAEcAEcAFcAGcAHcAIcAJcAJcAKcAKcAJcALcokcqtcoocAPcAPcAQcARcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAPcAScATcAUbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnfcieciectJctJckbckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcAWcAXcAYcAXcAZcBacBbcQJcBdcBecwxcsncgQcgQcBfcngcngcngcngcngcngcngcBgcvocwIcwIcwIcwIcBhcwIcwIcvocygcqGcngaaacymcBicBjcBkcBlcwOcBmcBncBocBpcvxcyvcsBcnycBqcsDcrQcsDcvBcvBcvBcBscBtcyDcyDcBucBvcvIcsLcBwcxhcBxcBycBzcBAcBAcBBcBCcBDcBAcBAcBEcyKcBFcxhcBGcuocBHcvYcvYcBIcvYcvYcAwcBJcxBcBKcBLcBMcxBcBNcBOcBwcBPcBPcBPcBPcBPcBQcBQcBQcBPcBPaaaaaaaaaaaacBRcBScBTcBUcAPcBVcBWcBXcBYcBZcCacCbcCccCdcCecCfcCgcChcCicAPcAScCjcCkcClcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCmcCncCocieclzcieckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcCpcCqcCrcCsczJcCtcCucCvczJcCwctVcCycskcgQcoLcngaaaaaaaaaaaaaaacngcoLcCzcwFcCAcwIcwIcwIcwIcCBcCCcCDcCEcngaaacCFcwKcCGcwMcCHcwOcwOcCIcCJcCKcCLcCMcCNcCOcBqcsDcCPcCQcCRcCScCTcvHcCUcyDcyDcyDcCVcvIcsLcsLcCWcCWcCXcCYcCZcCZcDacDbcDccDdcDdcDecDfcDgcDfcAqcuocArcDhcDicDjcDkcDlcAwcDmcxBcDncDocDpcxBcsLcBOcBPcBPaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDqcDrcDscDtcDucDvcDwcDwcDxcDwcDwcDwcDwcDwcDycDzcDAcDBcDCbGHcDDcjUbGHbGHaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciecDEcDFcDGciecieckbckbcDHckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcDIcAXcDJcAXcDKcDLcDMcDNcBbcDOcwxcDPcqBcgQcqzcvpaaaaaaaaaaaaaaacvpcDQcvocDRcDRcwFcDScDTcwIcDUcvocoLcqGcvpaaaaaaaaaaaacvqcDVcDWcDXcDXcvxcDYcvxcDZcsBcnycEacEbcEccEdcEecEecEecuHcEgcyDcEhcyDcEicvIcsLcsLcCWcEjcEkcElcEmcEncEocCWcEpcEqcErcEscEtcEucDfcEvcEwcExcDhcEycEzcEAcEBcECczbcxBcEDcEEcEFcxBcsLcBOcBPaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDqcEHcEIcEJcwXcELcEMcENcEOcDwcDwcEPcDwcDwcDycDAcDAcDAcEQbGHcERbGGbGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciccEScETclAcidciecieckbckcckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEUcEUcEUcEUcEUcwxcEVcEWcEWcEWcEWcEWaXpcEYcEYcEYcEWcEWcEWcEWcEWcEWcEWcEYcEYcEYcvocvocvocvocvocvocvocqFcEZcFacFacFacFacFacvqcvxcvxcvxcvxcvxcvxcvxcFbcsBcnycFccFdcFecFfcFgcFhcFicFjcFkcFlcFmcFncFocvIcsLcsLcCWcFpcFqcFrcFscFscFtcCWcFucFvcFvcFwcFvcFxcFycFzcFzcFzcFAcFBcFCcFDcDlcFEczbcFFcFFcFFcBPcBPcsLcBOcBQaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaacDqcFHcFIcFJcFKcFLcFMcFNcFOcDwcDwcDwcDwcFPcFQcFRcFScFTcFUbGHcERbGGbGHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacicciccicciccidcidcieciecieciecifaabaabaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9239,7 +9241,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNxcWjcNzaabcNxcWjcNzaaacNxcWjcNzaaaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcXucXucXucXucXucXucXucXvcXucXucSUcXwcXxcVjcWrcUicXycUicUicXzcRRcXAcXBcUrcXCcXDcRRcXEcRXcTecXFcXGcXHcWHcXIcXJcXKcXLcXMcXNcXOcXLcXPcXQcXRcXScSdcXTcXUcXVcXWaabcTocXXcXYcXZcQZcRacBQcYacYbcYbcYbcYccQkcYdcUMcYecYfcURcYgcUTcUTcURcYhcQkcBOcYichfcsLcYjcYkcBPaaaaaacBRcYlcYmcYncYocYlcYmcYpcYqcYlcYmcYrcBRaabaabaabaabaabaabaabaabaabaabbGHcERbGHbGHbGHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabcNxcWjcNzaaacNxcWjcNzaaacNxcWjcNzaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcXucYtcYtcYucYvcYwcYwcYxcYycYycYzcYAcYBcVjcWrcVjcYCcVjcVjcVjcRRcYDcYEcYFcYGcYHcYIcYJcKmcYLcYMcYMcYMcYNcYOcYPcYQcYRcYScVCcQPcYTcYUcYVcYWcYXcSdcXTcYYcYZcZacZbcSncZccWZcWZcQZcRacBQcOYchfchfchfckJcQkcZdcZecZfcZgcURcZhcZicUTcZjcZkcQkcBOcYichfcsLcJGcsLcBPaaaaaacBRcZlcZmcZncxNcZocZpcZqcxNcZrcZscZtcBRaabaabaaaaaaaaaaaaaaaaaaaaaaaabGHcERbGGbGGbGHaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabcNxcWjcNzaaacNxcWjcNzaabcNxcWjcNzaabaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacXucYtcYtcYucZucZucZucZvcZwcZxcSUcZycZzcZAcZBcZCcZDcZEcZFcZFcZGcZHcZIcVjcVjcVjcZJcZKcZLcZMcZNcZOcZPcZQcZRcSUcZScZScZTcVCcQPcZUcZVcZWcZXcZYcSdcZZdaadabdacdadcQZcQZcQZcQZcQZcRacBQcOYdaecsLcsLckJcQkdafcSAcSAdagdahdaidajcUTdakdalcQkcBOcYicMfcsLcuccTBcBPaaaaaacBRcMkcJKcJKcxNcMkcJKcJKcxNcMkcJKcJKcBRaaaaabaabaaaaaaaaaaaaaaacuQcuQbGHdamcuQbGGbGHbGHbGHcTMcTMaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamhaabcNxdancNzaaacNxdancNzaaacNxdancNzaabalvaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcXudaodapcZucZucZudaqdardardardardardardardasdatdaudavdawdawdawdaxdaydazdaAdaBdawdaydaCcMjdaEcZOdaFcZQcZRdaGdaHdaIdaJdaKdaLdaMdaNcYXdaOdaPdaQdaRdaSdaTcWXdaUcSndaVdaWdaWcQZcRacBPcOYchfcBNdaXckJcQkdaYcSAdaZdbacURdbbdbccUTdbddbecQkcBOcYichfcsLchfchfcBPaabaabcBRdbfcKZcJKcxNdbfcKZcJKcxNdbfcKZcJKcBRaaaaaaaabaabaaaaaaaaaaaacuQdbgbGGcERcuQdbhcuQdbibGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamhaabcNxdancNzaaacNxdancNzaaacNxdancNzaabalvaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcXudaodapcTccZucZudaqdardardardardardardardasdatdaudavdawdawdawdaxdaydazdaAdaBdawdaydaCcMjdaEcZOdaFcZQcZRdaGdaHdaIdaJdaKdaLdaMdaNcYXdaOdaPdaQdaRdaSdaTcWXdaUcSndaVdaWdaWcQZcRacBPcOYchfcBNdaXckJcQkdaYcSAdaZdbacURdbbdbccUTdbddbecQkcBOcYichfcsLchfchfcBPaabaabcBRdbfcKZcJKcxNdbfcKZcJKcxNdbfcKZcJKcBRaaaaaaaabaabaaaaaaaaaaaacuQdbgbGGcERcuQdbhcuQdbibGHaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaalvaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcXudbjcZucZucZucZucZudardbkdbldbmdbndbodardbpdbqdbrcXxcVjcVjdbsdbtdbudbvdbwdbxdbydbzcSUdbAdaEcZOdbBcZQdbCcSUdbDcZSdbEbmCcSddaMdaNdbGcSddaPdaQcXTcXUdbHcXWdbIcTodbJdbKdbLcQZcRacBPcOYchfdbMdbMckJcQkcQkdbNdbOcQkdbPcQkcQkcQkcQkcQkcQkcBOcYichfcsLcsLdbQcBPaaaaaacBRdbRcJKcJKcxNdbRcJKcJKcxNdbRcJKcJKcBRaaaaaaaaaaabaabaaaaaadbScuQbGGbGGcERcuQbGGbGGbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwamhalvalvalvalvalwalvalvalwdbTaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXudbUcZwcZucZucZudbVdardbldbWdbXdbYdbZdcadcbdccdcddcecVjdcfdcgdchdcidcjdckdcldcmdcndcodbrcXxdcpdcqcZMdcrcSUdcscZSdctdcucSddaMdaNcYXcSddcvdaQcXTdcwdcxcZadcycSndczdaWdaWcQZcRacBQcOYdcAcuccABckJdcBcQkcQkdcCcQkdcDdcEdcFchfdcGdcHcsLcBOcYichfcsLdcIcTBcBPaaaaaacBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRcBRaaaaaaaaaaaaaabaabaaaaaabGHbGHbGHcERcuQdcJdcKbGGbZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcXucXucXudcLdcMdcMdcMdardcNdcOdcPdcPdcQdcRdawdcSdcTdcUdcVdcWdcXdcYdcZddaddbddcddddcYddeddfddgddhddiddjddkddldbDcZSddmddncSddaMcSdddocSddaPdaQcXTcXUddpcXWdbIcQZcQZcQZcQZcQZcRacBQddqcYccuccTBddrddsddsddsddtchfdduddvddwchfddxcYbcYbddyddzcMfcsLcsLcBPcBPaaaaaaddAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaabaaabGHcJQddBddCcuQddDddEbGGbZZaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From b9772d8b3b1e7c5005fcbcec5a71e5fd3a03771c Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 16 Feb 2017 02:58:39 -0800 Subject: [PATCH 035/308] also removes hop office blobstart --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index a909af22e79..102b2d43e84 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -4617,7 +4617,7 @@ "bKO" = (/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/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/central/west) "bKP" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bKQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/maintcentral) -"bKR" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bKR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bKS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bKT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/bridge/meeting_room) "bKU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/bridge/meeting_room) From a4ab111354740034a07a1fa53f83882bb34bf985 Mon Sep 17 00:00:00 2001 From: Krausus Date: Fri, 17 Feb 2017 01:33:06 -0500 Subject: [PATCH 036/308] Adds shutdown-instead-of-reboot config options These basically exist so we can set the server up to automatically kill itself instead of rebooting. --- code/_globalvars/configuration.dm | 4 ++++ code/controllers/configuration.dm | 8 ++++++++ code/world.dm | 24 +++++++++++++++++++----- config/example/config.txt | 8 +++++++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index 3e2d7d995d6..2d9b9761523 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -19,6 +19,10 @@ var/shuttle_left = 0 var/tinted_weldhelh = 1 var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. +// Command to run if shutting down (SHUTDOWN_ON_REBOOT) instead of rebooting +// It's defined here as a global because this is a hilariously bad thing to have on the easily-edited config datum +var/global/shutdown_shell_command + // Debug is used exactly once (in living.dm) but is commented out in a lot of places. It is not set anywhere and only checked. // Debug2 is used in conjunction with a lot of admin verbs and therefore is actually legit. var/Debug = 0 // global debug switch diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 251494d9f89..c593296c30f 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -189,6 +189,8 @@ var/disable_ooc_emoji = 0 // prevents people from using emoji in OOC + var/shutdown_on_reboot = 0 // Whether to shut down the world instead of rebooting it + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) for(var/T in L) @@ -585,6 +587,12 @@ if("disable_ooc_emoji") config.disable_ooc_emoji = 1 + if("shutdown_on_reboot") + config.shutdown_on_reboot = 1 + + if("shutdown_shell_command") + shutdown_shell_command = value + else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/world.dm b/code/world.dm index c33b41388f4..c98f2acc2e3 100644 --- a/code/world.dm +++ b/code/world.dm @@ -261,7 +261,14 @@ var/world_topic_spam_protect_time = world.timeofday log_admin("[key_name(usr)] has requested an immediate world restart via client side debugging tools") spawn(0) to_chat(world, "Rebooting world immediately due to host request") - return ..(1) + if(config && config.shutdown_on_reboot) + sleep(0) + if(shutdown_shell_command) + shell(shutdown_shell_command) + del(world) + return + else + return ..(1) var/delay if(!isnull(time)) delay = max(0,time) @@ -287,10 +294,17 @@ var/world_topic_spam_protect_time = world.timeofday processScheduler.stop() - for(var/client/C in clients) - if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - C << link("byond://[config.server]") - ..(0) + if(config && config.shutdown_on_reboot) + sleep(0) + if(shutdown_shell_command) + shell(shutdown_shell_command) + del(world) + return + else + for(var/client/C in clients) + if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite + C << link("byond://[config.server]") + ..(0) #define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.) /world/proc/KickInactiveClients() diff --git a/config/example/config.txt b/config/example/config.txt index 5bcd469be87..d2ef1cf5062 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -334,4 +334,10 @@ DISABLE_SPACE_RUINS #MEDAL_HUB_PASSWORD ## Uncomment this if you want to disable usage of emoji in OOC -#DISABLE_OOC_EMOJI \ No newline at end of file +#DISABLE_OOC_EMOJI + +## Uncomment this to shut down the world any time it would normally reboot +#SHUTDOWN_ON_REBOOT +## A command to run prior to the world shutting down, only used if the above option is enabled +## This default value will kill Dream Daemon on Windows machines +#SHUTDOWN_SHELL_COMMAND taskkill /f /im dreamdaemon.exe \ No newline at end of file From 85df72c8b43e19156b59488b1b280cf715836412 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 16 Feb 2017 22:42:48 -0800 Subject: [PATCH 037/308] Blob announcement 24s -> 120s. --- code/modules/events/blob.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 0bb69c693bb..c6bba219cbf 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -1,5 +1,5 @@ /datum/event/blob - announceWhen = 12 + announceWhen = 60 endWhen = 120 var/obj/effect/blob/core/Blob From 7c0eb7a8536f9232d6a96f49a1789256861f6e1b Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 16 Feb 2017 23:31:28 -0800 Subject: [PATCH 038/308] CPP now lists jobs, with * on jobs with p.reqs --- code/game/jobs/job_exp.dm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index fc84a39bef7..e0b403bfce7 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -9,11 +9,20 @@ var/list/players_new = list() var/list/players_old = list() var/pline + var/datum/job/theirjob + var/jtext for(var/client/C in clients) + jtext = "No Job" + if(C.mob.mind.assigned_role) + theirjob = job_master.GetJob(C.mob.mind.assigned_role) + if(theirjob) + jtext = theirjob.title + if(config.use_exp_restrictions && theirjob.exp_requirements && theirjob.exp_type) + jtext += "*" if(check_rights(R_ADMIN)) - pline = "
  • [key_name_admin(C.mob)]: " + C.get_exp_living() + "
  • " + pline = "
  • [key_name_admin(C.mob)]: [jtext]: " + C.get_exp_living() + "
  • " else - pline = "
  • [key_name_mentor(C.mob)]: " + C.get_exp_living() + "
  • " + pline = "
  • [key_name_mentor(C.mob)]: [jtext]: " + C.get_exp_living() + "
  • " if(C.get_exp_living_num() > 1200) players_old += pline else From 17adda43b8685a1567004e1c3b0c4ef128f22249 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 16 Feb 2017 23:50:35 -0800 Subject: [PATCH 039/308] Simplifies UO71 blast doors, fixes multi-msg bug --- .../hostile/terror_spiders/prince.dm | 2 +- .../simple_animal/hostile/terror_spiders/queen.dm | 2 +- .../hostile/terror_spiders/terror_ai.dm | 15 +++------------ .../simple_animal/hostile/terror_spiders/white.dm | 2 +- 4 files changed, 6 insertions(+), 15 deletions(-) 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 e230e1fe666..b18f1c18492 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 @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/prince/death(gibbed) if(!hasdied) if(spider_uo71) - UnlockBlastDoors("UO71_SciStorage", "UO71 Secure Science Storage is now unlocked!") + UnlockBlastDoors("UO71_SciStorage") ..() /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) 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 4b9551e7ace..6d7d33b7508 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 @@ -75,7 +75,7 @@ if(!hasdied) SetHiveCommand(0, 15) // Hive becomes very aggressive. if(spider_uo71) - UnlockBlastDoors("UO71_Caves", "UO71 Caves are now unlocked!") + UnlockBlastDoors("UO71_Caves") // When a queen dies, so do her player-controlled purple-type guardians. Intended as a motivator for purples to ensure they guard her. for(var/mob/living/simple_animal/hostile/poison/terror_spider/purple/P in ts_spiderlist) if(ckey) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm index 4fa7af2b9f8..447cca0b2b3 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm @@ -304,16 +304,7 @@ // --------------------- TERROR SPIDERS: MISC AI CODE ----------------------------- // -------------------------------------------------------------------------------- -/mob/living/simple_animal/hostile/poison/terror_spider/proc/UnlockBlastDoors(target_id_tag, msg_to_send) - var/unlocked_something = 0 +/mob/living/simple_animal/hostile/poison/terror_spider/proc/UnlockBlastDoors(target_id_tag) for(var/obj/machinery/door/poddoor/P in airlocks) - if(P.density && P.id_tag == target_id_tag && P.z == z) - P.open() - unlocked_something = 1 - if(unlocked_something) - for(var/mob/living/carbon/human/H in player_list) - if(H.z != z) - continue - to_chat(H,"----------") - to_chat(H,"[msg_to_send]") - to_chat(H,"----------") \ No newline at end of file + if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating) + P.open() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm index 9d8091c202b..2a6ed28e6e5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm @@ -33,7 +33,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/white/death(gibbed) if(!hasdied) if(spider_uo71) - UnlockBlastDoors("UO71_Bridge", "UO71 Bridge is now unlocked!") + UnlockBlastDoors("UO71_Bridge") ..() /mob/living/simple_animal/hostile/poison/terror_spider/white/spider_specialattack(mob/living/carbon/human/L, poisonable) From 870162c6bfdcae468e81056ddd8e9869d8693793 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 17 Feb 2017 01:28:17 -0800 Subject: [PATCH 040/308] Fixes event bug, changes sound, adjusts timing, adds chance for mother --- code/modules/events/spider_terror.dm | 17 +++++++++-------- sound/effects/siren-spooky.ogg | Bin 0 -> 810866 bytes 2 files changed, 9 insertions(+), 8 deletions(-) create mode 100644 sound/effects/siren-spooky.ogg diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm index 2556c369470..37bd6578598 100644 --- a/code/modules/events/spider_terror.dm +++ b/code/modules/events/spider_terror.dm @@ -1,14 +1,14 @@ /datum/event/spider_terror - announceWhen = 400 + announceWhen = 120 var/spawncount = 1 /datum/event/spider_terror/setup() - announceWhen = rand(announceWhen, announceWhen + 50) + announceWhen = rand(announceWhen, announceWhen + 30) spawncount = 1 -/datum/event/spider_infestation/announce() - command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren.ogg') +/datum/event/spider_terror/announce() + command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg') /datum/event/spider_terror/start() @@ -17,13 +17,12 @@ if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) if(temp_vent.parent.other_atmosmch.len > 50) vents += temp_vent - var/spider_type - var/infestation_type = pick(1, 2, 3, 4) + var/infestation_type = pick(1, 2, 3, 4, 5) switch(infestation_type) if(1) spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/green - spawncount = pick(2,3) + spawncount = 3 if(2) spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/white spawncount = 1 @@ -33,7 +32,9 @@ if(4) spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen spawncount = 1 - + if(5) + spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/mother + spawncount = 1 while(spawncount >= 1 && vents.len) var/obj/vent = pick(vents) var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc) diff --git a/sound/effects/siren-spooky.ogg b/sound/effects/siren-spooky.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6e9eb341156c683f29c59655a7bcb2a14913a420 GIT binary patch literal 810866 zcmeFZXH-*L+bBBIAcO=1Bp3o{fPkSXgd!knsL~~&ND&RaBSo-lXfagj0t(WF2uN43 z>`an2p%jQj7*v9iYO<>~X8b7gNpfFpo|U*WaH z&q&*!#&NJsu-HRU-a*l8S#YzuUsWQ1R=y6~yVmmGVXY+$N^O4depp=N$A1ZkpFPPz z6p`-N8^lE3258y1)P$%F(i=^l`>BodLiD zz^1B*<@j5vROOb@juqruuEqK^lM8Z_`$#@%TK)feQFMHX03ZQ}CX!L{+$wm~Ab_+b zBdXLO$X@?4ML31IXdu%4S=lGNy0tnad{jjVjdMdm3k3{I`6L2s?d8pr=aQh;S=p!o z`O6ohFse1B@fi95CBc^dsxrsk@KsGkhT$@;b=*W$qxGJ(t=6=QPs1%C&y&%k1}`rD zdWo#Bg96RPL`d2fZ-QRyo~Ke>5CwJhb6FI?ftCsOWD%^I2*XXXcPFTOKd3V$btkmV z9i8l)p%CM_FV=51HfA>Vlv_cP$MsWg*ONTvk~~+Fyhz+%&(~AGudY4oOQ*m$a#wnQl!FZy`bK&s1>%T>Syej#0BB{+Ivu*^oxsP{nB1gy`XzV!nO0RP+Pb0 zqUSXo1SpoAdtpmkhttpgevw7(fs3PE29Kc@$@edWbclFDu|It;uG|$_%loh7!+`MS zHAm_%j;EZ;5b`F-SIg&YI($wnr&Mb|rE*hxhJ|%)f&)u>OV#1{^_5cqNW`yG@xNZ{ zr2LbLE3;EnhiEM$^kMb2S6$Dj;p@g8yeU=-qGEMjh>FwOo|i;77+8i>wavJzRpqj* zRjPh+6ogcYZ>F)3^g5Gp3!;WpE<;@LpNM-$9TS(E_>X7oy)08g33?{z8jjjKot>Qb z#fG_^k9lw{$#X8|_t{gw&!!*T$o;Q`^>5Ar5Yr^C^JK1fn%13*3HBx;KN0*d&WR-4 z$&ww+qS`c5?e3}H{h+h=qt1k+Ia9~Zk?1)=jG2`3bJX*k)b*Qm_M49Nn{W5?xOU2| z{TIXhWSie-WB!A4)>uTrAmgcJHu8URPAM(piGGHnRW{WvTlrXiKyp!SVaco7a?F3> zoWPXJ1u2(#DKB^#wB-Dt(2k}^KZ`C6Gep{h;z)NsQ&J4?QEu^h1FYm#}PcTtzg_Li7@rVJyeGKqL+mgMLybW%6opjy?>WeagtDSiRHX__)0@I!d;cTy&K(+E64s`7iE( z6zm6`qnnI2REuQlY$y>PO9=Y6B?u_Tpn?*pvgKOAi>`msH8hcTwvyE%6N$laqshde zZXGZFe?K`6034Vw-~h=X#=qxOVF?+E`q{p2kbPm9?FR!KKerNL0J8m#ZTj!K`Tw5# zUj~G6XaJloca@5e9foK4xG}QTMcHn^4sn#sAi<!`EgfqoX7xOw;jI0(cZyj35l( z(_t>@=T`-l4@9clOqyl+K}Jxrf({fFFL`mST4d}av~F5Tc@P{@FA&&KYhc$4v{n~$ z2pq5m6e^-glFMmD)%?z_&_HABDhe|0 z0*n5gtz$=kq%b6nJvSCTPhRVR&uy6{ z?E+t`-oiK3Hd4#WZu*geAaB7 z+-xn#PPVrmEP(R1RQW>nF6OWdp*%6j;5ZCbsmx`Wyu26<*&oGF6&PUrgmy}(y{3fI zI=G2Iu(*bYw(|q@p`ZZ{MVfV2<|a{(%0A2x4I|*dm{i)ZS;ys%qedYK#C5& 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 z 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ˆo%~*aS*?gmil}0vyUdQb_*s(adB%8NfZM zAuEX^AUa!xO`RX{s0?WG6JN{yBRHX4NOtrc)AJ2d8wAn#;SQ@raW3V&JR?K6!ke=L%(Ic2Y57RHs=Dy86O8V3qIaX z7d*S=g!~@uYmZG|iH;a$xDvwzbQ*R2K3prqsRXggmpIi zQB!@4KCWJ47r$UCRx9gX@vF&XiQXp?!pn#Wx)uH?a}rcgvF@mB=eLd#YS7e9lFJzS zjhaf)vfxd^wbQ<4Si*=}g@#!p3d@rzb28psG*#ryAYCbTU{dV4ruSrVXbhhQugXMS z>Wpx9s93C8TwfSXeMDh;n)|QbD8(nhti@heNp4Xbs$(w$A{YLX)fTAw2teHhu&x4Cc5sot(|ME*ry;=S$ zb_H5s8*cx675-@{QYpx16ANTmP|Gn2&#@GzoMw$~ldw%MZ=BX4*sFHF&MRA&fqZ!N zzwY;pd0LWe;PI?&t}Rpx8rBK_mp`9xmK_X?9<^O+X7DvMA*XV46SW`cCc?!5(@5gH zwB15QuD_q#l9`>0{gFvCJ9SL(fZ`Mf0@rve& zb^E;jcB9y?R$Nuz7TUsVS}gmR6xj#x7@ba`orYWv30jn*5OBuK9cW?8mC5<@m*bvP zP-%bnnvgCkkNS5Tde_o9Hnk~)6bZOHZWy*dqQ}EBHD1ggU147b*^$OQg!M-wXE_~1 z*}o9|eWO}_zw+c_Fo4_(;7)R8O)l8_gJ4{)M^PZctqrDyjzUZh>$^Tb#t6Nm&M6VY z=8LuuBksu5`yFm5elDEsZ7P)8Zx~Te+x^{wANd5IT^zB^BrN2GeOJzl+Ll-ykW(9W zpcY7ydQY;iuCvmNmZE>thIN)5r^2_MESbAI<-R@zpV&Q^{cDGFx)#=;kgQcai(4%- z6zk#H992H>(x9L_r;#ok>c8(YYWmLbDV-VD*yDd6lwrT7VVc`Dy;J}2$qksmgcxD$PT?IsB#Iy9_hkC8vh6* z%UrGnP;Y`!kuNIOh!&ZsIDJWKHB&}a$R5yu3zqN)D(Jl@`iVbRHY%QyY{!e1y|<77Z)*QFe(Z>_oJw1nBZ;$ zM3g%o8kgm1`BR)(YhGP4arZ*&s89z^Ebl+4K>T!s2t)X16q$H$M(nXD`#n|E2ARq^>ByI2Sx43fd;vIlYIF{6b$VCB_nY-DiD1 zQeV%5XA|EwuYAZ+8Ni3s* z%8Ol2)7KS-Ap|!nXAhwnZ0N4ai^yP5b70IMEw$F`G8wk=Eme&neKqgY!kv>-tyIaz zAfJ+L^$9o*>HuPKHNH>wqL;5h^+{x~LqPe@r$Lji#AD#%MEfg7>(%y$i+6JbTS57^ zQ$Vq-TlL`(fwfF0RlustZ_jzZ;*)Uinf925L5c4d&cg#OKwv`PfCN84;JXRlsW2IW zTjvKqt?$sVLQE0Jp_jkOkIt#ekwunfD`(l-+uOfVNKCEOonnUF;_@!9h#b#$j#{ae4vq{;R{`h~=1Wmt}l?SfOD_?lfu zrH!im`5^pX6z?mYn){pO)_bdEtIlP8^a0fC&7Y(!%Fn*vGC`?uYRWk}XFQVkQG24JJ1)HF zP%?%1#BRfnCTTD7^VFxeJ05ZZcfHxkS3VXy-R~yJbSvLIRPmU z@Xh^uif3;FFU~EigzGa$Y}y}JHpqIzv+6WW+DjeqG^`t-{+BtY#*DFN^A$Wjq1(os z!eX7U!(9~?5n|yLs%FIss&Nc432}VDQM1CF#TBOiO7_YoR99S88<-Sx8Wo__X(|du z4H$TBM{TkKBMOByOoNdg`!d!r)-CP|5g~d)^Kh=9y6vjbKwv?H88WR8I|#~Md2Yd& z$&?3kwqw^6Fj+|h{}4zfss=W~fPdmX7D;`ju0W0$c3g@YLAu)z&39DjH$15|5oM$M zC|LX56Y5_iC4ygn8u~TFqy2ARq~3t2yL;I45C1>~53q86w{;&^J$*5&M)q~W&9NKPD!O4_o9dpoR ztx*I`*3`9YQV6K6^d$7KRWj%_svy5ysx!DU!EJCsLE7kze*&cNkYbjVU7kgZ_-Bys zusgR+Dk`wtN!#i6H8*o){$y{k`fwH_6Y{i7Yv29W-SBp?<834sq`;b8GMh##T-7Cb z+)NjI!n-4LMJxi})2+d!M-j}>`jTlSa}5%$>p~clZ;T1CF=CR*+Uh!re}o;jaM|zo zmT4Z!3*I6@SnDkXc4bHPx*1y8zY44UTR&mSn0)4f_;$736d5{@DB( zA9U$|L5&Qk_CsHLEDr+oU6ID}mN5GtR)+%wVmSY227wz^5UgPX!5TLIdE<`$?K1f& z^P0i14LE4;+$RiJKQ0=5Xrsc!Ig${VA`1;VKek`}XFhFNLs}z5Y@WLlD+^^v_MoNsF$c|*yiK+{XDdcsJ@!-@ z348A_oJCJI3}a<)(P&uwY+>Z+mcx#44J57%I)5^cNG$PR7xVY@bi%<_rR)p3hA%I; z)^C?QC6p>xvsH6g8X8f4D#pS!sJFW09NoD7MKp~EPX*Z(ONtgzq0;<-&wpV)z(spx zE+%%&d&Ld(^RJd$5qSK zcjDB}*s;O@v47Zn8Xb>MP#y5{AlK!ddXQf(;&fO-JheLBC)bM8-}=+U`k?mNorCpO z+M?Ia^5ru#7t&Iin4iwm_1E#y!yjDtKe%)eaz^C^0{Oob*8}vo*Q4L(%Vv2aER3nC zX`N@z@e`2xA0ci`cgM3P4^XGfeZ^RwJa$xm8P2mQrciwXY@hc5NvGC0j;eDJF&3n8AlQgT8RaNePK(rw$8Dc!gR02 zkrpCgRgHRuu3F1`JTHTB{XzrYQ;tovDSDaL+bRqNGuvA8xknefT11UYo_b?r$J@u+ zKEb>miBB!#EBqSNH(f%$x3Z+~o*!F|u>53lLOg(*kyNd0B)9u?K+VXU8K%lZpwIb( zE+SBs-kGnEde!B8F4n-!Bi8SXX4ZkM`4ugBJ)n^EQ2(I9PD-s9!t3F5BR{#KA9k2C z4&~k-?f`e-#G*2$L;4=Si09e9iZ08@p*~-M;JMk&zk ztVEJPl}lz?epyz79FFxk9bb}Tx%>6Cy{XvmI?>COW>aMi^O_}i8GgQ&?s(lN@r#qg zh!mc>wvFqZM8Fip@*2jhxxw@43|pp}+(J8HlB~ci07rv`8$=bU-$FeL&y6XWi>_Z2 zseV`gL54jc)jB=x_g%Lc^%C0_6XfAO+`Dk`ER3r3u(af{{s>y@(*-jw^|ansEu#6y z@4&@LeYHpF?0*K#L#>mi_U!~XZ)y4&zcPoEIS83vHy+4em?RQ5fw?Ws6P=p;u<2W% zSfhZ3j^-r^NOji!078B9sQlX|+eSmvbhrI`{mp+H zb7zI(oxb}$1-D<}{dC7NS<1!hZmM93_%f9&0joU-tve>fK7950=Gh2igLGd68Y*$e}NW0^3uv6b7(#kZsAVqU~dKqZRSpz@VnKRwn#Ys?$s`w`R;0&y^> zM@%H6dn~t7v}7>}!K>K>_gyyq?SC-q=iQ*U7IH?`H3JX&xXfmXrYk(cH*RZgOK6_l zy!e&)d`(NDfz+o|FBL%TEfPF7|F7KnFaFDLCSS*k5Qh;vm?yKpS^SSHPn-OLtW`qB zLmc`ZK8ZAm6qXCzXY=Ocb>&I+0lkb{57(*AsH!~A4xx^U*KytFi&)Dc8OZ(ALj!7_ zCpkQiQJ(Erf%W@RG`Kqfk+VAe2c;I?zjt^US3bTpFc^yP$g6;~e~DCdy(<}>uW!nK z_ImtcwR@DZ1w0L6OCgKPkqb}JOBLf;STDL7Fl(F15gr>Y5^v6}NCI4>E0#pH%rhorMD?EgK^G>-277%;j zmN3B4fF8o{|NhN{bQ>3X6+7NMIVb1BwhM~iAAS3M(1-R0W%9|jhYdDfe0#gwFbWBp z-=L=36Ij(^qUlpmuu#k&SOAFD*2kpUm+7C-a|+)4v%Bm{87k6VO6lcdi)#V2{aJ@C zOW}@Ib{BVxqG;i=(R0b2Ze2c7GcT-NNmts}H<}pfk2q6cs{G)JP>?5KuII=tM#L+#4~!g2Qz(L1G5=2f)f+0Q`^ z$HWzpr(0i5ANEM~H9v%JhQXQL@M8^%9pft9<-7>x#lrGU{Dm@th?VSDgU0(s(4*eS zV65`ytlfOd-gjcISr7tzg`n|qGNrn@EUkpf4%P*OxwER@zB?%t2>f|>D<{WV6s27W zg;BixN^%p!99d1D&JH$?NMoJLP;3@(6>SO%oqJskozXY*7u5|1=*j9b0ADoWek)Jh zA7X+Nq{gxji@9}Gs#$VvX{VtJfwr6csW4&8esC8CW7;3hEbeSYEqew90A|Pmh5TC?ywauQX!hT#Ib|@d zOBDNneBC0!#lm&EB)k41y7%n(KE0XAP}u2%h}Z>XioNzY=)12b>r(mmYxaOx;BKAU zdEFPGhS`k(=IAAYFbj+q;^r0XT`_=j2+$6WK@r&FLKdmS)RdYbwQ}RrU788)W5QqpJL#EfmB1grKTv8vm-HDzMZ)mrj<6( zU^KIJ5^;ogQZ(;!hX}89-cc`Rb;eFSIWV}wUsgP)Qo}-nvSRCIt^$%#rhTa5Io;cp z)-Y=Sr1baQTk4~PMmDT%JR*6NAns_HzAsl9O3ZQkHZ`G-7FV`+;#M!Hr0U2aYAy1^ zX2SOuw80QMXLyM2&RAFksw(neuNZ|HS_=GJm@jCK-PAj^om&lRlb%eNKa*YF8$VE@ zuJi3geSonZ_i%TbLZb1>X83GJ1CGLmQ^S@oD*rMy)?RVed!@ra z#X?L^;I=s*%_+$*+ykKwBfSi(en%FbxH17fMOP(&I|dQ~xPH3(qI3bt0A_C~b@5J< zVdSN+uQHV6g&sQB=>|bB6#7S?O{OwEYPyGHr^XimXdrZ`cmM)5D#g01$Fk%Isdm+Y z%!;E*D_59u944M-C!Z81s`vy0LCSr9!RpSr`}n8_#wC6U7L-btV=2n_D71$+3{b!@ zR-V6E(w$u4F9-OT)XVp|+C|s&Qw$rd8%i))tDc&E-OgF~O*D$SWw2d3$GaZ?9^IG2 z)UC4DDsn(2v&3yJ4z+`MoVCt1wBIV2C7Ed_X!`~1&+q1Xrj7zZN00?{+Q({*+SR0U ztijuAT`g{zm+AxOlIiI*d9lcV3f^p_aeKPCkHx`OC1ded+lAlQ^~cTpUWa?!^0?Kp zM9|MtadOjSqn^umwoa}yUAUP=iIetpSa_F`=bnEa93mqXHaZucvb4qW)`GF-W z)e(_iSjR5$L%fLaM*)^}%Zvv!gxT7a#i4j%h>!Y?kK6#$Oy{xfKP^OM=mPIy#kplMS;So86QBKbnEv?(f|KayseDT=r{98YIx`N6Uq z&W~L!e6f#lVkN|{nOg0w_&mA`PG(9VL56Uss<}sZMN)@^UN!Y_VY!M21#jnI_{Qhg z*0H{u30Lhtteq=ji-gJ=TG#codR@vs<@feh9Q%4`dbhr+6yWj1|C#zKu#Dc^DXj^{-Xvh!g zmG-R#6|_Pn_DJx}kb*8DQ(WG4^9D(Aixg-_UlmSA!dDFfl8;+1PM>vZGKKWf;IHv) zK~n&l>Bx5f93b9k8o`GZG_6r~G``H!U!@hT@uI}~qtagQ3c#cOX6Sma9SGWT%TP$N zt@CbKZO%xyejR1rTAh-dr@Kht_o{~^tpGI!?^}(NxZEPI?W-c-^qMZ0E$MSVG8=_M z6-+!*_Ahx?{eEa{gw6E#$$ne*kv0$K<(rTlDzg|8KE)N*v-I~er;9)WL3oAHDu(pE zu&gm!;Ih?uc+{Fx__%M7&k#NP>-muL7-xLYlwGE%d!Jy1M5|n>%oEn;eq)-za7TjZ zh?#E9F{NW~a<1H=G^VZbzHUWKPMT3eLJmVc;-5n>@Lq7+FEal40qySn7YjRCpIoP` z(OtXW&YLlL_K1Q4z5$_@X2NF3vMa$EzBLNkFntXqXgk!q48O@y<^1ZA_@5v(2oR!{ za5yM^rN$gTxtI#P6O{Y?t@ZWYRfMFVWF%g45v|5jt|*q3!=e8W>!QpUa z`0>3TM6va}^`wk%!Jenj3%gP6@Lcbit?8Q-ZShH$s|Hx?Q3^TQ@2FTqhH~vms(P4P zh}V&gBr3D_(Twoqb&mOvk{C&E@_~JP=BZfky!SWq1s#binJs-?mP#&-3Phi>Cdqma zr_Sr;opyZd1EBLMC`T~|mA#DV?p!N)i2YRj+Z~k`D$UnbnCEV%z1482LsrtWJ1U(2 z7t!cLLVNH3A{vnMCE$1Do|iC&=oxnZks(?^jiYdrW<8gj0H@7 z0tHV)h}!GehuNwd)XVW3!Dj0nc2@y+{2vQbyPD6U+B-A9jrUPqCicBs5(Hul$b9M* zk4(Kg+0S}NkLC8|k~UpiBug&mmog;WVVXOnwEy*d#%?vQLJh-gvxZ{ZDDU5srVTAp zIfB*5I_nsU`x6z6a|%pKiS?XNGjv8<6_3zts%92D)o3hxsOLIp%w~nEO8BC;@kL=; zOvKc;><~x?b5=Bc4Az3MQVIO9gnk0F{Nm#qBTxaS{kE7EK7Um!|7N~tV0C(IbE4Qt zY)-7ay{Go(Cnv^=-up9Llwa|E*@E1P#WSB~n4W9Gh{IZ1AKGtBi1(CLfB)d4?sNE_ z)eE*-pG2l&eT4hvP4*mp_$rNTtCp-dLAw5w6y1;)+#$U6&M*AQ`RBu7_7we!murz| zrJy@s-)i_tRGyZ1(4k!WlkSpZ9q#Z)6X>FwV*u5 zo)7?&W{*BNT)}Cjdky84C%={-!SGHM+k{41S2Ei=rmg#)PV{RGI^nt8Ndxq#Bh?i* zB-(AV-}F$jUzoq1FCk~hqL6nT@4}dc!;etgZ9%6*s2-y|nLX1+(8@01^_uth^8#Eg z3GlXiULYsA`J{1FN!)V#PB`t50SI>;0H;rVJ@Z=$q^JjxOSFs2AA{}OO?Z7_oN8YR zadRu`nb%TzfW-+Ih{=jSd3bxq@?EbmS$x74e4MW*lYsw?AHH}}TTdH|+D$~vrhJ%J zzoc`p{!Q&!+nE)A3U(9*R-jA5yQc-UFFB%=H~LP`1jh`}b$_N@CoM|CuGGr}T9mBR_j2%mZbjpN_kILQBK z0gb>??S?Bf#*f*n=L+<+N&a=%#U0R+yZxc;yq*^UH*&kzaU)g~BBL#$TjGJ^S#BMS zxC{>>1Yx39Qc5ymHpzto7VB?%`B+CenBajkf|xPwYhwxBwcVn+ zZISTip)x_pVLk95+WO(K=PGIW7v+cSdADd0_qESe$;fZm?k_emI6@w{mfG#^P;={| zXk7fG4j31N*BzyGnb1}O6U*`}w|1rZr3Nu8aiYzQ1)xZOU57`v%Av&MEXM|D9y;_c zTydiwlRpaX>ItGhG$plFDRX1jbovL4TTn)o6Iw%~Cy$1YIKiQh!yJ8uKMxVuV)p_S z4(I)Q?M{T@N=Eq}zdGh;cq_zjW2#w}zuc6lAfo4TYLQq;>XJl=O`E;e`#XkOWeq|# zM79csuX^szyP1N;C`@o&8l4240bFTU*9WgWI%}DPNYOrcRsVUi9H4IGV`5zemTg>P z7MK-^-h{3s)%Z&hrfx?98*&{9iE&J1mrX)~E}9j4MNhfcOUyx2EP}n`pD_keUblKn zPu1AfaSoXk!LA5p$^~*@PirMB(Zd7Z>FE5hU65KBY2oymg>M6MlTE6@$kLCPoOyfDMtZ9Qx^$gpbuQ~B;R90bD!VWyZw zFQ5072mSAuaEm1Wdv-2rEcCYz8xrjL9fNaWP)G-4(A|#-v5Z6|{_a;rJn~f&FYg(A zF22Q*bAbryF)Tt1621TYthmWgwQd*W71=hpA1aQZyV^3hd%3|(v6GfEFj8*050HQ; z4%c;a!&`-0Rz_mr1=JjGz2`Ee-Ru%{W@**FcCXDG2e3YSr(lhh&NJ@ zmN&<7kF{OTcHhUz2t|SUY`b0oVrusWGB)e26_>cF-j#_}d3_0;3XV{#am}b9CtvHtFG^HTtAC_}j$F3P_gjz-dc5lc zTlphiGS5RI0>zc@{ywtnH{zIh>sP?fYi%v!CrTSS1NrarA#~(AO8|4>tmwUgD^pWD z_qKb!e}@C1qJ}yC_|uQ#V6OB1!EDv)lZdXi(j5M0vfzS;;6)kUeU^c1wuyaB=;7-s z&%3O{veq;&eb>Vo;#LSmQ+F&S30VVK0^8OFJ zv<6-WML{m=q(;nKBS3i2>#2IbJ8;>*SxSXz_UTy-uTsg578LDvt!DZ~S#9rr5lQvR zO!Y4%>iP?0M^nQ|Ol3)hQ+orvilPEf2`01)O;lQ5d8II!B57@}L+$~asIm1lQBBwu z(F5VA9F}SIyar>o#lyP4rQps5auSt(LqcSA60kJ>V5_Q%Ggyan|6XrV+nE~Sx_)2m zDm7g-jzv%}?bMt$bP{sAmVf--0v{&hShEkmDLnd>D$q)eD?3Bp7)VZ3eH5PXP@c;e zx}rMs&GEpHJv2pK_w9TWIe*%$=|*(dOS^?P^8R;&d9{(e7j!o^KgL3I&PJ%sggP>* zF|fUJ(P0EydBZ=tLOc;A;7APA=N#C>cy%|B+V8c|(p6C{#R5zWi2IYm0}YV^*^i$j z4^*ZwIm)>cOiLaS)>1N@4JzFcoktokGvopD?nW&kIRkYoO5(pY1`|_BER*nZb?XL!?I5L>@^#@`1tV#OiHdQ6IcqHw{fK7o z0_#fPU6xv=55f_y<_I0V;J!5GR=MXXz8vZOVTSxWSx?kzsljm$JO-ixVgigv^dp^| z=I(^_vZW;hH&Pe*#a;KSqsSAF<9CPLkkf(3YsxY0;{!T2OFyavuHBB%vY$J+E?4ok zufKoj;aT>xdWJjry1cS8ywKuv`S#}>Uys<9aDc2#R;ZS2P2QbW0f`LeFYy;VFocPo zV1}_=ZtTAK{K20-5A27l&MJ(R7irYI`1ZF{2c5T^3f+|@!KBQoUsaR85K_g<8{&=5 z1wNmLt{$0c`-m9GGm-&MQ6<_2@+x*RO&3XbAHYGPE3M$|VQP z&M?do9jNTt%nxaeel=gz8Em}BL^f$XzCv!@qQiSXJ@CCVlVnj*Th-FN;98J(gxKJo zZx(htaFfHJ^KuEyRt9yf{(eoZ{BUJCnZ33yn%i@P;TJpOaq9GRI%_rM+-5_?T_qkd zos7^QRFcRgyH7Y0H#rAE-^Dx#0zb0bMZ_1L5ZC{*sXq)H%TL31O}=*Ru9x4v&7q@V zE+{VX0mOu0z#tX14D>Mns2(E}%m?b2>^tugzY%XZ#+1X!{0r4TuSSpKI&Qr?em(BJ&TR~j$U)NTx6jESWUk`lE+|CvKRgMIYHP>DupNoBUbGdQ)J($Iq z-$QZzuiS(l0dveH3^2TjP>AfzzPr^yIVrNThevEqrv6}IEM@I@gC5R7dm3ycr#BSw z0)Bqk_touElrJmvGJa@hzdw)-c^N`V1(1s^P^H>09J?wMT)#xU?5-Dl!omVZbH(Po z*van9dcQQiH#O#oGH6^$R+gg-uo9PfmVf{6`LqiOnbpZ&oVs&ET0hD=mNc|k!O|Wy zIc_XNeS0T*A6~;>NHV;Rvy2&PBSuem=^wOGY{Cfyhe`TP{kv#_l!H-ESek7{(!kBf^Tbg%fetMrYLZ}8U3naY#6O6 z_;Ea|IN#aokXuX==b}&fZZdxlin*N6WTJa}1$&s1@(_C!iotz)(2eIne@s0dKPM*h zqW1a6h}wg7m8_nQ?Vr#KK#V6B_xKeb;&XyfHa((B6FUBA{q-9_U55n+MJ$#8moR2h zF7ZOt(baX-(dmj!BRWMw?9pbd|8ZYL18WOvDU%) zSPNz4n(A=B8zCk~x;Zu09d#lvl`KJnz|j+zvs5+L4YL5t!Xofmdph~?%|Pv5wL&$4 zis+zK+1R?O%ZllW(FN%s`G^?xwjA_kWM>aa*IihQjP@?BtF6cDWd^yC6?z2;!Ig00 zVM$W{Fm>J~{}Hn&Vf@Obs=)wA+n&2 zEvsd8t}Oj#I&K%*@*ia(Y@F3jK*>MOI8;hl`tSM&H5r^L{e5KrESdxY0GFuob{4*R{i!z|5D1a^@ z+-2MLi7uH?gymppE+li$iE&JpBL*6{!%A&ZlY7%)v_8lw#j2VfUm4tWf#}TAG}YKr z)`2@dUAXdFXF!cG2qy}ceLsVDEh~3;9PLz)+)bGauheNDx~*}nO6t+lWL`(Bzwz>w zdwhfZ3V1t2*ICZ&s8qZrgp8z{jE{bGmAo&Qy4;!`dfhslu`qI|49@)v{7ablCbp<0 z@bLv?6b#vXAel%m7NSdc^ZX$nLxt}#jQ0NW?7}ZUy`V&-(<|; zp_(%P@|<}w^6k%Bc`@C<%%ZPVX9SdKT9$UC86io?B|-!ZkUC_}V9=wZr`#^OS&&Wz z0F3e2%7}2P3k^u{VC-4T^&(U~$QU*m{~e^3LVy+krj9Gc2PZ?%=2$5B$M6g@YO0Xa{@OBnQ#&+)!Gqu&cp+os%=Kp2!h zKK{Rm#xC?up|3rT26UGS&M5pP3kgrGAnC~;kS(bh#Llq%&*wh_=x1vP-3Wu1^WE$) zO!m_{rdntRPCbrld_}B&3AP}1M@zlz9wwrH*c2H^CaEK8z4RQ`+2X#ikH1Qd2>Pj8#!Z-6a!UY9;LbpWf(W1TVUc1!Hp87?Si5{{+IwY zD6VVgb#&vc$E>6_^F>Y%9EodcEKXi3_smH%X~@DbIh^KbnuPG32utx%1c><@`&3s| zOW@#Fv6UBH_adw?8WDkIq26+Z^gz|sYE>#6F1@VBEFhLd@RPt-gaR{IoscjfCTM{q z4r#F>{M;M8h6HsnDp_odR+ar(Y(c0Y4kFY6tev>pY?`~KKn8H3YQ7VyWOR)&tF*qy zx#i5M-#4E4?eYQkc0{_r_lds8vtzV!3XOs9hKqw)7qE#WLx)k2j}tbNyk`=$-qq*oPN zU2<@a1RgM6F*L-0%aRf$>WX^{`U#njlqgLcjPkkQR9OlqAoO9)vM^kRn7e;EDrapY zjp$^Jps6vhFe9DWi#PGP8MxiHQwK=3+j3P1f8DzJA6q#jMrK)?U?OgYZeOEdG_{UM zov#unW(^9yX!~>cU&n;4s~63fQm}PS-q@5i@z7kN>x~krn6=weJwE@ErpW@jT&6fy z7820VTCWwS&+qfy7i-vhF5p|D z=ioo1Pk~1_blBUEd97`UyIY z`5!+HqeLyMbLUI^4+s}J4l=opA~yZ=9qw1K*x+O`_gLq6ZG!GfsUO|b9|&NYMZsX2 zpPeBR$t9G{wsxi9!`1lR*WgrIL^~58gw5*Qycl-jcwFpj3-Jid8)`C7zxu^b(SG;( zs&qz+HdQ@~*hMBPb{-r|a_3Yw(_H;jAE{G9OPbdxp?tbAE$F@-YHl`9H{TF2Vib3G zm+jmsP|_$7(2iwupPo-pK|d8=@J-3ww2gcFcI6Wuy>B@5rlvSLql6BBXxOZwx$*G) z>vj2_yV2`TbXCS^3P0>v!>hPk3pM4lSbfp(%)h_6+CCMv5YB@L1igL>EU+D+Y6Bj( zWrVGAmK0$_8RsxieF?P4R${2K`|u&*A;%9HxDQn#>yIc@Ry+~Qxo@fg_ME#;^F*sr z@mE?r8*=5Jqy{z-YL)fw8LO2Qo>^w6cc-D?PhJLeeyX&5<)0%8VV-ez<`n|r{+F*L zG+qnZ56cOi&*qRIr$I_I)vK;UUzX=173H^?}RMNo6wUMAHx`?|%wUz&*3e`(Cfc~i~sFyT+5iTp^V$rTc_CD?Q+G1`FvITEQ zzud*BqjXqaon%}@N1A5Hvi}L4>7j~Zk)XX2uTj;qxF+Q$RT0}m2mpq#3_A-rP|

    +

    Krausus updated:

    +
      +
    • End-of-round sounds will now play just in time for them to end as the server reboots, rather than starting the moment it reboots.
    • +

    Kyep updated: