diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index be3b67e8a3..4629c2d5ab 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -4038,19 +4038,19 @@ }) "ahU" = ( /obj/machinery/computer/arcade, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ahV" = ( -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ahW" = ( /obj/machinery/holopad, /obj/item/weapon/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -4069,7 +4069,7 @@ c_tag = "Brig Long-Term Cells" }, /obj/item/seeds/potato, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -4378,7 +4378,7 @@ /obj/structure/sign/poster/official/work_for_a_future{ pixel_x = -32 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -4404,7 +4404,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -4419,7 +4419,7 @@ "aiH" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -4817,39 +4817,39 @@ dir = 4; network = list("Prison") }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ajw" = ( /obj/structure/table, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ajx" = ( /obj/structure/table, /obj/item/weapon/storage/pill_bottle/dice, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ajy" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ajz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "ajA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -5274,7 +5274,7 @@ /area/security/prison) "aks" = ( /obj/structure/bed, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -5457,10 +5457,6 @@ name = "AI Satellite Service" }) "akL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5473,6 +5469,10 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -5526,16 +5526,16 @@ name = "AI Satellite Service" }) "akP" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -5686,13 +5686,13 @@ /area/security/prison) "alg" = ( /obj/machinery/biogenerator, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "alh" = ( /obj/machinery/seed_extractor, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -5703,14 +5703,14 @@ pixel_x = 0; pixel_y = -24 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) "alj" = ( /obj/structure/bed, /obj/machinery/light, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -5719,7 +5719,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) @@ -14132,7 +14132,7 @@ dir = 1 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, @@ -17857,13 +17857,13 @@ icon_state = "pipe-c" }, /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/office) "aHh" = ( /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/office) @@ -17872,7 +17872,7 @@ dir = 5 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, @@ -20627,7 +20627,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMh" = ( /obj/machinery/camera{ c_tag = "Command SMES"; @@ -20637,7 +20639,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMi" = ( /obj/machinery/light/small{ dir = 1 @@ -20668,18 +20672,15 @@ d2 = 4; icon_state = "2-4" }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/sign/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMl" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange{ @@ -20689,7 +20690,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMm" = ( /obj/structure/table, /obj/machinery/light/small{ @@ -20925,26 +20928,17 @@ name = "Fore Asteroid Maintenance" }) "aME" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Fore Asteroid Hallway APC"; - pixel_x = 0; - pixel_y = 24 - }, /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMF" = ( /obj/structure/cable/orange{ d1 = 4; @@ -20960,7 +20954,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMG" = ( /obj/structure/cable/orange{ d1 = 2; @@ -20975,7 +20971,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aMH" = ( /obj/structure/rack, /obj/item/weapon/storage/briefcase, @@ -21270,7 +21268,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNk" = ( /obj/structure/cable{ d1 = 2; @@ -21280,7 +21280,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNl" = ( /obj/structure/cable{ d1 = 4; @@ -21291,7 +21293,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNm" = ( /obj/structure/cable{ d1 = 4; @@ -21307,7 +21311,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNn" = ( /obj/machinery/power/terminal{ icon_state = "term"; @@ -21320,7 +21326,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNo" = ( /obj/item/chair, /turf/open/floor/plating{ @@ -21407,7 +21415,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, @@ -21544,7 +21552,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNE" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; @@ -21559,7 +21569,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aNF" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, @@ -21898,7 +21910,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aOl" = ( /obj/structure/cable/orange{ d1 = 4; @@ -21929,7 +21943,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aOn" = ( /obj/structure/cable/orange{ d2 = 8; @@ -21939,7 +21955,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aOo" = ( /obj/structure/cable/orange{ d1 = 1; @@ -22136,7 +22154,7 @@ "aOC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, @@ -22227,7 +22245,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aOL" = ( /obj/structure/cable{ d1 = 1; @@ -22243,7 +22263,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aOM" = ( /obj/machinery/status_display{ density = 0; @@ -22481,7 +22503,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aPi" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; @@ -22495,7 +22519,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aPj" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; @@ -22506,10 +22532,6 @@ }, /area/hallway/primary/fore) "aPk" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -22517,6 +22539,10 @@ icon_state = "1-2"; pixel_y = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -22664,15 +22690,15 @@ name = "Cargo Quantum Pad" }) "aPv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -22698,7 +22724,7 @@ dir = 1 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, @@ -22836,7 +22862,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aPJ" = ( /obj/structure/cable/orange{ d1 = 4; @@ -24134,7 +24162,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aRo" = ( /obj/structure/cable{ d1 = 1; @@ -24147,7 +24177,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aRp" = ( /obj/machinery/door/airlock/maintenance{ name = "Security SMES Access"; @@ -24162,7 +24194,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aRq" = ( /obj/structure/cable{ d1 = 4; @@ -24633,7 +24667,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aSi" = ( /obj/machinery/firealarm{ dir = 1; @@ -25315,7 +25351,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ id_tag = "GulagCivExit3"; name = "External Airlock Access"; req_access_txt = "12" @@ -25477,18 +25513,18 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) "aTB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -27086,7 +27122,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aWm" = ( /obj/structure/cable{ d1 = 2; @@ -27102,17 +27140,21 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aWn" = ( /obj/machinery/camera{ c_tag = "Cargo Bay SMES"; dir = 6; icon_state = "camera" }, -/turf/open/floor/plasteel/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aWo" = ( /obj/structure/closet, /turf/open/floor/plating/asteroid, @@ -27482,10 +27524,15 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aWU" = ( /obj/structure/cable{ d1 = 1; @@ -27629,7 +27676,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aXg" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating{ @@ -27843,10 +27892,6 @@ }, /area/hallway/primary/fore) "aXx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27856,6 +27901,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -27886,7 +27935,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aXA" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; @@ -27903,7 +27954,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "aXB" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -30143,7 +30196,7 @@ }, /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) @@ -30432,7 +30485,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) @@ -30452,7 +30505,7 @@ icon_state = "alarm0"; pixel_x = 24 }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) @@ -31253,16 +31306,16 @@ }, /area/hallway/primary/central) "bdv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -31310,10 +31363,6 @@ }, /area/hallway/primary/central) "bdz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -31324,6 +31373,10 @@ pixel_y = 0 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -31523,7 +31576,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ @@ -31544,7 +31597,7 @@ /area/hallway/primary/port) "bdS" = ( /obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) @@ -32213,14 +32266,14 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -32267,6 +32320,11 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -32287,27 +32345,12 @@ }, /area/hallway/primary/starboard) "bfk" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Starboard Hallway APC"; - pixel_x = 23; - pixel_y = 2 - }, -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, /obj/structure/cable/orange{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/effect/turf_decal/stripes/end{ - tag = "icon-warn_end (WEST)"; - icon_state = "warn_end"; - dir = 8 - }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) @@ -32446,17 +32489,17 @@ }, /area/hallway/primary/port) "bfv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0 }, -/turf/open/floor/plating{ +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) @@ -32848,7 +32891,18 @@ }, /area/ai_monitored/storage/eva) "bgg" = ( -/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/power/apc{ + dir = 8; + name = "Starboard Hallway APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (EAST)"; + icon_state = "warn_end"; + dir = 4 + }, +/obj/structure/cable/orange, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -33298,9 +33352,10 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "Medbay SMES Access"; - req_access_txt = "10;11;12" + req_access_txt = "0"; + req_one_access_txt = "10;11;12" }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -33317,16 +33372,16 @@ }, /area/hallway/primary/starboard) "bgY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36814,6 +36869,10 @@ name = "Mix Input"; on = 1 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36874,14 +36933,14 @@ icon_state = "4-8"; pixel_x = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37039,10 +37098,6 @@ icon_state = "4-8"; pixel_x = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37050,6 +37105,10 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37216,7 +37275,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -41802,6 +41861,7 @@ dir = 1; icon_state = "pipe-c" }, +/obj/structure/table, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -42187,11 +42247,11 @@ name = "Service-Engineering Bridge" }) "bvx" = ( -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -45926,7 +45986,7 @@ name = "Central Asteroid Maintenance" }) "bBO" = ( -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -53012,20 +53072,16 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bNV" = ( -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bNW" = ( /obj/machinery/light/small{ dir = 1 @@ -53258,19 +53314,17 @@ name = "Starboard Asteroid Maintenance" }) "bOq" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bOr" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -53987,16 +54041,16 @@ }, /area/hallway/primary/starboard) "bPv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -54041,10 +54095,6 @@ }, /area/hallway/primary/starboard) "bPz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -54057,12 +54107,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bPA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -54081,9 +54133,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bPB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54102,9 +54152,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bPD" = ( /obj/machinery/door/airlock/maintenance{ name = "External Maintenance Access"; @@ -55544,18 +55592,14 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bRS" = ( /obj/structure/table, /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bRT" = ( /obj/structure/cable/orange{ d1 = 1; @@ -56848,9 +56892,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bUe" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -57403,9 +57445,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) +/area/hallway/primary/starboard) "bVf" = ( /obj/structure/cable/orange{ d1 = 2; @@ -61899,10 +61939,6 @@ }, /area/hallway/primary/port) "cdJ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61913,6 +61949,10 @@ pixel_x = 0 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -63914,10 +63954,6 @@ }, /area/hallway/primary/starboard) "chv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63927,6 +63963,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -63960,24 +64000,25 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "chz" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, +/obj/structure/table, +/turf/open/floor/plasteel/darkblue, /area/shuttle/escape) "chA" = ( -/obj/machinery/computer/emergency_shuttle, -/turf/open/floor/mineral/titanium/blue, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + dir = 1 + }, /area/shuttle/escape) "chB" = ( -/obj/structure/table, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/weapon/crowbar, -/obj/item/weapon/storage/firstaid/fire, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/black, /area/shuttle/escape) "chC" = ( /obj/structure/lattice, @@ -64071,7 +64112,14 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "chJ" = ( -/turf/open/floor/mineral/titanium/blue, +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) "chK" = ( /obj/structure/chair{ @@ -64264,8 +64312,11 @@ }, /area/hallway/secondary/exit) "chZ" = ( -/obj/machinery/computer/crew, -/turf/open/floor/mineral/titanium, +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "cia" = ( /obj/structure/chair{ @@ -64287,23 +64338,37 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "cic" = ( -/obj/machinery/button/flasher{ - id = "cockpit_flasher"; - pixel_x = 6; - pixel_y = -24 +/obj/structure/table, +/obj/machinery/recharger, +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = -32 + }, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 9; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "cid" = ( -/obj/structure/chair{ - dir = 4 +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel }, -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "cie" = ( -/obj/machinery/computer/communications, -/turf/open/floor/mineral/titanium, +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) "cif" = ( /obj/structure/closet/secure_closet/miner{ @@ -64571,11 +64636,12 @@ }, /area/hallway/secondary/exit) "ciB" = ( -/obj/machinery/door/airlock/glass{ - name = "Emergency Shuttle Cockpit"; - req_access_txt = "19" +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ciC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -64843,10 +64909,8 @@ }, /area/hallway/secondary/exit) "ciZ" = ( -/obj/structure/chair, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 +/obj/structure/chair{ + dir = 4 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) @@ -64855,19 +64919,23 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "cjb" = ( -/obj/machinery/flasher{ - id = "cockpit_flasher"; - pixel_x = 6; - pixel_y = 24 +/turf/open/floor/mineral/plastitanium/brig{ + dir = 8; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) "cjc" = ( -/turf/open/floor/mineral/titanium, +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" + }, /area/shuttle/escape) "cjd" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 4; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, /area/shuttle/escape) "cje" = ( /obj/structure/table, @@ -65072,16 +65140,14 @@ }, /area/hallway/secondary/exit) "cjA" = ( +/obj/structure/chair{ + dir = 4 + }, /obj/machinery/flasher{ id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6 }, -/obj/machinery/button/flasher{ - id = "shuttle_flasher"; - pixel_x = -24; - pixel_y = -6 - }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "cjB" = ( @@ -65092,7 +65158,9 @@ name = "Emergency Shuttle Brig"; req_access_txt = "2" }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" + }, /area/shuttle/escape) "cjD" = ( /obj/machinery/light{ @@ -65361,27 +65429,46 @@ name = "Emergency Shuttle Airlock"; req_access_txt = "2" }, -/turf/open/floor/mineral/plastitanium/brig, +/turf/open/floor/plating, /area/shuttle/escape) "cki" = ( /obj/structure/chair{ - dir = 1 + dir = 8 }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "ckj" = ( -/obj/structure/chair, -/turf/open/floor/mineral/titanium, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (SOUTHWEST)"; + icon_state = "darkred"; + dir = 10; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) "ckk" = ( /obj/structure/chair{ - dir = 4 + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) "ckl" = ( /obj/structure/table, -/turf/open/floor/mineral/titanium, +/obj/item/weapon/storage/box/teargas, +/obj/item/weapon/storage/box/zipties, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) "ckm" = ( /obj/machinery/light/small{ @@ -65445,6 +65532,7 @@ /obj/machinery/computer/auxillary_base{ pixel_y = 0 }, +/obj/docking_port/stationary/public_mining_dock, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -65535,7 +65623,7 @@ "ckA" = ( /obj/machinery/power/apc{ dir = 8; - name = "Arrival Hallway APC"; + name = "Arrival Hallway Maintenance APC"; pixel_x = -25; pixel_y = 1 }, @@ -66073,33 +66161,36 @@ name = "Emergency Shuttle Airlock" }, /obj/docking_port/mobile/emergency{ - name = "Box emergency shuttle"; - timid = 0 + dheight = 0; + dwidth = 15; + height = 20; + name = "Cere emergency shuttle"; + port_angle = 90; + preferred_direction = 2; + width = 42 }, /obj/docking_port/stationary{ dir = 4; - dwidth = 12; - height = 18; + dwidth = 15; + height = 20; id = "emergency_home"; - name = "BoxStation emergency evac bay"; + name = "CereStation emergency evac bay"; turf_type = /turf/open/space; - width = 32 + width = 42 }, /turf/open/floor/plating, /area/shuttle/escape) "clz" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel, /area/shuttle/escape) "clA" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/neutral, /area/shuttle/escape) "clB" = ( /obj/structure/tank_dispenser/oxygen, @@ -66358,28 +66449,21 @@ }, /area/hallway/secondary/exit) "clZ" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral/side, /area/shuttle/escape) "cma" = ( -/obj/structure/chair{ - dir = 4 +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) "cmb" = ( -/obj/structure/chair{ +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; dir = 8 }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) "cmc" = ( /obj/structure/table, @@ -67584,13 +67668,13 @@ }, /area/hallway/primary/aft) "cob" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -68974,16 +69058,20 @@ }, /area/hallway/secondary/exit) "cqm" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Cargo" +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "cqn" = ( -/obj/machinery/door/airlock/glass{ - name = "Emergency Shuttle Infirmary" +/obj/structure/chair{ + dir = 8 }, -/turf/open/floor/mineral/titanium/blue, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, /area/shuttle/escape) "cqo" = ( /turf/closed/wall/mineral/titanium, @@ -69359,7 +69447,11 @@ }, /area/security/vacantoffice) "cra" = ( -/turf/open/floor/mineral/titanium/yellow, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel, /area/shuttle/escape) "crb" = ( /obj/structure/extinguisher_cabinet{ @@ -70617,9 +70709,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) +/area/hallway/secondary/entry) "csV" = ( /obj/structure/cable/orange{ d1 = 1; @@ -70652,8 +70742,11 @@ }, /area/hallway/secondary/exit) "csY" = ( -/obj/structure/closet, -/turf/open/floor/mineral/titanium/yellow, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel, /area/shuttle/escape) "csZ" = ( /obj/structure/closet/crate, @@ -71414,7 +71507,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cuk" = ( /obj/structure/window/reinforced{ dir = 1 @@ -72175,10 +72270,23 @@ d2 = 4; icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ +/obj/machinery/power/apc{ + dir = 1; + name = "Aft Asteroid Hallway APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cvw" = ( /obj/structure/cable{ d1 = 1; @@ -72197,7 +72305,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cvx" = ( /obj/machinery/power/apc{ dir = 8; @@ -72660,7 +72770,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cwq" = ( /obj/structure/cable{ d1 = 1; @@ -72670,7 +72782,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cwr" = ( /obj/structure/cable/orange{ d1 = 2; @@ -72683,7 +72797,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cws" = ( /obj/machinery/door/airlock/maintenance{ name = "Science SMES Access"; @@ -73258,30 +73374,17 @@ }, /area/hallway/primary/aft) "cxn" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Aft Asteroid Hallway APC"; - pixel_x = 24; - pixel_y = 0 - }, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/turf_decal/stripes/end{ - tag = "icon-warn_end (WEST)"; - icon_state = "warn_end"; - dir = 8 - }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cxo" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -73571,7 +73674,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cxO" = ( /obj/structure/cable{ d1 = 1; @@ -73586,7 +73691,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cxP" = ( /obj/structure/cable/orange{ d1 = 2; @@ -73604,7 +73711,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cxQ" = ( /turf/open/floor/plasteel/darkpurple/side{ tag = "icon-darkpurple (NORTH)"; @@ -74006,7 +74115,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/toxins/lab) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cyD" = ( /obj/machinery/power/terminal{ dir = 4 @@ -74018,7 +74129,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "cyE" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, @@ -74778,7 +74891,7 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) "czW" = ( -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "czX" = ( /obj/structure/chair/comfy{ @@ -74786,7 +74899,7 @@ icon_state = "comfychair"; dir = 1 }, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "czY" = ( /obj/machinery/light{ @@ -75519,7 +75632,7 @@ /obj/machinery/door/airlock/shuttle{ name = "Cockpit" }, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "cAO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -76097,16 +76210,16 @@ /area/hallway/secondary/entry) "cBJ" = ( /obj/machinery/computer/arcade, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "cBK" = ( /obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "cBL" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "cBM" = ( /obj/machinery/vending/cola, @@ -78822,7 +78935,7 @@ /area/hallway/secondary/entry) "cGm" = ( /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) "cGn" = ( /obj/effect/turf_decal/stripes/line{ @@ -85381,9 +85494,7 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) +/area/security/checkpoint2) "cUg" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ @@ -87838,22 +87949,22 @@ pixel_y = 23 }, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (NORTHWEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 9; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (NORTHWEST)" }, /area/quartermaster/qm) "cZW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/qm) "cZX" = ( /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/qm) @@ -87866,10 +87977,10 @@ "cZZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (NORTHEAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (NORTHEAST)" }, /area/quartermaster/qm) "daa" = ( @@ -87929,10 +88040,10 @@ /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (WEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (WEST)" }, /area/quartermaster/qm) "dag" = ( @@ -87971,10 +88082,10 @@ }, /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (EAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (EAST)" }, /area/quartermaster/qm) "dak" = ( @@ -88041,10 +88152,10 @@ pixel_x = -24 }, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (WEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (WEST)" }, /area/quartermaster/qm) "daq" = ( @@ -88077,10 +88188,10 @@ }, /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (EAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (EAST)" }, /area/quartermaster/qm) "dau" = ( @@ -88355,7 +88466,20 @@ name = "Fore Asteroid Maintenance" }) "daW" = ( -/turf/open/floor/plasteel/floorgrime{ +/obj/machinery/power/apc{ + dir = 4; + name = "Fore Asteroid Hallway APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) @@ -88392,10 +88516,17 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "dba" = ( /obj/structure/cable/orange{ d1 = 1; @@ -88888,7 +89019,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) "dbR" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ @@ -89192,6 +89325,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -89311,6 +89445,11 @@ /area/crew_quarters/theatre) "dcz" = ( /obj/structure/table, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -93936,7 +94075,9 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) "dlI" = ( /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -96495,6 +96636,9 @@ d2 = 8; icon_state = "1-8" }, +/obj/structure/sign/mining{ + pixel_y = -32 + }, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -101667,6 +101811,3805 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) +"dBI" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"dBJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Cargo Hallway APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (EAST)"; + icon_state = "warn_end"; + dir = 4 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"dBK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Cargo Hallway APC"; + pixel_x = -23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"dBL" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"dBM" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBN" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBO" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBP" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBR" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"dBT" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"dBU" = ( +/obj/structure/table, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"dBV" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"dBW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dBX" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dBY" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dBZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dCa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dCb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dCc" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dCd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dCe" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCf" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCg" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCh" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCi" = ( +/obj/machinery/door/airlock/titanium{ + name = "mech bay external airlock" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/docking_port/mobile{ + dheight = 0; + dir = 2; + dwidth = 8; + height = 16; + id = "whiteship"; + launch_status = 0; + name = "NT Recovery White-Ship"; + port_angle = -90; + preferred_direction = 1; + roundstart_move = "whiteship_away"; + width = 16 + }, +/obj/docking_port/stationary{ + dir = 2; + dwidth = 8; + height = 16; + id = "whiteship_home"; + name = "SS13: Auxiliary Dock, Station-Port"; + width = 16 + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dCj" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCk" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCl" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCm" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCn" = ( +/obj/structure/shuttle/engine/propulsion{ + tag = "icon-propulsion (NORTH)"; + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dCo" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCp" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCq" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCr" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCs" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dCt" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCu" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCv" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCw" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCx" = ( +/obj/structure/shuttle/engine/propulsion{ + tag = "icon-propulsion (NORTH)"; + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dCy" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (NORTH)"; + icon_state = "heater"; + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dCz" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCA" = ( +/obj/structure/mecha_wreckage/ripley, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/abandoned) +"dCB" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCC" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCD" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dCE" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCF" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCG" = ( +/obj/effect/spawner/lootdrop{ + loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5); + lootdoubles = 0; + name = "25% mech 75% wreckage ripley spawner" + }, +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/abandoned) +"dCH" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCI" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (NORTH)"; + icon_state = "heater"; + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dCJ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCK" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCL" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCM" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCN" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCO" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dCP" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCQ" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCR" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dCS" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCT" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCU" = ( +/obj/structure/shuttle/engine/propulsion{ + tag = "icon-propulsion (NORTH)"; + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dCV" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCW" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCX" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCY" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dCZ" = ( +/obj/machinery/door/airlock/titanium{ + name = "mech bay" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDa" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dDb" = ( +/obj/machinery/door/airlock/titanium{ + name = "mech bay" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDc" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDd" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDe" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDf" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDg" = ( +/obj/structure/shuttle/engine/propulsion{ + tag = "icon-propulsion (NORTH)"; + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dDh" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (NORTH)"; + icon_state = "heater"; + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dDi" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDj" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDk" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDl" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDm" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDn" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDo" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDp" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDq" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/storage/toolbox/emergency/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDr" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDs" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dDt" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (NORTH)"; + icon_state = "heater"; + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"dDu" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dDv" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dDw" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "cerewhiteleft"; + name = "Cargo Blast Door Toggle"; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDx" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDy" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDz" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/item/weapon/storage/bag/ore, +/obj/item/weapon/pickaxe, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDA" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDB" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDC" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDD" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDE" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "cerewhiteright"; + name = "Cargo Blast Door Toggle"; + pixel_x = 24 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dDF" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dDG" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dDH" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteleft" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dDI" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDJ" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDK" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDL" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDM" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDN" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDO" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDP" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDQ" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDR" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDS" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dDT" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteright" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dDU" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/crowbar, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dDV" = ( +/obj/machinery/computer/aifixer, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dDW" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dDX" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dDY" = ( +/obj/machinery/computer/card, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dDZ" = ( +/obj/machinery/computer/emergency_shuttle, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEa" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEb" = ( +/obj/structure/table, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dEc" = ( +/obj/machinery/computer/cargo/request, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dEd" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dEe" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteleft" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dEf" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEg" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEh" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEi" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEj" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEk" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEl" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEm" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEn" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEo" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEp" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEq" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteright" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dEr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/power/apc{ + dir = 8; + name = "Starboard Primary Hallway APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"dEs" = ( +/obj/structure/table, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dEt" = ( +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dEu" = ( +/obj/structure/chair/comfy/beige{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dEv" = ( +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dEw" = ( +/obj/machinery/computer/station_alert, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEx" = ( +/obj/structure/chair/office/light{ + tag = "icon-officechair_white (NORTH)"; + icon_state = "officechair_white"; + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEy" = ( +/obj/structure/chair/office/light{ + tag = "icon-officechair_white (NORTH)"; + icon_state = "officechair_white"; + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEz" = ( +/obj/machinery/computer/communications, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEA" = ( +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dEB" = ( +/obj/structure/chair/comfy/beige{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dEC" = ( +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dED" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dEE" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dEF" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dEG" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/weapon/storage/toolbox/mechanical/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/item/clothing/glasses/welding, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEH" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEI" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEJ" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEK" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEL" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"dEM" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEN" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEO" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dEP" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dEQ" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"dER" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dES" = ( +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dET" = ( +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dEU" = ( +/turf/open/floor/plasteel/darkpurple/side{ + dir = 1 + }, +/area/shuttle/escape) +"dEV" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEW" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEX" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEY" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dEZ" = ( +/turf/open/floor/plasteel/darkyellow/side{ + tag = "icon-darkyellow (NORTH)"; + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"dFa" = ( +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFb" = ( +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFc" = ( +/obj/machinery/computer/security, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFd" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFe" = ( +/obj/structure/ore_box, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dFf" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFg" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFh" = ( +/obj/machinery/door/airlock/titanium{ + name = "cockpit" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFi" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dFj" = ( +/obj/machinery/door/airlock/titanium{ + name = "cockpit" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFk" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFl" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFm" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/tank_dispenser/oxygen{ + layer = 2.7; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dFn" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFo" = ( +/obj/machinery/computer/crew, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dFp" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dFq" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + dir = 1 + }, +/area/shuttle/escape) +"dFr" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFs" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFt" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFu" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFv" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFw" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFx" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/area/shuttle/escape) +"dFy" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFz" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFA" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFB" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFC" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFD" = ( +/obj/structure/table, +/obj/item/device/gps{ + gpstag = "NTCONST1"; + pixel_x = -1; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFE" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFF" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFG" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFH" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/weapon/storage/firstaid/regular, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFI" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFJ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFK" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFL" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFM" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFN" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dFO" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/area/shuttle/escape) +"dFP" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dFQ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFR" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFS" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFT" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFU" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFV" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFW" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFX" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dFY" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dFZ" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGa" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGb" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Cockpit"; + req_access_txt = "19" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dGc" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Cockpit"; + req_access_txt = "19" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dGd" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGe" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGf" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGg" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGh" = ( +/obj/structure/chair/comfy/black, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGi" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGj" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGk" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGl" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGm" = ( +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTHEAST)"; + icon_state = "darkred"; + dir = 5; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"dGn" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dGo" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dGp" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGq" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGr" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGs" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGt" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGu" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGv" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGw" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGx" = ( +/obj/structure/table, +/obj/item/weapon/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGy" = ( +/obj/machinery/computer/shuttle/white_ship, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGz" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -1; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dGA" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGB" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGC" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGD" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dGE" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher{ + id = "shuttle_flasher"; + pixel_x = 24; + pixel_y = 6 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dGF" = ( +/obj/machinery/button/flasher{ + id = "shuttle_flasher"; + pixel_x = -24; + pixel_y = -6 + }, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 8; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dGG" = ( +/turf/open/floor/mineral/plastitanium/brig{ + dir = 4; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dGH" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dGI" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dGJ" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/escape) +"dGK" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGL" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/escape) +"dGM" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGN" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/escape) +"dGO" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGP" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dGQ" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dGR" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"dGS" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"dGT" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dGU" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Emergency Shuttle Brig"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" + }, +/area/shuttle/escape) +"dGV" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dGW" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dGX" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGY" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dGZ" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHa" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHb" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHc" = ( +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"dHd" = ( +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"dHe" = ( +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"dHf" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Emergency Shuttle Brig"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" + }, +/area/shuttle/escape) +"dHg" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dHh" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dHi" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (WEST)"; + icon_state = "brown"; + dir = 8 + }, +/area/shuttle/escape) +"dHj" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHk" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHl" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHm" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/obj/structure/closet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (EAST)"; + icon_state = "brown"; + dir = 4 + }, +/area/shuttle/escape) +"dHn" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 6; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dHo" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dHp" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dHq" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Cargo" + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dHr" = ( +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (WEST)"; + icon_state = "brown"; + dir = 8 + }, +/area/shuttle/escape) +"dHs" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHt" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHu" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHv" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (EAST)"; + icon_state = "brown"; + dir = 4 + }, +/area/shuttle/escape) +"dHw" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dHx" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dHy" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Cargo" + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dHz" = ( +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (WEST)"; + icon_state = "brown"; + dir = 8 + }, +/area/shuttle/escape) +"dHA" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHB" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHC" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHD" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (EAST)"; + icon_state = "brown"; + dir = 4 + }, +/area/shuttle/escape) +"dHE" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHF" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dHG" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dHH" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/cups, +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 27 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dHI" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dHJ" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dHK" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/donkpockets, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dHL" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"dHM" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHN" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dHO" = ( +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHWEST)"; + icon_state = "brown"; + dir = 10 + }, +/area/shuttle/escape) +"dHP" = ( +/turf/open/floor/plasteel/brown, +/area/shuttle/escape) +"dHQ" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/brown, +/area/shuttle/escape) +"dHR" = ( +/turf/open/floor/plasteel/brown, +/area/shuttle/escape) +"dHS" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHEAST)"; + icon_state = "brown"; + dir = 6 + }, +/area/shuttle/escape) +"dHT" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHU" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4 + }, +/area/shuttle/escape) +"dHV" = ( +/turf/open/floor/plasteel/neutral/side, +/area/shuttle/escape) +"dHW" = ( +/turf/open/floor/plasteel/neutral/side, +/area/shuttle/escape) +"dHX" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 27 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHY" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dHZ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIa" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIb" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIc" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dId" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIe" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIf" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIg" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIh" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIi" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIj" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIk" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIl" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIm" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIn" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIo" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIp" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIq" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIr" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIs" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIt" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dIu" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIv" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIw" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIx" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIy" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIz" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIA" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIB" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIC" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dID" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIE" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIF" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIG" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIH" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dII" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIJ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dIK" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIL" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIM" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIN" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIO" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -28 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dIP" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIQ" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIR" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIS" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIT" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIU" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIV" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIW" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIX" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIY" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dIZ" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJa" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJb" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJc" = ( +/obj/structure/sign/bluecross_2{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dJd" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 + }, +/area/shuttle/escape) +"dJe" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dJf" = ( +/obj/machinery/door/airlock/glass_medical{ + name = "Emergency Shuttle Medbay" + }, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJg" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (WEST)"; + icon_state = "neutralcorner"; + dir = 8 + }, +/area/shuttle/escape) +"dJh" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJi" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJj" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dJk" = ( +/mob/living/simple_animal/bot/medbot{ + name = "Speedy* Recovery" + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHWEST)"; + icon_state = "whiteblue"; + dir = 9 + }, +/area/shuttle/escape) +"dJl" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dJm" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dJn" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dJo" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dJp" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHEAST)"; + icon_state = "whiteblue"; + dir = 5 + }, +/area/shuttle/escape) +"dJq" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJr" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJs" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJt" = ( +/obj/machinery/door/airlock/glass_medical{ + name = "Emergency Shuttle Medbay" + }, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJu" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8 + }, +/area/shuttle/escape) +"dJv" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJw" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJx" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJy" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJz" = ( +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (EAST)"; + icon_state = "whitebluecorner"; + dir = 4 + }, +/area/shuttle/escape) +"dJA" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHEAST)"; + icon_state = "whiteblue"; + dir = 5 + }, +/area/shuttle/escape) +"dJB" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJC" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJD" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJE" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHWEST)"; + icon_state = "whiteblue"; + dir = 10 + }, +/area/shuttle/escape) +"dJF" = ( +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dJG" = ( +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dJH" = ( +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (WEST)"; + icon_state = "whitebluecorner"; + dir = 8 + }, +/area/shuttle/escape) +"dJI" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJJ" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJK" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dJL" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJM" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJN" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJO" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJP" = ( +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJQ" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJR" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8 + }, +/area/shuttle/escape) +"dJS" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJT" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dJU" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dJV" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJW" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJX" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dJY" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/AMinus, +/obj/item/weapon/reagent_containers/blood/BMinus{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/blood/BPlus{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OPlus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/APlus, +/obj/item/weapon/reagent_containers/blood/random, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dJZ" = ( +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dKa" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/weapon/circular_saw, +/obj/item/weapon/scalpel{ + pixel_y = 12 + }, +/obj/item/weapon/hemostat, +/obj/item/weapon/surgicaldrill, +/obj/item/weapon/cautery{ + pixel_x = 4 + }, +/obj/item/weapon/retractor, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dKb" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8 + }, +/area/shuttle/escape) +"dKc" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dKd" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dKe" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/crowbar, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dKf" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dKg" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dKh" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dKi" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dKj" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dKk" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/weapon/surgical_drapes, +/obj/item/weapon/razor, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dKl" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/toxin, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHWEST)"; + icon_state = "whiteblue"; + dir = 10 + }, +/area/shuttle/escape) +"dKm" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 1 + }, +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dKn" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dKo" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHEAST)"; + icon_state = "whiteblue"; + dir = 6 + }, +/area/shuttle/escape) +"dKp" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dKq" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 + }, +/area/shuttle/escape) +"dKr" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 + }, +/area/shuttle/escape) +"dKs" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dKt" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Engine Room"; + req_one_access_txt = "10;24" + }, +/turf/open/floor/plasteel/yellow, +/area/shuttle/escape) +"dKu" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKv" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKw" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKx" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKy" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKz" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKA" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKB" = ( +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKC" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHWEST)"; + icon_state = "yellow"; + dir = 9 + }, +/area/shuttle/escape) +"dKD" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKE" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKF" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/monitor, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKG" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKH" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKI" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHEAST)"; + icon_state = "yellow"; + dir = 5 + }, +/area/shuttle/escape) +"dKJ" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKK" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKL" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKM" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKN" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKO" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dKP" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8 + }, +/area/shuttle/escape) +"dKQ" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (EAST)"; + icon_state = "yellowcorner"; + dir = 4 + }, +/area/shuttle/escape) +"dKR" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/metalfoam, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKS" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dKT" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHEAST)"; + icon_state = "yellow"; + dir = 5 + }, +/area/shuttle/escape) +"dKU" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKV" = ( +/obj/structure/urinal{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKW" = ( +/obj/structure/urinal{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKX" = ( +/obj/structure/urinal{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKY" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dKZ" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dLa" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dLb" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dLc" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8 + }, +/area/shuttle/escape) +"dLd" = ( +/obj/structure/sign/electricshock{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4 + }, +/area/shuttle/escape) +"dLe" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dLf" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLg" = ( +/obj/structure/table, +/obj/structure/sign/enginesafety{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLh" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLi" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLk" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dLl" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6 + }, +/area/shuttle/escape) +"dLm" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLn" = ( +/turf/open/floor/plating, +/area/shuttle/escape) +"dLo" = ( +/turf/open/floor/plating, +/area/shuttle/escape) +"dLp" = ( +/obj/machinery/light/small{ + tag = "icon-bulb1 (NORTH)"; + icon_state = "bulb1"; + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLq" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLr" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLs" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLt" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLu" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLv" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLw" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/shuttle/escape) +"dLx" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) (1,1,1) = {" aaa @@ -104205,8 +108148,8 @@ aaa aaa aaa aaa -aad aaa +aad aaa aaa aaa @@ -104560,6 +108503,7 @@ aaa aaa aaa aaa +aaa aac aac aac @@ -104632,7 +108576,6 @@ aaa aaa aaa aaa -aaa aac aac aad @@ -104889,6 +108832,7 @@ aaa aaa aaa aaa +aaa aac aac aad @@ -104936,7 +108880,6 @@ aaa aaa aaa aaa -aaa aad aaa aaa @@ -105396,6 +109339,7 @@ aaa aaa aaa aaa +aaa aad aaa aaa @@ -105492,7 +109436,6 @@ aaa aaa aaa aaa -aaa aad aad aad @@ -105752,14 +109695,14 @@ aaa aaa aaa aaa -aad -aad -aad -aad -aab -aab -aab aaa +aad +aad +aad +aad +aab +aab +aab aaa aaa aaa @@ -106216,8 +110159,8 @@ aaa aaa aaa aaa -aag aaa +aag aaa aaa aaa @@ -106367,6 +110310,7 @@ aaa aaa aaa aaa +aaa aag aaa aaa @@ -106549,7 +110493,6 @@ aaa aaa aaa aaa -aaa "} (20,1,1) = {" aaa @@ -107834,6 +111777,7 @@ aaa aaa aaa aaa +aaa "} (25,1,1) = {" aaa @@ -107909,7 +111853,6 @@ aaa aaa aaa aaa -aaa aac aac aad @@ -108290,15 +112233,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -108547,15 +112490,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -108804,15 +112747,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -113559,14 +117502,14 @@ daa aSe aJz afq -aLm +afV afV aNC aOJ -aLm -aLn -aLn -aLn +afV +afS +afS +afS akp alo afS @@ -113816,14 +117759,14 @@ arS aqG anC aUW -aLm +afV aMD aND aOK -aPH +cZu aRn aSh -aLm +afV akp afV aVo @@ -114073,14 +118016,14 @@ arS afV anC aKF -aLn +afS aME -daW -daW +aym +aym daZ -daW -daW -aLn +cZy +cZu +afS akp akp cYl @@ -114330,14 +118273,14 @@ arS afS anC aKG -aLn +afS aMF aNE aOL aPI aRo daW -aLm +afV cZh aUQ afS @@ -114587,11 +118530,11 @@ arS adZ aJA afV -aLm +afV aMG -aNF -aLm -aPJ +aFe +afV +dBI aRp aLm aLm @@ -115139,10 +119082,10 @@ aYT aYP aZY bbw +dBN bbX bbX -bbX -bbX +dBR dcw dcJ dcW @@ -115395,9 +119338,9 @@ aaa aZY aZY aZY -bbw -bbX -bbX +dBM +dBO +dBP bdf bdS dcw @@ -115586,10 +119529,10 @@ afr afr ago ahk -ahV +ann aiD ajw -akr +ajy alh alH amn @@ -115655,8 +119598,8 @@ baX bbx bbY bcz -bcz -bcz +dBQ +dBS bcz bfu dcw @@ -115846,7 +119789,7 @@ ahl ahW aiE ajx -ahV +ann ali alH amo @@ -116357,7 +120300,7 @@ abW afr agq ahm -ahY +aob aiG ajz cJt @@ -117743,7 +121686,7 @@ bJh bKN bMm bJe -bKO +dBV bQe bMn bSl @@ -121914,9 +125857,9 @@ crv cst cte cUr -cvu +ckE cwp -cxm +ckC cxN cyC cue @@ -122432,7 +126375,7 @@ cvw cwr cxn cxP -cyE +clR cue czF cAB @@ -122685,7 +126628,7 @@ crx csx ctr cUn -cjg +cjU cws cxo cxo @@ -124677,7 +128620,7 @@ aad aaa abC aaa -aaa +aag aaa aad aac @@ -127603,21 +131546,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -127860,21 +131803,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128117,21 +132060,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128374,21 +132317,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aac -aad -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128631,21 +132574,21 @@ aaa aaa aaa aaa -aaa -aaa -aad -aab -aac -aac -aac -aac -aac -aab -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128888,21 +132831,21 @@ aaa aaa aaa aaa -aaa -aaa -aad -aad -aac -aac -aac -aac -aac -aad -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -129145,21 +133088,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aad -aac -aac -aac -aac -aac -aab -aab -aad -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -129402,21 +133345,21 @@ aaa aaa aaa aaa -aad -aaa -aaa -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -129659,21 +133602,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aad -aac -aac -aab -aac -aac -aad -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -129916,21 +133859,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -130173,21 +134116,21 @@ aaa aaa aaa aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -130360,8 +134303,8 @@ djO byS aZH aZt -aaa -aaa +aZt +aZt aaa aaa aaa @@ -130430,21 +134373,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -130617,8 +134560,8 @@ djP djl aZH aZt -aaa -aaa +aZt +aZt aaa aaa aaa @@ -130687,21 +134630,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -130874,9 +134817,9 @@ bAe cMH aZH aZt -abC -aaa -aaa +aZt +aZt +aZt aaa aaa aaa @@ -131133,7 +135076,7 @@ dqs dqs dqr dqr -aaa +aZt aaa aaa aaa @@ -131185,12 +135128,12 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -131442,12 +135385,12 @@ aaa aaa aaa aaa -aaa -aac -aad -aad -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -131696,16 +135639,16 @@ aaa aaa aaa aaa -aaa -aaa -aad -aaa -aad -aac -aac -aab -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -131941,28 +135884,28 @@ aaa aaa aXR aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aac -aac -aab -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -132198,28 +136141,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -132455,28 +136398,28 @@ aaa aaa aXR aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aab -aab -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -132712,28 +136655,28 @@ abC abC aXR aaa -aaa -aaa -aaa -aad -aac -aad -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aab -aab -aab -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -132969,28 +136912,28 @@ aaa aaa aXR aaa -aad -aaa -aaa -aad -aac -aac -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -133189,9 +137132,9 @@ aZH aZt aZt aZt -abC -abC -aaa +aZt +aZt +aZt aaa aaa aaa @@ -133226,28 +137169,28 @@ aaa aaa aXR aaa -aaa -aaa -aaa -aad -aad -aac -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aab -aaa -aad -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -133446,9 +137389,9 @@ aZH aZt aZt aZt -aaa -aaa -aaa +aZt +aZt +aZt aaa aaa aaa @@ -133483,28 +137426,28 @@ aaa aaa aXR aaa -aaa -aaa -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aad -aaa -aaa -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -133703,7 +137646,7 @@ aZH aZt aZt aZt -aaa +aZt aaa aaa aaa @@ -133740,19 +137683,19 @@ aaa aaa aXR aaa -aaa -aaa -aac -aac -aac -aac -aab -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -133960,7 +137903,7 @@ aZH aZt aZt aZt -aaa +aZt aaa aaa aaa @@ -133997,19 +137940,19 @@ aaa aaa aXR aaa -aaa -aaa -aac -aac -aac -aad -aab -aab -aac -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -134254,19 +138197,19 @@ aaa aaa aXR aaa -aaa -aaa -aac -aac -aac -aab -aab -aac -aac -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -134489,9 +138432,9 @@ cKF cKF cKF cKF -aaa -aaa -aaa +cKF +cKF +cKF aaa aaa aaa @@ -134511,19 +138454,19 @@ aaa aaa aXR aaa -aaa -aaa -aac -aab -aab -aab -aab -aad -aad -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -134736,12 +138679,12 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF +dCU +dDh +dDu +dDH +dEe +dEE cKF cKF cKF @@ -134768,19 +138711,19 @@ aaa aaa aXR aaa -aaa -aaa -aaa -aaa -aab -aab -aad -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -134990,20 +138933,20 @@ aZH aaa cKF cKF +dCn +dCy +dCJ +dCV +dDi +dDv +dDI +dEf +dEF +dFd +dFA +dFQ cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa aaa aaa aaa @@ -135025,19 +138968,19 @@ abC abC aXR aaa -aaa -aaa -aad -aaa -aab -aab -aad -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -135246,6 +139189,21 @@ aZH aZH aaa cKF +dCe +dCo +dCz +dCK +dCW +dDj +dDw +dDJ +dEg +dEG +dFe +dFB +dFR +dGd +dGu cKF cKF cKF @@ -135254,21 +139212,6 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -135282,31 +139225,31 @@ aaa aaa aXR aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -135503,6 +139446,21 @@ aZt aaa aaa cKF +dCf +dCp +dCA +dCL +dCX +dDk +dDx +dDK +dEh +dEH +dFf +dFC +dFS +dGe +dGv cKF cKF cKF @@ -135511,21 +139469,6 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -135551,19 +139494,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -135660,10 +139603,10 @@ aHa aIa aFI abW -aLm -aLm -aLm -aLm +afV +afV +afV +afV aLm aQC aRE @@ -135753,36 +139696,36 @@ dpU djw byP byP -dqk +dBW cMH aZH -aZt -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aac -aad -aad -aaa -aaa -aaa aaa aaa +cKF +cKF +dCg +dCq +dCB +dCM +dCY +dDl +dDy +dDL +dEi +dEI +dFg +dFD +dFT +dGf +dGw +dGO +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -135808,19 +139751,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -135917,10 +139860,10 @@ aHb aIb aFI abW -aLm +afV aMg aNj -aOj +cYn aPg aQD aRD @@ -136012,9 +139955,27 @@ dpX dpX dqI byS -aZH -aaa -aaa +byS +dBY +dCa +dCc +byS +dCh +dCr +dCC +dCN +dCZ +dDm +dDz +dDM +dEj +dEJ +dFh +dFE +dFU +dGg +dGx +dGP cKF cKF cKF @@ -136022,24 +139983,6 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aad -aad -aac -aac -aad -aaa -aaa -aaa aaa aaa aaa @@ -136056,28 +139999,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -136174,7 +140117,7 @@ aHc aIc aFI adZ -aLm +afV aMh aNk aOk @@ -136267,11 +140210,29 @@ bDb byQ byQ byO -byP -bAd -aZt -aaa -aaa +dBX +cdB +dgn +cbr +cbr +cbr +cdB +dCi +dCs +dCD +dCO +dDa +dDn +dDA +dDN +dEk +dEK +dFi +dFF +dFV +dGh +dGy +dGQ cKF cKF cKF @@ -136279,24 +140240,6 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aab -aad -aac -aac -aad -aaa -aaa -aaa aaa aaa aaa @@ -136313,28 +140256,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -136431,10 +140374,10 @@ aHd aId aFI adZ -aLm -aMi +afV +aOG aNl -aOl +cYo aLm aQF aRD @@ -136523,12 +140466,30 @@ bAd byQ byP byP +byP bYK +cMH +cMH +dBZ +dCb +dCd byS -byS -aZt -aaa -aaa +dCj +dCt +dCE +dCP +dDb +dDo +dDB +dDO +dEl +dEL +dFj +dFG +dFW +dGi +dGz +dGR cKF cKF cKF @@ -136536,24 +140497,6 @@ cKF cKF cKF cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aab -aad -aac -aac -aac -aad -aad -aaa -aaa aaa aaa aaa @@ -136570,28 +140513,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -136688,10 +140631,10 @@ aFI aFI aFI adZ -aLm -aMj +afV +aym aNl -daZ +aME aLm aQG aRN @@ -136788,29 +140731,29 @@ aaa aaa cKF cKF +dCk +dCu +dCF +dCQ +dDc +dDp +dDC +dDP +dEm +dEM +dFk +dFH +dFX +dGj +dGA +dGS +cKF +cKF +cKF +cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aad -aac -aac -aac -aad -aaa -aaa -aaa aaa aaa aaa @@ -136827,28 +140770,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -136945,7 +140888,7 @@ aHe aBA adZ adZ -aLm +afV aMk aNm aOm @@ -137045,29 +140988,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aad -aac -aac -aac -aad -aaa -aaa -aaa +dCl +dCv +dCG +dCR +dDd +dDq +dDD +dDQ +dEn +dEN +dFl +dFI +dFY +dGk +dGB +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137084,28 +141027,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137202,7 +141145,7 @@ akq anC dam afS -aLn +afS aMl aNn aOn @@ -137302,29 +141245,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dCm +dCw +dCH +dCS +dDe +dDr +dDE +dDR +dEo +dEO +dFm +dFJ +dFZ +dGl +dGC +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137341,28 +141284,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137459,10 +141402,10 @@ afq anC akq aKn -aLn -aLn -aLm -aLm +afS +afS +afV +afV aLm aQB aRD @@ -137557,31 +141500,31 @@ aZt aZt aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +dCx +dCI +dCT +dDf +dDs +dDF +dDS +dEp +dEP +dFn +dFK +dGa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137598,28 +141541,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aac -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137815,30 +141758,30 @@ aZt aaa aaa aaa -aaa -aaa -aaa -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +dDg +dDt +dDG +dDT +dEq +dEQ +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137855,28 +141798,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -137977,7 +141920,7 @@ akp cYC dav auZ -aPj +akH aQa aRD aSI @@ -138072,30 +142015,30 @@ aZt aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa -aac -aac -aac -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138112,28 +142055,28 @@ aaa aaa aaa aaa -aaa -aad -aaa -aaa -aac -aab -aab -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138329,15 +142272,15 @@ aZt aaa aaa aaa -aaa -aaa -aac -aac -aac -aac -aac -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138369,28 +142312,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138586,15 +142529,15 @@ aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aad -aad +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138626,28 +142569,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138843,15 +142786,15 @@ aaa aaa aaa aaa -aac -aac -aac -aac -aac -aac -aac -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -138883,18 +142826,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -139100,15 +143043,15 @@ aaa aaa aaa aaa -aac -aac -aac -aac -aac -aac -aac -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -139354,18 +143297,18 @@ aZH aZH aaa aaa -aaa -aaa -aab -aac -aac -aac -aac -aad -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -139400,9 +143343,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +cCx +cEd +cCx aaa aaa aaa @@ -139611,18 +143554,18 @@ aZH aZH aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -139656,11 +143599,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCx +cDp +cDq +cDp +cCx aaa aaa aaa @@ -139795,7 +143738,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaa @@ -139868,14 +143811,14 @@ aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -cgf +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -139913,11 +143856,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDq +cDq +cEM +cCy aaa aaa aaa @@ -140125,14 +144068,14 @@ aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aab +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -140170,11 +144113,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDr +cDq +cEN +cCy aaa aaa aaa @@ -140382,14 +144325,14 @@ aaa aaa aaa aaa -aaa -aaa -aac -aac -aac -aac -aac -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -140427,11 +144370,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCz +cDs +cDq +cEO +cCz aaa aaa aaa @@ -140639,14 +144582,14 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aab -aab -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -140684,11 +144627,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDs +cDq +cEO +cCy aaa aaa aaa @@ -140941,11 +144884,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDs +cDq +cEO +cCy aaa aaa aaa @@ -141198,11 +145141,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDs +cDq +cEO +cCy aaa aaa aaa @@ -141455,11 +145398,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCA +cDs +cDq +cEO +cCA aaa aaa aaa @@ -141712,11 +145655,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDt +cDq +cEP +cCy aaa aaa aaa @@ -141969,11 +145912,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cDs +cDq +cEO +cCy aaa aaa aaa @@ -142226,11 +146169,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cCy +cCz +cEe +cCz +cCy aaa aaa aaa @@ -149067,7 +153010,7 @@ bbo bbo baS bes -bey +dBT bgh bgW bie @@ -149353,11 +153296,11 @@ bIu bKa bLC bEK -dpc +bNT bPA -dpd +bex bRR -dph +bbR bUd bVe bVV @@ -149389,7 +153332,7 @@ cgl cgt cgB cgB -cgB +dEr cgB cgB chw @@ -149610,13 +153553,13 @@ bIv bHh bLD bEK -dhy -bIO -dhy -dpf -bgs -bgs -bgs +bey +bPB +bey +bdG +baS +baS +baS aaa aaa aaa @@ -149867,11 +153810,11 @@ bIw bHh bLE bEK -dhy -bIO -dhy -dpg -bgs +bey +bPB +bey +ber +baS bbo bbo aaa @@ -150126,9 +154069,9 @@ bLF bEK bNU bPC -dpe +bQL bRS -bgs +baS bbo bbo bbo @@ -150383,9 +154326,9 @@ bLG bEK bNV bOq -bgs -bgs -bgs +baS +baS +baS bbo bbo bbo @@ -150881,7 +154824,7 @@ bqc brC bsT buH -buH +dBU bwc bxS bAm @@ -152112,7 +156055,7 @@ cZM daQ aUW avh -aPw +akH aRd aRD aTb @@ -152238,7 +156181,7 @@ chc chc chc chc -ctT +cul cuF csC cwG @@ -152495,7 +156438,7 @@ cjU cjV cjV csU -clW +cqD cuG csC cwG @@ -152630,7 +156573,7 @@ anV aRd aRD aTa -aPw +akH alr aqH aoy @@ -152784,11 +156727,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -153041,11 +156984,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -153298,11 +157241,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -153555,11 +157498,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -153812,11 +157755,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -154069,11 +158012,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -154175,13 +158118,13 @@ azA aTJ anV alx -aLm +afV aWm -aPI -aUR +dBJ +dBK dbQ aXz -aLm +afV alx alx alx @@ -154326,11 +158269,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -154432,13 +158375,13 @@ cOC aTJ anV alx -aLm +afV aWn -aOl -daW -aXe +aME +akp +auf aXA -aLm +afV alx alx alx @@ -154583,11 +158526,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -154689,13 +158632,13 @@ apb aTJ anV alx -aLm +afV aMg -aWF +aBC aWT aXf -aNF -aLm +aFe +afV alx alx alx @@ -154840,11 +158783,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -154946,13 +158889,13 @@ aTh aTK anV alx -aLm -aLm -aLm -aLm -aLm -aLm -aLm +afV +afV +afV +akH +afV +afV +afV alx alx alx @@ -155076,11 +159019,11 @@ aaa aaa aaa aaa -aaa -cCx -cEd -cCx -aaa +cKF +cKF +cKF +cKF +cKF aaa cfJ cFY @@ -155097,11 +159040,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -155204,10 +159147,10 @@ anV anV alx and -and -alx -alx -alx +afV +akp +dBL +afS alx alx alx @@ -155333,11 +159276,11 @@ aaa aaa aaa aaa -cCx -cDp -cDq -cDp -cCx +cKF +cKF +cKF +cKF +cKF aaa cfJ cFY @@ -155354,11 +159297,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -155461,10 +159404,10 @@ cZB afS alx alx -alx -and -alx -and +afS +akp +aXh +afV and and and @@ -155590,11 +159533,11 @@ aaa aaa aaa aaa -cCy -cDq -cDq -cEM -cCy +cKF +cKF +cKF +cKF +cKF aaa cfI cfJ @@ -155611,11 +159554,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF aad aaa aaa @@ -155717,11 +159660,11 @@ aiS afS afV and -and -and -and -and -and +aez +afV +akp +afV +aez and and alx @@ -155847,11 +159790,11 @@ aaa aaa aaa aaa -cCy -cDr -cDq -cEN -cCy +cKF +cKF +cKF +cKF +cKF aaa aaa cfI @@ -155974,10 +159917,10 @@ akp cYg afS and -and -and -and -and +afV +alQ +akp +afS and and and @@ -156104,11 +160047,11 @@ aaa aaa aaa aaa -cCz -cDs -cDq -cEO -cCz +cKF +cKF +cKF +cKF +cKF aaa aaa cfJ @@ -156232,10 +160175,10 @@ adZ afS aez aez -afV +alQ +alQ aez and -and alx alx alx @@ -156353,7 +160296,7 @@ aaa aaa cfI cfI -cfI +cKF aaa aaa aaa @@ -156361,11 +160304,11 @@ aaa aaa aaa aaa -cCy -cDs -cDq -cEO -cCy +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -156608,21 +160551,21 @@ ckg cjz aaa aaa -cfI -cfI -cfI +cKF +cKF +cKF +cKF aaa aaa aaa aaa aaa aaa -aaa -cCy -cDs -cDq -cEO -cCy +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -156866,20 +160809,20 @@ chX aaa aaa aaa -cfI +cKF +cKF +cKF aaa aaa aaa aaa aaa aaa -aaa -aaa -cCy -cDs -cDq -cEO -cCy +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -157095,16 +161038,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +chm +chm +chm chm chm chm @@ -157112,31 +161055,31 @@ ckh chm cly chm -chn -chn -chn +cKF +cKF +cKF chm cpu chm cpu chm +cKF +cKF chm chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCA -cDs -cDq -cEO -cCA +chn +chn +chn +chn +chn +chm +chm +chm +chm +cKF +cKF +cKF +cKF aaa aaa aaa @@ -157352,48 +161295,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF chm chm chm chm +cja +dGD ciZ cjA cjB chm -chJ -ckk -ckk -ckk -ckk -coP -chJ -chm -cra -cra -csY +dHE +ckK +chn +chn +chn +ckK +clz +dIO +clz +ckK chm chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCy -cDt -cDq -cEP -cCy +ckK +dJq +dJB +dJL +dJV +dKf +dKp +chm +dKC +dKO +ckK +chm +chm +cKF +cKF aaa aaa aaa @@ -157609,48 +161552,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +chm +chm +chm +chm +chm +chm chm -chx -chH chZ -chm -cja cjB -cki +cjB +cjB +cjB chm clz -chJ -chJ -chJ -chJ -chJ -cpv -chm -cra +dHT +clz +clz +clz +dIt +clz +clz +clz cra csY -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCy -cDs -cDq -cEO -cCy +csY +dJg +cmb +cmb +cmb +cmb +cmb +cmb +chn +dKD +dKP +dLb +ckK +chm +chm +chm aaa aaa aaa @@ -157866,52 +161809,52 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chy -chI -cia +cKF +chm +chm +chm +chm +chm +chm +chm chm cja +dGE +dGT cjB cki chm -chJ -clZ -clZ -clZ -clZ -clZ -chJ +dHF +clz +clz +dHZ +dIj +dIu +dIE cqm -cra -cra -csZ +cqm +cqm +clz +clz +cqm +cqm +cqm +cqm +cqm +cqm +clz +chn +dKE +clz +dLc +dLe +chm ctV cuO aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -cCy -cCz -cEe -cCz -cCy -aaa -aaa -aaa -aaa abC aaa aaa @@ -158123,52 +162066,52 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn +chm +chm +chm +ckK +dEs +dER +dFo chz -chJ -cib +chm +chm chm chn cjC chn -ckK -chJ -cma -cma -cma -cma -cma -chJ chm -crb -cso -csZ +dHG +cma +dHV +dIa +dIk +dIv +dIF +dIP +cqn +cqn +cma +clZ +cqn +cqn +cqn +cqn +cqn +cqn +dKq +chm +dKF +clz +clz +dLf +chm ctV cuO aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa abC aaa aaa @@ -158380,31 +162323,45 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn +cKF +cKF +chm +dDU +dEt +dES +dFp chA -chJ +chm cic -chm +dGF +cjb cjb -chJ ckj -ckL -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chm -chm chm +dHH +cma +dHW +dIb +dIl +dIw +dIG +dIQ +dIU +dIY +cma +clZ +dJh +dJr +dJC +dJM +dJW +dKg +cma +chn +dKG +clz +clz +dLg chm ctV cuO @@ -158412,20 +162369,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa abC aaa aaa @@ -158637,52 +162580,52 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF chn -chz -chJ +dDV +dEu +dET +dFq +dFL +chm chJ ciB -chJ -chJ +cjb +dHc ckk -ckl -chJ -clZ -clZ -clZ -clZ -clZ -chJ chn -cjd -csp -cjd +dHI +cma +clZ +clZ +clZ +clZ +clZ +clZ +clZ +clZ +cma +clZ +clZ +clZ +clZ +clZ +clZ +clZ +cma +dKt +dKH +clz +clz +dLh +chm ctV cuO aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa abC aaa aaa @@ -158894,52 +162837,52 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF chn +dDW +dEv +dEU +dFr chB -chK -cid chm +cid +ciB cjc -chJ +dHd ckl -ckl -chJ +chn +dHJ cma -cma -cma -cma -cma -chJ +clZ +dIc +dIm +dIx +dIH cqn -cjc -cjc -cjc +cqn +cqn +cma +clZ +cqn +cqn +cqn +cqn +cqn +cqn +cma +chn +dKI +dKQ +clz +dLi +chm ctV cuO aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaP abC cHf @@ -159151,32 +163094,46 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chx -chL -cie -chm -cjd -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ +cKF +cKF chn -cjc -cjc -cjc +dDX +dEw +dEV +dFs +chB +chm +cie +ciB +cjd +dHe +ckk +chn +dHK +cma +clZ +dId +dIn +dIy +dII +dIR +dIV +dIZ +cma +clZ +dJi +dJs +dJD +dJN +dJX +dKh +dKr +ckK +ckK +dKR +clz +dLj +chm ctV cuO aaa @@ -159185,20 +163142,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa cHg cHo cHF @@ -159376,8 +163319,8 @@ bgs bgr bgr bgr -bOq -bOq +bIO +bIO bgr bgs bbo @@ -159408,48 +163351,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chm -chm -chm -cje -cjD -cjc -cjc -clA -cmb -cmb -cmb -cmb -coQ -clA +cKF +cKF chn -crc -csq -crc +dDY +dEx +dEW +dFt +chB chm +dGm +dGG +cjd +cjd +dHn chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +clA +cma +clz +cmb +cmb +cmb +cmb +cmb +cmb +cmb +clz +clz +cmb +cmb +cmb +cmb +cmb +cmb +clz +csY +chm +dKS +clz +dLk +chm +ckK +ckK aaa aaa aaa @@ -159665,48 +163608,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm +cKF +cKF chn -chm -chn -chm +dDZ +dEy +dEX +dFu +dFM chm chm chn +dGU +dHf chn -chn +ckK +dHL +clz +clz +dIe +dIo +dIz +dIJ +cqm +cqm +cqm +dJc +clz +dJj +clz +clz +clz +clz +clz +dKs +clz chm +dKT +dLd +dLl chm -chm -chn -chm -chn -chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +ckK +ckK aaa aaa aaa @@ -159922,48 +163865,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +chn +dEa +dEz +dEY +dFv +chB +dGb +dGn +dGH +dGV +dHg +dHo +dHw +dHM +clz +clZ +dIf +dIp +dIA +dIK +cqn +cqn +cqn +cma +ckK +chm +dJt +chm +chm +chm +chm +chm +dKu +chm +chm +chm +dLm +ckK +ctV +cuO aaa aaa aaa @@ -160179,48 +164122,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +chn +dEb +dEA +dEZ +dFw +chB +dGc +dGo +dGI +dGW +dHh +dHp +dHx +dHN +dHU +clZ +dIg +dIq +dIB +dIL +dIS +dIW +dJa +dJd +chm +dJk +dJu +dJE +dJO +dJY +dKi +chm +dKv +dKJ +dKU +chm +dLn +dLs +ctV +cuO aaa aaa aaa @@ -160436,48 +164379,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +chn +dEc +dEB +dFa +dFx +dFN +chm +chm +chm +chm +chm +dHq +dHy +chm +ckK +clZ +clZ +clZ +clZ +clZ +clZ +clZ +clZ +cma +dJf +dJl +dJv +dJF +dJP +dJZ +dKj +chm +dKw +dKK +dKV +chm +dLo +dLt +ctV +cuO aaa aaa aaa @@ -160693,50 +164636,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa +cKF +cKF +chm +dEd +dEC +dFb +dFy +dFO +chm +dGp +dGJ +dGX +dHi +dHr +dHz +dHO +chm +clZ +dIh +dIr +dIC +dIM +cqn +cqn +cqn +cma +chn +dJm +dJw +dJG +dJQ +dKa +dKk +chm +dKx +dKL +dKW +chm +dLp +dLu +ctV +cuO +cKF +cKF aaa aaa aaa @@ -160950,50 +164893,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +chm +chm +chm +ckK +dED +dFc +dFz +dFP +chm +dGq +dGK +dGY +dHj +dHs +dHA +dHP +chm +clZ +dIi +dIs +dID +dIN +dIT +dIX +dJb +cma +chm +dJn +dJx +dJH +dJR +dKb +dKl +chm +dKy +dKM +dKX +chm +dLq +dLv +ctV +cuO +cKF +cKF aaa aaa aaa @@ -161207,50 +165150,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +chm +chm +chm +chm +chm +chm +chm +chm +dGr +dGL +dGZ +dHk +dHt +dHB +dHQ +chm +dHX +cmb +cmb +cmb +cmb +cmb +cmb +cmb +clz +chn +dJo +dJy +dJI +dJS +dKc +dKm +chm +dKz +dKN +dKY +chm +dLr +dLw +ctV +cuO +cKF +cKF aaa aaa aaa @@ -161464,50 +165407,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +chm +chm +chm +chm +chm +chm +chm +dGs +dGM +dHa +dHl +dHu +dHC +dHR +chm +dHY +clz +clz +clz +clz +clz +clz +clz +dJe +chm +dJp +dJz +dJJ +dJT +dKd +dKn +chm +dKA +chm +dKZ +chm +chm +chm +chm +chm +cKF +cKF aaa aaa aaa @@ -161721,50 +165664,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aad -aaa +cKF +cKF +cKF +cKF +cKF +chm +chm +chm +chm +dGt +dGN +dHb +dHm +dHv +dHD +dHS +chm +chm +chn +chn +chn +chn +chn +chn +chn +chm +chm +ckK +dJA +dJK +dJU +dKe +dKo +chm +dKB +chm +dLa +chm +chm +chm +cKF +cKF +cKF +cKF aaa aaa aaa @@ -161978,50 +165921,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +chm +chm +chm +chm +chm +chm +chm +chm +chm +chm +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +chm +chm +chn +chn +chn +chm +chm +chm +chm +chm +chm +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -162241,44 +166184,44 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aab -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -162498,44 +166441,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aac -aac -aad -aad -aad -aad -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -162755,44 +166698,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aac -aac -aad -aad -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163012,44 +166955,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163204,12 +167147,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163269,44 +167212,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aad -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +dLx +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163461,6 +167404,7 @@ aaa aaa aaa aaa +aaa cKF cKF cKF @@ -163468,12 +167412,11 @@ cKF cKF aaa aaa -aaa -aaa -aaa -aaa -btw -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163526,44 +167469,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aac -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163718,12 +167661,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163783,39 +167726,39 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aab -aab -aad -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -163975,6 +167918,7 @@ aaa aaa aaa aaa +aaa cKF cKF cKF @@ -164007,11 +167951,46 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +aag aaa aaa aaa @@ -164025,54 +168004,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -164232,6 +168175,7 @@ aaa aaa aaa aaa +aaa cKF cKF cKF @@ -164264,92 +168208,91 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +aaa +aaa +aaa +aaa +aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -164489,6 +168432,7 @@ aaa aaa aaa aaa +aaa cKF cKF cKF @@ -164521,11 +168465,45 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -164550,63 +168528,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -164746,6 +168689,7 @@ aaa aaa aaa aaa +aaa cKF cKF cKF @@ -164778,11 +168722,45 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -164807,63 +168785,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165003,6 +168946,7 @@ aad aaa aaa aaa +aaa cKF cKF cKF @@ -165035,6 +168979,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165071,56 +169042,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165293,6 +169236,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165329,55 +169299,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165550,6 +169493,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165586,55 +169556,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165807,6 +169750,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -165843,55 +169813,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166064,6 +170007,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166100,55 +170070,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166321,6 +170264,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166357,55 +170327,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166578,6 +170521,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166614,55 +170584,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166835,6 +170778,33 @@ aaa aaa aaa aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -166871,55 +170841,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -167092,33 +171035,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm new file mode 100644 index 0000000000..f793e29372 --- /dev/null +++ b/_maps/shuttles/emergency_cere.dmm @@ -0,0 +1,227 @@ +"aa" = (/turf/open/space/basic,/area/space) +"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/escape) +"ac" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape) +"ad" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/escape) +"ae" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/crowbar,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"af" = (/obj/machinery/computer/aifixer,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ag" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ah" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"ai" = (/obj/machinery/computer/card,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aj" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"ak" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"al" = (/obj/structure/table,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"am" = (/obj/machinery/computer/cargo/request,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"an" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"ao" = (/obj/structure/table,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"ap" = (/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aq" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ar" = (/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"as" = (/obj/machinery/computer/station_alert,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"at" = (/obj/structure/chair/office/light{tag = "icon-officechair_white (NORTH)"; icon_state = "officechair_white"; dir = 1},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"au" = (/obj/machinery/computer/communications,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"av" = (/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"aw" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"ax" = (/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"ay" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"az" = (/obj/machinery/computer/med_data,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aA" = (/turf/open/floor/plasteel/darkpurple/side{dir = 1},/area/shuttle/escape) +"aB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aC" = (/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aD" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aE" = (/turf/open/floor/plasteel/darkyellow/side{tag = "icon-darkyellow (NORTH)"; icon_state = "darkyellow"; dir = 1},/area/shuttle/escape) +"aF" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aG" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aH" = (/obj/structure/chair/comfy/beige{dir = 8},/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aI" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape) +"aJ" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape) +"aK" = (/obj/structure/chair/comfy/beige{dir = 4},/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aL" = (/obj/machinery/computer/secure_data,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aM" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape) +"aN" = (/obj/machinery/light,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aP" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape) +"aQ" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aR" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aS" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"aT" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"aU" = (/obj/structure/table,/obj/machinery/recharger,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/open/floor/mineral/plastitanium/brig{dir = 9; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"aV" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aW" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aX" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aY" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aZ" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/shuttle/escape) +"ba" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/shuttle/escape) +"bb" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/turf/open/floor/plasteel,/area/shuttle/escape) +"bc" = (/turf/open/floor/plasteel,/area/shuttle/escape) +"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"be" = (/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bf" = (/obj/structure/chair{dir = 8},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = 24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bg" = (/obj/machinery/button/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = -6},/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bh" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bi" = (/turf/open/floor/mineral/plastitanium/brig{dir = 4; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bj" = (/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/escape) +"bk" = (/obj/structure/chair{dir = 8},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bl" = (/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bm" = (/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"bn" = (/obj/machinery/door/airlock/glass_security{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"bo" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel,/area/shuttle/escape) +"bp" = (/obj/structure/chair{dir = 4},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bq" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"br" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bs" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape) +"bt" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/open/floor/plasteel,/area/shuttle/escape) +"bu" = (/obj/effect/turf_decal/delivery,/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/structure/closet,/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape) +"bv" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/open/floor/plating,/area/shuttle/escape) +"bw" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bx" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"by" = (/obj/structure/table,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/zipties,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bz" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{dir = 6; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bA" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo"},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"bB" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape) +"bC" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel,/area/shuttle/escape) +"bD" = (/obj/effect/turf_decal/delivery,/obj/structure/closet/crate,/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape) +"bE" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dwidth = 15; height = 20; name = "Cere emergency shuttle"; port_angle = 90; preferred_direction = 2; width = 42},/turf/open/floor/plating,/area/shuttle/escape) +"bF" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bG" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bH" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bI" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bJ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bK" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bL" = (/obj/structure/sign/nanotrasen{pixel_x = -32; pixel_y = 32},/turf/open/floor/plasteel,/area/shuttle/escape) +"bM" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHWEST)"; icon_state = "brown"; dir = 10},/area/shuttle/escape) +"bN" = (/turf/open/floor/plasteel/brown,/area/shuttle/escape) +"bO" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel/brown,/area/shuttle/escape) +"bP" = (/obj/effect/turf_decal/delivery,/obj/structure/closet,/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/shuttle/escape) +"bQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/shuttle/escape) +"bR" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"bS" = (/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; dir = 4},/area/shuttle/escape) +"bT" = (/turf/open/floor/plasteel/neutral/side,/area/shuttle/escape) +"bU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel,/area/shuttle/escape) +"bV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape) +"bW" = (/obj/structure/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bX" = (/obj/structure/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plating,/area/shuttle/escape) +"bZ" = (/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel,/area/shuttle/escape) +"ca" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape) +"cb" = (/obj/structure/sign/bluecross_2{pixel_x = 32; pixel_y = -32},/turf/open/floor/plasteel,/area/shuttle/escape) +"cc" = (/obj/machinery/light,/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"cd" = (/obj/machinery/light{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape) +"ce" = (/obj/machinery/door/airlock/glass_medical{name = "Emergency Shuttle Medbay"},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (WEST)"; icon_state = "neutralcorner"; dir = 8},/area/shuttle/escape) +"cg" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape) +"ch" = (/mob/living/simple_animal/bot/medbot{name = "Speedy* Recovery"},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/shuttle/escape) +"ci" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"ck" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cl" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cm" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/wrench,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape) +"cn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"co" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/shuttle/escape) +"cp" = (/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cq" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cr" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cs" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/open/floor/plasteel/white,/area/shuttle/escape) +"ct" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/shuttle/escape) +"cu" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape) +"cv" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape) +"cw" = (/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cx" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/shuttle/escape) +"cy" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cz" = (/obj/machinery/computer/arcade,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"cA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cB" = (/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cC" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/obj/machinery/iv_drip,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cD" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cE" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cF" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/surgicaldrill,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/retractor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/crowbar,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cH" = (/obj/machinery/computer/operating,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cI" = (/obj/structure/table/optable,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cJ" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/toxin,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape) +"cL" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cM" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cN" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/shuttle/escape) +"cO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"cP" = (/obj/machinery/door/airlock/glass_engineering{name = "Engine Room"; req_one_access_txt = "10;24"},/turf/open/floor/plasteel/yellow,/area/shuttle/escape) +"cQ" = (/obj/machinery/door/airlock{name = "Bathroom"},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cR" = (/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cS" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cT" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/shuttle/escape) +"cU" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"cV" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/monitor,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"cW" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape) +"cX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cY" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cZ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"da" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (WEST)"; icon_state = "yellowcorner"; dir = 8},/area/shuttle/escape) +"db" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (EAST)"; icon_state = "yellowcorner"; dir = 4},/area/shuttle/escape) +"dc" = (/obj/structure/table,/obj/item/weapon/storage/box/metalfoam,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"dd" = (/obj/structure/table,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"de" = (/obj/structure/table,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape) +"df" = (/obj/structure/urinal{pixel_y = -32},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"dg" = (/obj/machinery/light/small{dir = 4},/obj/machinery/recharge_station,/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"dh" = (/obj/structure/reagent_dispensers/watertank/high,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"di" = (/obj/structure/sign/electricshock{pixel_x = 32},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (EAST)"; icon_state = "yellow"; dir = 4},/area/shuttle/escape) +"dj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"dk" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dl" = (/obj/structure/table,/obj/structure/sign/enginesafety{pixel_y = -32},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dm" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dn" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"do" = (/obj/machinery/light,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dp" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHEAST)"; icon_state = "yellow"; dir = 6},/area/shuttle/escape) +"dq" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/plating,/area/shuttle/escape) +"dr" = (/turf/open/floor/plating,/area/shuttle/escape) +"ds" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/open/floor/plating,/area/shuttle/escape) +"dt" = (/obj/machinery/power/terminal{tag = "icon-term (EAST)"; icon_state = "term"; dir = 4},/turf/open/floor/plating,/area/shuttle/escape) +"du" = (/obj/machinery/power/smes/engineering,/turf/open/floor/plating,/area/shuttle/escape) +"dv" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/shuttle/escape) +"dw" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating,/area/shuttle/escape) +"dx" = (/obj/machinery/power/port_gen/pacman,/turf/open/floor/plating,/area/shuttle/escape) +"dy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/airless,/area/shuttle/escape) +"dz" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating/airless,/area/shuttle/escape) + +(1,1,1) = {" +aaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaa +aaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaa +aaaaababababacacacacacacacacababababaaaa +aaaaababadaeafagahaiajakalamanadababaaaa +aaaaababaoapaqarasatatauavawaxayababaaaa +aaabababazapapaAaBaCaCaDaEaxaxaFabababaa +aaabababaGaHaIaCaCaCaCaCaCaJaKaLabababaa +ababababaoaMaNaCaCaCaOaCaCaNaPaQabababab +abababababababababababaRaRababababababab +abaSaTaSabaUaVaWaXaYabaZbaabbbbcbbbcbbab +abbdbebfabbgbhbhbhbiacaZbaabbjbcbjbcbjab +abbdbebkacblblbmbibibnaZbaabbobcbobcboab +abbpbebebqblbrbrbrbibnaZbaabbsbtbtbtbuab +bvbebebkacbwbxbybxbzacaZbabAbBbcbCbcbDab +ababababababacacacabadaZbabAbBbcbCbcbDab +bEbcbcbabFbGbHbIbJbKaZbLbaabbMbNbObNbPab +abadbQbcbRbRbRbRbRbRbcbcbSadabababababab +aaacbcbcbTbTbTbTbTbcbcbTbTbTbTbTbUbVabaa +aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abbZbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +aaabcabcbRbRbRbRbRbccbbRccbRbRbRbccdabaa +aaabcabcbTbTbTbTbTbcbcadabceacabacababaa +abadcfbabWbXbTbWbXaZcgabchcicjckclcmadab +abcnaZbabWbXbTbWbXaZbccecocpcqcrcsctcuab +accnaZbabWbXbTbWbXaZbcabcvcwcwcxcpcpcyac +acczaZbabWbXbTbWbXaZbcabcAcBcCcocpcpcDac +acczaZbabWbXbTbWbXaZbcabcEcBcFcocpcpcGac +accnaZbabWbXbTbWbXaZbcabcHcIcJcKcLcMcNab +accnaZbcccbRbRbRcObccgababababababababab +ababacacabaccPacadcabccQcRcRcRcRcRcQcSab +abcTcUcUcVcUcUcWadabababcXcRcRcRcYababab +abcZdabcbcbcbcdbdcdddeabcXdfdfdfcRcQdgab +abaddhdabcbcbcbcbcbcdiababababababababab +aaabaddjdkdldmdndndodpdqdrdrdsdtduababaa +aaababababababababababaddvdwdxdtduababaa +aaaaabdydydydydydyadaddydydydydydyabaaaa +aaaaabdzdzdzdzdzdzadaddzdzdzdzdzdzabaaaa +"} diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm new file mode 100644 index 0000000000..065d4d4bfc --- /dev/null +++ b/_maps/shuttles/whiteship_cere.dmm @@ -0,0 +1,73 @@ +"aa" = (/turf/open/space/basic,/area/space) +"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned) +"ac" = (/obj/machinery/door/airlock/titanium{name = "mech bay external airlock"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/docking_port/mobile{dheight = 0; dir = 2; dwidth = 8; height = 16; id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; port_angle = -90; preferred_direction = 1; roundstart_move = "whiteship_away"; width = 16},/turf/open/floor/plating,/area/shuttle/abandoned) +"ad" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/open/floor/plating/airless,/area/shuttle/abandoned) +"ae" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"af" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ag" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ah" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"ai" = (/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/structure/frame/machine,/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aj" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/shuttle/abandoned) +"ak" = (/obj/structure/mecha_wreckage/ripley,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned) +"al" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"am" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"an" = (/obj/effect/spawner/lootdrop{loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5); lootdoubles = 0; name = "25% mech 75% wreckage ripley spawner"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned) +"ao" = (/obj/machinery/computer/mech_bay_power_console,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ap" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aq" = (/obj/machinery/door/airlock/titanium{name = "mech bay"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ar" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/abandoned) +"as" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"at" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"au" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"av" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aw" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ax" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/toolbox/emergency/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ay" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned) +"az" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteleft"; name = "Cargo Blast Door Toggle"; pixel_x = -24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aA" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aB" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aC" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aD" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/glass/fifty,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aE" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteright"; name = "Cargo Blast Door Toggle"; pixel_x = 24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aF" = (/obj/machinery/door/poddoor{id = "cerewhiteleft"},/turf/open/floor/plating,/area/shuttle/abandoned) +"aG" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"aH" = (/obj/machinery/door/poddoor{id = "cerewhiteright"},/turf/open/floor/plating,/area/shuttle/abandoned) +"aI" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/weapon/storage/toolbox/mechanical/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/item/clothing/glasses/welding,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aJ" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"aL" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aM" = (/obj/structure/ore_box,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aN" = (/obj/machinery/door/airlock/titanium{name = "cockpit"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aP" = (/obj/structure/table,/obj/item/device/gps{gpstag = "NTCONST1"; pixel_x = -1; pixel_y = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aR" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aS" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aT" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/item/weapon/storage/firstaid/regular,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aU" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aV" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aW" = (/obj/structure/chair/comfy/black,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aX" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aY" = (/turf/open/space,/area/space) +"aZ" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"ba" = (/obj/machinery/computer/shuttle/white_ship,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"bb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 6},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) + +(1,1,1) = {" +aaaaababababacababababaaaa +aaadabaeafagahagafaiabadaa +aaajabakagalamagaganabajaa +aaababaoagalamagagapababaa +adababababaqaraqababababad +ajababasatauahavawaxababaj +ayayazaAaAaBahauaCaDaEayay +aFahaGamamamamaGamamamaGaH +aFahaGahaGaGaGaGamamaGahaH +ayayaIaAaJaKaGaGaLavauayay +aaabaMababaNaraNababaOabaa +aaabababaPaQaRaSaTabababaa +aaabababaUaRaQaSaUabababaa +aaaaabaVaSaQaWaRaRaXabaaaa +aYaaabababaZbabbabababaaaa +aYaYaaaaabarararabaaaaaaaa +"} diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index d3427ac983..94226dc8ec 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -161,6 +161,12 @@ description = "A small, but feature complete shuttle. It boasts a card table to keep crew members occupied on the long flight home." credit_cost = 1000 +/datum/map_template/shuttle/emergency/cere + suffix = "cere" + name = "Cere Station Emergency Shuttle" + description = "The large, beefed-up version of the box-standard shuttle. Includes an expanded brig, fully stocked medbay, enhanced cargo storage with mech chargers, \ + an engine room stocked with various supplies, and a crew capacity of 80+ to top it all off. Live large, live Cere." + /datum/map_template/shuttle/emergency/supermatter suffix = "supermatter" name = "Hyperfractal Gigashuttle" @@ -230,6 +236,10 @@ suffix = "pubby" name = "NT White UFO" +/datum/map_template/shuttle/whiteship/cere + suffix = "cere" + name = "NT Construction Vessel" + /datum/map_template/shuttle/cargo/box suffix = "box" name = "supply shuttle (Box)" diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 6f5afd5767..cba7ded631 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -1,295 +1,295 @@ -/obj/item/weapon/antag_spawner - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - var/used = 0 - -/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "") - return - -/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target) - return - - -///////////WIZARD - -/obj/item/weapon/antag_spawner/contract - name = "contract" - desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - -/obj/item/weapon/antag_spawner/contract/attack_self(mob/user) - user.set_machine(src) - var/dat - if(used) - dat = "You have already summoned your apprentice.
" - else - dat = "Contract of Apprenticeship:
" - dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" - dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" - dat += "Which school of magic is your apprentice studying?:
" - dat += "Destruction
" - dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" - dat += "Bluespace Manipulation
" - dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" - dat += "Healing
" - dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" - dat += "Robeless
" - dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/weapon/antag_spawner/contract/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!ishuman(H)) - return 1 - - if(loc == H || (in_range(src, H) && isturf(loc))) - H.set_machine(src) - if(href_list["school"]) - if(used) - to_chat(H, "You already used this contract!") - return - var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) - if(candidates.len) - if(used) - to_chat(H, "You already used this contract!") - return - used = 1 - var/mob/dead/observer/theghost = pick(candidates) - spawn_antag(theghost.client, get_turf(src), href_list["school"]) - if(H && H.mind) - SSticker.mode.update_wiz_icons_added(H.mind) - else - to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") - -/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "") - new /obj/effect/particle_effect/smoke(T) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - var/wizard_name = "the wizard" - if(usr) - wizard_name = usr.real_name - to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") - switch(type) - if("destruction") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.") - if("bluespace") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.") - if("healing") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") - if("robeless") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") - - equip_antag(M) - var/wizard_name_first = pick(GLOB.wizard_first) - var/wizard_name_second = pick(GLOB.wizard_second) - var/randomname = "[wizard_name_first] [wizard_name_second]" - if(usr) - var/datum/objective/protect/new_objective = new /datum/objective/protect - new_objective.owner = M.mind - new_objective.target = usr.mind - new_objective.explanation_text = "Protect [usr.real_name], the wizard." - M.mind.objectives += new_objective - SSticker.mode.apprentices += M.mind - M.mind.special_role = "apprentice" - SSticker.mode.update_wiz_icons_added(M.mind) - M << sound('sound/effects/magic.ogg') - var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) - if (!newname) - newname = randomname - M.mind.name = newname - M.real_name = newname - M.name = newname - M.dna.update_dna_identity() - -/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target) - target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears) - target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform) - target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes) - target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit) - target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head) - target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back) - target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack) - target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) -///////////BORGS AND OPERATIVES - - -/obj/item/weapon/antag_spawner/nuke_ops - name = "syndicate operative teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/borg_to_spawn - -/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user) - if(used) - to_chat(user, "[src] is out of power!") - return 0 - if(!(user.mind in SSticker.mode.syndicates)) - to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") - return 0 - if(user.z != ZLEVEL_CENTCOM) - to_chat(user, "[src] is out of range! It can only be used at your base!") - return 0 - return 1 - - -/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user) - if(!(check_usability(user))) - return - - to_chat(user, "You activate [src] and wait for confirmation.") - var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src) - if(nuke_candidates.len) - if(!(check_usability(user))) - return - used = 1 - var/mob/dead/observer/theghost = pick(nuke_candidates) - spawn_antag(theghost.client, get_turf(src), "syndieborg") - do_sparks(4, TRUE, src) - qdel(src) - else - to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") - -/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - var/code = "BOMB-NOT-FOUND" - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list - if(nuke) - code = nuke.r_code - M.mind.make_Nuke(null, code, 0, FALSE) - var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname) - M.mind.name = newname - M.real_name = newname - M.name = newname - -//////SYNDICATE BORG -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele - name = "syndicate cyborg teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault - name = "syndicate assault cyborg teleporter" - borg_to_spawn = "Assault" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical - name = "syndicate medical teleporter" - borg_to_spawn = "Medical" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T) - var/mob/living/silicon/robot/R - switch(borg_to_spawn) - if("Medical") - R = new /mob/living/silicon/robot/syndicate/medical(T) - else - R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default - - var/brainfirstname = pick(GLOB.first_names_male) - if(prob(50)) - brainfirstname = pick(GLOB.first_names_female) - var/brainopslastname = pick(GLOB.last_names) - if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = SSticker.mode.nukeops_lastname - var/brainopsname = "[brainfirstname] [brainopslastname]" - - R.mmi.name = "Man-Machine Interface: [brainopsname]" - R.mmi.brain.name = "[brainopsname]'s brain" - R.mmi.brainmob.real_name = brainopsname - R.mmi.brainmob.name = brainopsname - - R.key = C.key - R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE) - -///////////SLAUGHTER DEMON - -/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game - name = "vial of blood" - desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - - var/shatter_msg = "You shatter the bottle, no turning back now!" - var/veil_msg = "You sense a dark presence lurking just beyond the veil..." - var/objective_verb = "Kill" - var/mob/living/demon_type = /mob/living/simple_animal/slaughter - - -/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user) - if(user.z != 1) - to_chat(user, "You should probably wait until you reach the station.") - return - if(used) - return - var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) - if(demon_candidates.len) - if(used) - return - used = 1 - var/mob/dead/observer/theghost = pick(demon_candidates) - spawn_antag(theghost.client, get_turf(src), initial(demon_type.name)) - to_chat(user, shatter_msg) - to_chat(user, veil_msg) - playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) - qdel(src) - else - to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") - - -/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "") - - var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) - var/mob/living/simple_animal/slaughter/S = new demon_type(holder) - S.holder = holder - S.key = C.key - S.mind.assigned_role = S.name - S.mind.special_role = S.name - SSticker.mode.traitors += S.mind - var/datum/objective/assassinate/new_objective - if(usr) - new_objective = new /datum/objective/assassinate - new_objective.owner = S.mind - new_objective.target = usr.mind - new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you." - S.mind.objectives += new_objective - var/datum/objective/new_objective2 = new /datum/objective - new_objective2.owner = S.mind - new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]." - S.mind.objectives += new_objective2 - to_chat(S, S.playstyle_string) - to_chat(S, "You are currently not currently in the same plane of existence as the station. \ - Ctrl+Click a blood pool to manifest.") - if(new_objective) - to_chat(S, "Objective #[1]: [new_objective.explanation_text]") - to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") - -/obj/item/weapon/antag_spawner/slaughter_demon/laughter - name = "vial of tickles" - desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - color = "#FF69B4" // HOT PINK - - veil_msg = "You sense an adorable presence lurking just beyond the veil..." - objective_verb = "Hug and Tickle" - demon_type = /mob/living/simple_animal/slaughter/laughter +/obj/item/weapon/antag_spawner + throw_speed = 1 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + var/used = 0 + +/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "") + return + +/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target) + return + + +///////////WIZARD + +/obj/item/weapon/antag_spawner/contract + name = "contract" + desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." + icon = 'icons/obj/wizard.dmi' + icon_state ="scroll2" + +/obj/item/weapon/antag_spawner/contract/attack_self(mob/user) + user.set_machine(src) + var/dat + if(used) + dat = "You have already summoned your apprentice.
" + else + dat = "Contract of Apprenticeship:
" + dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" + dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" + dat += "Which school of magic is your apprentice studying?:
" + dat += "Destruction
" + dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" + dat += "Bluespace Manipulation
" + dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" + dat += "Healing
" + dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" + dat += "Robeless
" + dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" + user << browse(dat, "window=radio") + onclose(user, "radio") + return + +/obj/item/weapon/antag_spawner/contract/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!ishuman(H)) + return 1 + + if(loc == H || (in_range(src, H) && isturf(loc))) + H.set_machine(src) + if(href_list["school"]) + if(used) + to_chat(H, "You already used this contract!") + return + var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) + if(candidates.len) + if(used) + to_chat(H, "You already used this contract!") + return + used = 1 + var/mob/dead/observer/theghost = pick(candidates) + spawn_antag(theghost.client, get_turf(src), href_list["school"]) + if(H && H.mind) + SSticker.mode.update_wiz_icons_added(H.mind) + else + to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") + +/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "") + new /obj/effect/particle_effect/smoke(T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + var/wizard_name = "the wizard" + if(usr) + wizard_name = usr.real_name + to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") + switch(type) + if("destruction") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.") + if("bluespace") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.") + if("healing") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) + M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") + if("robeless") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") + + equip_antag(M) + var/wizard_name_first = pick(GLOB.wizard_first) + var/wizard_name_second = pick(GLOB.wizard_second) + var/randomname = "[wizard_name_first] [wizard_name_second]" + if(usr) + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M.mind + new_objective.target = usr.mind + new_objective.explanation_text = "Protect [usr.real_name], the wizard." + M.mind.objectives += new_objective + SSticker.mode.apprentices += M.mind + M.mind.special_role = "apprentice" + SSticker.mode.update_wiz_icons_added(M.mind) + M << sound('sound/effects/magic.ogg') + var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) + if (!newname) + newname = randomname + M.mind.name = newname + M.real_name = newname + M.name = newname + M.dna.update_dna_identity() + +/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target) + target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears) + target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform) + target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes) + target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit) + target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack) + target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) +///////////BORGS AND OPERATIVES + + +/obj/item/weapon/antag_spawner/nuke_ops + name = "syndicate operative teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + var/borg_to_spawn + +/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user) + if(used) + to_chat(user, "[src] is out of power!") + return 0 + if(!(user.mind in SSticker.mode.syndicates)) + to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") + return 0 + if(user.z != ZLEVEL_CENTCOM) + to_chat(user, "[src] is out of range! It can only be used at your base!") + return 0 + return 1 + + +/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user) + if(!(check_usability(user))) + return + + to_chat(user, "You activate [src] and wait for confirmation.") + var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src) + if(nuke_candidates.len) + if(!(check_usability(user))) + return + used = 1 + var/mob/dead/observer/theghost = pick(nuke_candidates) + spawn_antag(theghost.client, get_turf(src), "syndieborg") + do_sparks(4, TRUE, src) + qdel(src) + else + to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") + +/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + var/code = "BOMB-NOT-FOUND" + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list + if(nuke) + code = nuke.r_code + M.mind.make_Nuke(null, code, 0, FALSE) + var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname) + M.mind.name = newname + M.real_name = newname + M.name = newname + +//////SYNDICATE BORG +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele + name = "syndicate cyborg teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault + name = "syndicate assault cyborg teleporter" + borg_to_spawn = "Assault" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical + name = "syndicate medical teleporter" + borg_to_spawn = "Medical" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T) + var/mob/living/silicon/robot/R + switch(borg_to_spawn) + if("Medical") + R = new /mob/living/silicon/robot/syndicate/medical(T) + else + R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default + + var/brainfirstname = pick(GLOB.first_names_male) + if(prob(50)) + brainfirstname = pick(GLOB.first_names_female) + var/brainopslastname = pick(GLOB.last_names) + if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. + brainopslastname = SSticker.mode.nukeops_lastname + var/brainopsname = "[brainfirstname] [brainopslastname]" + + R.mmi.name = "Man-Machine Interface: [brainopsname]" + R.mmi.brain.name = "[brainopsname]'s brain" + R.mmi.brainmob.real_name = brainopsname + R.mmi.brainmob.name = brainopsname + + R.key = C.key + R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE) + +///////////SLAUGHTER DEMON + +/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game + name = "vial of blood" + desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + + var/shatter_msg = "You shatter the bottle, no turning back now!" + var/veil_msg = "You sense a dark presence lurking just beyond the veil..." + var/objective_verb = "Kill" + var/mob/living/demon_type = /mob/living/simple_animal/slaughter + + +/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user) + if(user.z != 1) + to_chat(user, "You should probably wait until you reach the station.") + return + if(used) + return + var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) + if(demon_candidates.len) + if(used) + return + used = 1 + var/mob/dead/observer/theghost = pick(demon_candidates) + spawn_antag(theghost.client, get_turf(src), initial(demon_type.name)) + to_chat(user, shatter_msg) + to_chat(user, veil_msg) + playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) + qdel(src) + else + to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") + + +/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "") + + var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) + var/mob/living/simple_animal/slaughter/S = new demon_type(holder) + S.holder = holder + S.key = C.key + S.mind.assigned_role = S.name + S.mind.special_role = S.name + SSticker.mode.traitors += S.mind + var/datum/objective/assassinate/new_objective + if(usr) + new_objective = new /datum/objective/assassinate + new_objective.owner = S.mind + new_objective.target = usr.mind + new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you." + S.mind.objectives += new_objective + var/datum/objective/new_objective2 = new /datum/objective + new_objective2.owner = S.mind + new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]." + S.mind.objectives += new_objective2 + to_chat(S, S.playstyle_string) + to_chat(S, "You are currently not currently in the same plane of existence as the station. \ + Ctrl+Click a blood pool to manifest.") + if(new_objective) + to_chat(S, "Objective #[1]: [new_objective.explanation_text]") + to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") + +/obj/item/weapon/antag_spawner/slaughter_demon/laughter + name = "vial of tickles" + desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + color = "#FF69B4" // HOT PINK + + veil_msg = "You sense an adorable presence lurking just beyond the veil..." + objective_verb = "Hug and Tickle" + demon_type = /mob/living/simple_animal/slaughter/laughter diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 167b95b634..18d60559bd 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -25,6 +25,12 @@ assemblytype = /obj/structure/door_assembly/door_assembly_mai normal_integrity = 250 +/obj/machinery/door/airlock/maintenance/external + name = "external airlock access" + icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_mai + normal_integrity = 250 + /obj/machinery/door/airlock/mining name = "mining airlock" icon = 'icons/obj/doors/airlocks/station/mining.dmi' diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 0c08945fc6..29ea86daa9 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -30,23 +30,23 @@ icon_state = "white" plane = LIGHTING_PLANE layer = LIGHTING_LAYER - blend_mode = BLEND_ADD - -/obj/effect/abstract/marker - name = "marker" - icon = 'icons/effects/effects.dmi' - anchored = TRUE - icon_state = "wave3" - layer = RIPPLE_LAYER - -/obj/effect/abstract/marker/Initialize(mapload) - . = ..() - GLOB.all_abstract_markers += src - -/obj/effect/abstract/marker/Destroy() - GLOB.all_abstract_markers -= src - . = ..() - -/obj/effect/abstract/marker/at - name = "active turf marker" - + blend_mode = BLEND_ADD + +/obj/effect/abstract/marker + name = "marker" + icon = 'icons/effects/effects.dmi' + anchored = TRUE + icon_state = "wave3" + layer = RIPPLE_LAYER + +/obj/effect/abstract/marker/Initialize(mapload) + . = ..() + GLOB.all_abstract_markers += src + +/obj/effect/abstract/marker/Destroy() + GLOB.all_abstract_markers -= src + . = ..() + +/obj/effect/abstract/marker/at + name = "active turf marker" + diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 65489a89c9..8ced8d882b 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,212 +1,212 @@ -GLOBAL_LIST_EMPTY(GPS_list) -/obj/item/device/gps - name = "global positioning system" - desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power." - icon = 'icons/obj/telescience.dmi' - icon_state = "gps-c" - w_class = WEIGHT_CLASS_SMALL - slot_flags = SLOT_BELT - origin_tech = "materials=2;magnets=1;bluespace=2" - unique_rename = TRUE - var/gpstag = "COM0" - var/emped = FALSE - var/turf/locked_location - var/tracking = TRUE - var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user. - var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown - - -/obj/item/device/gps/Initialize() - ..() - GLOB.GPS_list += src - name = "global positioning system ([gpstag])" - add_overlay("working") - -/obj/item/device/gps/Destroy() - GLOB.GPS_list -= src - return ..() - -/obj/item/device/gps/emp_act(severity) - emped = TRUE - cut_overlay("working") - add_overlay("emp") - addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early - SStgui.close_uis(src) //Close the UI control if it is open. - -/obj/item/device/gps/proc/reboot() - emped = FALSE - cut_overlay("emp") - add_overlay("working") - -/obj/item/device/gps/AltClick(mob/user) - toggletracking(user) - -/obj/item/device/gps/proc/toggletracking(mob/user) - if(!user.canUseTopic(src, be_close=TRUE)) - return //user not valid to use gps - if(emped) - to_chat(user, "It's busted!") - return - if(tracking) - cut_overlay("working") - to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") - tracking = FALSE - else - add_overlay("working") - to_chat(user, "[src] is now tracking, and visible to other GPS devices.") - tracking = TRUE - - -/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. - if(emped) - to_chat(user, "[src] fizzles weakly.") - return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - var/gps_window_height = 300 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show - ui = new(user, src, ui_key, "gps", "Global Positioning System", 600, gps_window_height, master_ui, state) //width, height - ui.open() - - ui.set_autoupdate(state = updating) - - -/obj/item/device/gps/ui_data(mob/user) - var/list/data = list() - data["power"] = tracking - data["tag"] = gpstag - data["updating"] = updating - data["globalmode"] = global_mode - if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed - return data - - var/turf/curr = get_turf(src) - data["current"] = "[get_area_name(curr)] ([curr.x], [curr.y], [curr.z])" - - var/list/signals = list() - data["signals"] = list() - - for(var/gps in GLOB.GPS_list) - var/obj/item/device/gps/G = gps - if(G.emped || !G.tracking || G == src) - continue - var/turf/pos = get_turf(G) - if(!global_mode && pos.z != curr.z) - continue - var/area/gps_area = get_area_name(G) - var/list/signal = list() - signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS - signal["area"] = format_text(gps_area) - signal["coord"] = "[pos.x], [pos.y], [pos.z]" - if(pos.z == curr.z) //Distance/Direction calculations for same z-level only - signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs - signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision. - var/direction = uppertext(dir2text(get_dir(curr, pos))) //Direction text (East, etc). Not as precise, but still helpful. - if(!direction) - direction = "CENTER" - signal["degrees"] = "N/A" - signal["direction"] = direction - - signals += list(signal) //Add this signal to the list of signals - data["signals"] = signals - return data - - - -/obj/item/device/gps/ui_act(action, params) - if(..()) - return - switch(action) - if("rename") - var/a = input("Please enter desired tag.", name, gpstag) as text - a = uppertext(copytext(sanitize(a), 1, 5)) - gpstag = a - name = "global positioning system ([gpstag])" - . = TRUE - if("power") - toggletracking(usr) - . = TRUE - if("updating") - updating = !updating - . = TRUE - if("globalmode") - global_mode = !global_mode - . = TRUE - -/obj/item/device/gps/Topic(href, href_list) - ..() - if(href_list["tag"] ) - var/a = input("Please enter desired tag.", name, gpstag) as text - a = copytext(sanitize(a), 1, 20) - if(in_range(src, usr)) - gpstag = a - attack_self(usr) - -/obj/item/device/gps/science - icon_state = "gps-s" - gpstag = "SCI0" - -/obj/item/device/gps/engineering - icon_state = "gps-e" - gpstag = "ENG0" - -/obj/item/device/gps/mining - icon_state = "gps-m" - gpstag = "MINE0" - desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." - -/obj/item/device/gps/cyborg - icon_state = "gps-b" - gpstag = "BORG0" - desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." - flags = NODROP - -/obj/item/device/gps/internal - icon_state = null - flags = ABSTRACT - gpstag = "Eerie Signal" - desc = "Report to a coder immediately." - invisibility = INVISIBILITY_MAXIMUM - -/obj/item/device/gps/mining/internal - icon_state = "gps-m" - gpstag = "MINER" - desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." - -/obj/item/device/gps/internal/base - gpstag = "NT_AUX" - desc = "A homing signal from Nanotrasen's mining base." - -/obj/item/device/gps/visible_debug - name = "visible GPS" - gpstag = "ADMIN" - desc = "This admin-spawn GPS unit leaves the coordinates visible \ - on any turf that it passes over, for debugging. Especially useful \ - for marking the area around the transition edges." - var/list/turf/tagged - -/obj/item/device/gps/visible_debug/Initialize() - . = ..() - tagged = list() - START_PROCESSING(SSfastprocess, src) - -/obj/item/device/gps/visible_debug/process() - var/turf/T = get_turf(src) - if(T) - // I assume it's faster to color,tag and OR the turf in, rather - // then checking if its there - T.color = RANDOM_COLOUR - T.maptext = "[T.x],[T.y],[T.z]" - tagged |= T - -/obj/item/device/gps/visible_debug/proc/clear() - while(tagged.len) - var/turf/T = pop(tagged) - T.color = initial(T.color) - T.maptext = initial(T.maptext) - -/obj/item/device/gps/visible_debug/Destroy() - if(tagged) - clear() - tagged = null - STOP_PROCESSING(SSfastprocess, src) +GLOBAL_LIST_EMPTY(GPS_list) +/obj/item/device/gps + name = "global positioning system" + desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power." + icon = 'icons/obj/telescience.dmi' + icon_state = "gps-c" + w_class = WEIGHT_CLASS_SMALL + slot_flags = SLOT_BELT + origin_tech = "materials=2;magnets=1;bluespace=2" + unique_rename = TRUE + var/gpstag = "COM0" + var/emped = FALSE + var/turf/locked_location + var/tracking = TRUE + var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user. + var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown + + +/obj/item/device/gps/Initialize() + ..() + GLOB.GPS_list += src + name = "global positioning system ([gpstag])" + add_overlay("working") + +/obj/item/device/gps/Destroy() + GLOB.GPS_list -= src + return ..() + +/obj/item/device/gps/emp_act(severity) + emped = TRUE + cut_overlay("working") + add_overlay("emp") + addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early + SStgui.close_uis(src) //Close the UI control if it is open. + +/obj/item/device/gps/proc/reboot() + emped = FALSE + cut_overlay("emp") + add_overlay("working") + +/obj/item/device/gps/AltClick(mob/user) + toggletracking(user) + +/obj/item/device/gps/proc/toggletracking(mob/user) + if(!user.canUseTopic(src, be_close=TRUE)) + return //user not valid to use gps + if(emped) + to_chat(user, "It's busted!") + return + if(tracking) + cut_overlay("working") + to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") + tracking = FALSE + else + add_overlay("working") + to_chat(user, "[src] is now tracking, and visible to other GPS devices.") + tracking = TRUE + + +/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. + if(emped) + to_chat(user, "[src] fizzles weakly.") + return + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + var/gps_window_height = 300 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show + ui = new(user, src, ui_key, "gps", "Global Positioning System", 600, gps_window_height, master_ui, state) //width, height + ui.open() + + ui.set_autoupdate(state = updating) + + +/obj/item/device/gps/ui_data(mob/user) + var/list/data = list() + data["power"] = tracking + data["tag"] = gpstag + data["updating"] = updating + data["globalmode"] = global_mode + if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed + return data + + var/turf/curr = get_turf(src) + data["current"] = "[get_area_name(curr)] ([curr.x], [curr.y], [curr.z])" + + var/list/signals = list() + data["signals"] = list() + + for(var/gps in GLOB.GPS_list) + var/obj/item/device/gps/G = gps + if(G.emped || !G.tracking || G == src) + continue + var/turf/pos = get_turf(G) + if(!global_mode && pos.z != curr.z) + continue + var/area/gps_area = get_area_name(G) + var/list/signal = list() + signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS + signal["area"] = format_text(gps_area) + signal["coord"] = "[pos.x], [pos.y], [pos.z]" + if(pos.z == curr.z) //Distance/Direction calculations for same z-level only + signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs + signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision. + var/direction = uppertext(dir2text(get_dir(curr, pos))) //Direction text (East, etc). Not as precise, but still helpful. + if(!direction) + direction = "CENTER" + signal["degrees"] = "N/A" + signal["direction"] = direction + + signals += list(signal) //Add this signal to the list of signals + data["signals"] = signals + return data + + + +/obj/item/device/gps/ui_act(action, params) + if(..()) + return + switch(action) + if("rename") + var/a = input("Please enter desired tag.", name, gpstag) as text + a = uppertext(copytext(sanitize(a), 1, 5)) + gpstag = a + name = "global positioning system ([gpstag])" + . = TRUE + if("power") + toggletracking(usr) + . = TRUE + if("updating") + updating = !updating + . = TRUE + if("globalmode") + global_mode = !global_mode + . = TRUE + +/obj/item/device/gps/Topic(href, href_list) + ..() + if(href_list["tag"] ) + var/a = input("Please enter desired tag.", name, gpstag) as text + a = copytext(sanitize(a), 1, 20) + if(in_range(src, usr)) + gpstag = a + attack_self(usr) + +/obj/item/device/gps/science + icon_state = "gps-s" + gpstag = "SCI0" + +/obj/item/device/gps/engineering + icon_state = "gps-e" + gpstag = "ENG0" + +/obj/item/device/gps/mining + icon_state = "gps-m" + gpstag = "MINE0" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." + +/obj/item/device/gps/cyborg + icon_state = "gps-b" + gpstag = "BORG0" + desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." + flags = NODROP + +/obj/item/device/gps/internal + icon_state = null + flags = ABSTRACT + gpstag = "Eerie Signal" + desc = "Report to a coder immediately." + invisibility = INVISIBILITY_MAXIMUM + +/obj/item/device/gps/mining/internal + icon_state = "gps-m" + gpstag = "MINER" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." + +/obj/item/device/gps/internal/base + gpstag = "NT_AUX" + desc = "A homing signal from Nanotrasen's mining base." + +/obj/item/device/gps/visible_debug + name = "visible GPS" + gpstag = "ADMIN" + desc = "This admin-spawn GPS unit leaves the coordinates visible \ + on any turf that it passes over, for debugging. Especially useful \ + for marking the area around the transition edges." + var/list/turf/tagged + +/obj/item/device/gps/visible_debug/Initialize() + . = ..() + tagged = list() + START_PROCESSING(SSfastprocess, src) + +/obj/item/device/gps/visible_debug/process() + var/turf/T = get_turf(src) + if(T) + // I assume it's faster to color,tag and OR the turf in, rather + // then checking if its there + T.color = RANDOM_COLOUR + T.maptext = "[T.x],[T.y],[T.z]" + tagged |= T + +/obj/item/device/gps/visible_debug/proc/clear() + while(tagged.len) + var/turf/T = pop(tagged) + T.color = initial(T.color) + T.maptext = initial(T.maptext) + +/obj/item/device/gps/visible_debug/Destroy() + if(tagged) + clear() + tagged = null + STOP_PROCESSING(SSfastprocess, src) . = ..() \ No newline at end of file diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 6c8edec9f8..3990533562 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,10 +12,10 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user - if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) - to_chat(user, "You are not capable of wearing underwear.") - return - + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(user, "You are not capable of wearing underwear.") + return + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") if(!Adjacent(user)) @@ -36,4 +36,4 @@ H.socks= new_socks add_fingerprint(H) - H.update_body() + H.update_body() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 53e0bc97a7..aa46a42ab4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,822 +1,822 @@ - -//////////////////////////////// -/proc/message_admins(msg) - msg = "ADMIN LOG: [msg]" - to_chat(GLOB.admins, msg) - -/proc/relay_msg_admins(msg) - msg = "RELAY: [msg]" - to_chat(GLOB.admins, msg) - - -///////////////////////////////////////////////////////////////////////////////////////////////Panels - -/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list) - set category = "Admin" - set name = "Show Player Panel" - set desc="Edit player (respawn, ban, heal, etc)" - - if(!check_rights()) - return - - if(!isobserver(usr)) - log_game("[key_name_admin(usr)] checked the player panel while in game.") - - if(!M) - to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.") - return - - var/body = "Options for [M.key]" - body += "Options panel for [M]" - if(M.client) - body += " played by [M.client] " - body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" - - if(isnewplayer(M)) - body += " Hasn't Entered Game " - else - body += " \[Heal\] " - - if(M.client) - body += "
\[Player Age: [M.client.player_age]\]\[Byond Age: [M.client.account_age]\]" - body += "
Show related accounts by: " - body += "\[ CID | " - body += "IP \]" - - body += "

\[ " - body += "VV - " - body += "TP - " - body += "PM - " - body += "SM - " - body += "FLW - " - body += "LOGS\]
" - - body += "Mob type = [M.type]

" - - body += "Kick | " - body += "Ban | " - body += "Jobban | " - body += "Identity Ban | " - if(jobban_isbanned(M, "OOC")) - body+= "OOCBan | " - else - body+= "OOCBan | " - if(jobban_isbanned(M, "emote")) - body+= "EmoteBan | " - else - body+= "Emoteban | " - - body += "Notes | Messages | Watchlist | " - if(M.client) - body += "| Prison | " - body += "\ Send back to Lobby | " - var/muted = M.client.prefs.muted - body += "
Mute: " - body += "\[IC | " - body += "OOC | " - body += "PRAY | " - body += "ADMINHELP | " - body += "DEADCHAT\]" - body += "(toggle all)" - - body += "

" - body += "Jump to | " - body += "Get | " - body += "Send To" - - body += "

" - body += "Traitor panel | " - body += "Narrate to | " - body += "Subtle message | " - body += "Language Menu" - - if (M.client) - if(!isnewplayer(M)) - body += "

" - body += "Transformation:" - body += "
" - - //Human - if(ishuman(M)) - body += "Human | " - else - body += "Humanize | " - - //Monkey - if(ismonkey(M)) - body += "Monkeyized | " - else - body += "Monkeyize | " - - //Corgi - if(iscorgi(M)) - body += "Corgized | " - else - body += "Corgize | " - - //AI / Cyborg - if(isAI(M)) - body += "Is an AI " - else if(ishuman(M)) - body += "Make AI | " - body += "Make Robot | " - body += "Make Alien | " - body += "Make Slime | " - body += "Make Blob | " - - //Simple Animals - if(isanimal(M)) - body += "Re-Animalize | " - else - body += "Animalize | " - - body += "

" - body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

" - body += "Observer | " - body += "\[ Alien: Drone, " - body += "Hunter, " - body += "Sentinel, " - body += "Praetorian, " - body += "Queen, " - body += "Larva \] " - body += "Human " - body += "\[ slime: Baby, " - body += "Adult \] " - body += "Monkey | " - body += "Cyborg | " - body += "Cat | " - body += "Runtime | " - body += "Corgi | " - body += "Ian | " - body += "Crab | " - body += "Coffee | " - //body += "Parrot | " - //body += "Poly | " - body += "\[ Construct: Juggernaut , " - body += "Artificer , " - body += "Wraith \] " - body += "Shade" - body += "
" - - if (M.client) - body += "

" - body += "Other actions:" - body += "
" - body += "Forcesay | " - body += "Thunderdome 1 | " - body += "Thunderdome 2 | " - body += "Thunderdome Admin | " - body += "Thunderdome Observer | " - - body += "
" - body += "" - - usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515") - SSblackbox.add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/datum/admins/proc/access_news_network() //MARKER - set category = "Fun" - set name = "Access Newscaster Network" - set desc = "Allows you to view, add and edit news feeds." - - if (!istype(src,/datum/admins)) - src = usr.client.holder - if (!istype(src,/datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - var/dat - dat = text("Admin Newscaster

Admin Newscaster Unit

") - - switch(admincaster_screen) - if(0) - dat += "Welcome to the admin newscaster.
Here you can add, edit and censor every newspiece on the network." - dat += "
Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units." - dat += "
Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!" - if(GLOB.news_network.wanted_issue.active) - dat+= "
Read Wanted Issue" - dat+= "

Create Feed Channel" - dat+= "
View Feed Channels" - dat+= "
Submit new Feed story" - dat+= "

Exit" - var/wanted_already = 0 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - dat+="
Feed Security functions:
" - dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" - dat+="
Censor Feed Stories" - dat+="
Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)." - dat+="

The newscaster recognises you as:
[src.admin_signature]
" - if(1) - dat+= "Station Feed Channels
" - if( isemptylist(GLOB.news_network.network_channels) ) - dat+="No active channels found..." - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
" - else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - dat+="

Refresh" - dat+="
Back" - if(2) - dat+="Creating new Feed Channel..." - dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
" - dat+="Channel Author: [src.admin_signature]
" - dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

" - dat+="
Submit

Cancel
" - if(3) - dat+="Creating new Feed Message..." - dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK - dat+="Message Author: [src.admin_signature]
" - dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
" - dat+="
Submit

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

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

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

" - if(src.admincaster_feed_channel.channel_name=="") - dat+="•Invalid receiving channel name.
" - if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]") - dat+="•Invalid message body.
" - dat+="
Return
" - if(7) - dat+="ERROR: Could not submit Feed Channel to Network.

" - if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
" - var/check = 0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.channel_name == src.admincaster_feed_channel.channel_name) - check = 1 - break - if(check) - dat+="•Channel name already in use.
" - dat+="
Return
" - if(9) - dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
" - if(src.admincaster_feed_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.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
" - else - var/i = 0 - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - i++ - dat+="-[MESSAGE.returnBody(-1)]
" - if(MESSAGE.img) - usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="

" - dat+="\[Story by [MESSAGE.returnAuthor(-1)]\]
" - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]:
" - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body]
[comment.author] [comment.time_stamp]
" - dat+="
" - dat+="

Refresh" - dat+="
Back" - if(10) - dat+="Nanotrasen Feed Censorship Tool
" - dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
" - dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
" - dat+="
Select Feed channel to get Stories from:
" - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
" - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - dat+="
Cancel" - if(11) - dat+="Nanotrasen D-Notice Handler
" - dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" - dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" - dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
" - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
" - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - - dat+="
Back" - if(12) - dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
" - dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
" - - if( isemptylist(src.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
" - else - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" - dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
" - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
" - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body] X
[comment.author] [comment.time_stamp]
" - dat+="
Back" - if(13) - dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
" - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" - if(src.admincaster_feed_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.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
" - else - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" - dat+="
Back" - if(14) - dat+="Wanted Issue Handler:" - var/wanted_already = 0 - var/end_param = 1 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - end_param = 2 - if(wanted_already) - dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below.
" - dat+="
" - dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
" - dat+="Description: [src.admincaster_wanted_message.body]
" - if(wanted_already) - dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
" - else - dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
" - dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" - if(wanted_already) - dat+="
Take down Issue" - dat+="
Cancel" - if(15) - dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.

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

" - if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
" - if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") - dat+="•Invalid description.
" - dat+="
Return
" - if(17) - dat+="Wanted Issue successfully deleted from Circulation
" - dat+="
Return
" - if(18) - dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
" - dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
" - dat+="Description: [GLOB.news_network.wanted_issue.body]
" - dat+="Photo:: " - if(GLOB.news_network.wanted_issue.img) - usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") - dat+="
" - else - dat+="None" - dat+="
Back
" - if(19) - dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.

" - dat+="
Return
" - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - - //to_chat(world, "Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]") - //to_chat(world, "Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]") - usr << browse(dat, "window=admincaster_main;size=400x600") - onclose(usr, "admincaster_main") - - -/datum/admins/proc/Game() - if(!check_rights(0)) - return - - var/dat = {" -
Game Panel

\n - Change Game Mode
- "} - if(GLOB.master_mode == "secret") - dat += "(Force Secret Mode)
" - - dat += {" -
- Create Object
- Quick Create Object
- Create Turf
- Create Mob
- "} - - if(marked_datum && istype(marked_datum, /atom)) - dat += "Duplicate Marked Datum
" - - usr << browse(dat, "window=admin2;size=210x200") - return - -/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge -//i.e. buttons/verbs - - -/datum/admins/proc/restart() - set category = "Server" - set name = "Reboot World" - set desc="Restarts the world immediately" - if (!usr.client.holder) - return - var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel") - if(confirm == "Cancel") - return - if(confirm == "Yes") - SSticker.delay_end = 0 - SSblackbox.add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) - -/datum/admins/proc/end_round() - set category = "Server" - set name = "End Round" - set desc = "Attempts to produce a round end report and then restart the server organically." - - if (!usr.client.holder) - return - var/confirm = alert("End the round and restart the game world?", "End Round", "Yes", "Cancel") - if(confirm == "Cancel") - return - if(confirm == "Yes") - SSticker.force_ending = 1 - SSblackbox.add_details("admin_verb","End Round") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/datum/admins/proc/announce() - set category = "Special Verbs" - set name = "Announce" - set desc="Announce your desires to the world" - if(!check_rights(0)) - return - - var/message = input("Global message to send:", "Admin Announce", null, null) as message - if(message) - if(!check_rights(R_SERVER,0)) - message = adminscrub(message,500) - to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]") - log_admin("Announce: [key_name(usr)] : [message]") - SSblackbox.add_details("admin_verb","Announce") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/set_admin_notice() - set category = "Special Verbs" - set name = "Set Admin Notice" - set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round" - if(!check_rights(0)) - return - - var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null - if(new_admin_notice == null) - return - if(new_admin_notice == GLOB.admin_notice) - return - if(new_admin_notice == "") - message_admins("[key_name(usr)] removed the admin notice.") - log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]") - else - message_admins("[key_name(usr)] set the admin notice.") - log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]") - to_chat(world, "Admin Notice:\n \t [new_admin_notice]") - SSblackbox.add_details("admin_verb","Set Admin Notice") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - GLOB.admin_notice = new_admin_notice - return - -/datum/admins/proc/toggleooc() - set category = "Server" - set desc="Toggle dis bitch" - set name="Toggle OOC" - toggle_ooc() - log_admin("[key_name(usr)] toggled OOC.") - message_admins("[key_name_admin(usr)] toggled OOC.") - SSblackbox.add_details("admin_toggle","Toggle OOC|[GLOB.ooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/toggleoocdead() - set category = "Server" - set desc="Toggle dis bitch" - set name="Toggle Dead OOC" - GLOB.dooc_allowed = !( GLOB.dooc_allowed ) - - log_admin("[key_name(usr)] toggled OOC.") - message_admins("[key_name_admin(usr)] toggled Dead OOC.") - SSblackbox.add_details("admin_toggle","Toggle Dead OOC|[GLOB.dooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/startnow() - set category = "Server" - set desc="Start the round RIGHT NOW" - set name="Start Now" - if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP) - SSticker.start_immediately = TRUE - log_admin("[usr.key] has started the game.") - var/msg = "" - if(SSticker.current_state == GAME_STATE_STARTUP) - msg = " (The server is still setting up, but the round will be \ - started as soon as possible.)" - message_admins("\ - [usr.key] has started the game.[msg]") - SSblackbox.add_details("admin_verb","Start Now") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return 1 - else - to_chat(usr, "Error: Start Now: Game has already started.") - - return 0 - -/datum/admins/proc/toggleenter() - set category = "Server" - set desc="People can't enter" - set name="Toggle Entering" - GLOB.enter_allowed = !( GLOB.enter_allowed ) - if (!( GLOB.enter_allowed )) - to_chat(world, "New players may no longer enter the game.") - else - to_chat(world, "New players may now enter the game.") - log_admin("[key_name(usr)] toggled new player game entering.") - message_admins("[key_name_admin(usr)] toggled new player game entering.") - world.update_status() - SSblackbox.add_details("admin_toggle","Toggle Entering|[GLOB.enter_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/toggleAI() - set category = "Server" - set desc="People can't be AI" - set name="Toggle AI" - config.allow_ai = !( config.allow_ai ) - if (!( config.allow_ai )) - to_chat(world, "The AI job is no longer chooseable.") - else - to_chat(world, "The AI job is chooseable now.") - log_admin("[key_name(usr)] toggled AI allowed.") - world.update_status() - SSblackbox.add_details("admin_toggle","Toggle AI|[config.allow_ai]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/toggleaban() - set category = "Server" - set desc="Respawn basically" - set name="Toggle Respawn" - GLOB.abandon_allowed = !( GLOB.abandon_allowed ) - if (GLOB.abandon_allowed) - to_chat(world, "You may now respawn.") - else - to_chat(world, "You may no longer respawn :(") - message_admins("[key_name_admin(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") - log_admin("[key_name(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") - world.update_status() - SSblackbox.add_details("admin_toggle","Toggle Respawn|[GLOB.abandon_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/delay() - set category = "Server" - set desc="Delay the game start" - set name="Delay pre-game" - - var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null - if(SSticker.current_state > GAME_STATE_PREGAME) - return alert("Too late... The game has already started!") - if(newtime) - SSticker.SetTimeLeft(newtime * 10) - if(newtime < 0) - to_chat(world, "The game start has been delayed.") - log_admin("[key_name(usr)] delayed the round start.") - else - to_chat(world, "The game will start in [newtime] seconds.") - world << 'sound/ai/attention.ogg' - log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.") - SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/unprison(mob/M in GLOB.mob_list) - set category = "Admin" - set name = "Unprison" - if (M.z == ZLEVEL_CENTCOM) - M.loc = pick(GLOB.latejoin) - message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]") - log_admin("[key_name(usr)] has unprisoned [key_name(M)]") - else - alert("[M.name] is not prisoned.") - SSblackbox.add_details("admin_verb","Unprison") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS - -/* -/datum/admins/proc/get_sab_desc(var/target) - switch(target) - if(1) - return "Destroy at least 70% of the plasma canisters on the station" - if(2) - return "Destroy the AI" - if(3) - var/count = 0 - for(var/mob/living/carbon/monkey/Monkey in world) - if(Monkey.z == 1) - count++ - return "Kill all [count] of the monkeys on the station" - if(4) - return "Cut power to at least 80% of the station" - else - return "Error: Invalid sabotage target: [target]" -*/ -/datum/admins/proc/spawn_atom(object as text) - set category = "Debug" - set desc = "(atom path) Spawn an atom" - set name = "Spawn" - - if(!check_rights(R_SPAWN)) - return - - var/chosen = pick_closest_path(object) - if(!chosen) - return - if(ispath(chosen,/turf)) - var/turf/T = get_turf(usr.loc) - T.ChangeTurf(chosen) - else - var/atom/A = new chosen(usr.loc) - A.admin_spawned = TRUE - - log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])") - SSblackbox.add_details("admin_verb","Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list) - set category = "Admin" - set desc = "Edit mobs's memory and role" - set name = "Show Traitor Panel" - - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - if(!M.mind) - to_chat(usr, "This mob has no mind!") - return - - M.mind.edit_memory() - SSblackbox.add_details("admin_verb","Traitor Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/datum/admins/proc/toggletintedweldhelmets() - set category = "Debug" - set desc="Reduces view range when wearing welding helmets" - set name="Toggle tinted welding helmes" - GLOB.tinted_weldhelh = !( GLOB.tinted_weldhelh ) - if (GLOB.tinted_weldhelh) - to_chat(world, "The tinted_weldhelh has been enabled!") - else - to_chat(world, "The tinted_weldhelh has been disabled!") - log_admin("[key_name(usr)] toggled tinted_weldhelh.") - message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.") - SSblackbox.add_details("admin_toggle","Toggle Tinted Welding Helmets|[GLOB.tinted_weldhelh]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/toggleguests() - set category = "Server" - set desc="Guests can't enter" - set name="Toggle guests" - GLOB.guests_allowed = !( GLOB.guests_allowed ) - if (!( GLOB.guests_allowed )) - to_chat(world, "Guests may no longer enter the game.") - else - to_chat(world, "Guests may now enter the game.") - log_admin("[key_name(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") - message_admins("[key_name_admin(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") - SSblackbox.add_details("admin_toggle","Toggle Guests|[GLOB.guests_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/datum/admins/proc/output_ai_laws() - var/ai_number = 0 - for(var/mob/living/silicon/S in GLOB.mob_list) - ai_number++ - if(isAI(S)) - to_chat(usr, "AI [key_name(S, usr)]'s laws:") - else if(iscyborg(S)) - var/mob/living/silicon/robot/R = S - to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:") - else if (ispAI(S)) - to_chat(usr, "pAI [key_name(S, usr)]'s laws:") - else - to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") - - if (S.laws == null) - to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") - else - S.laws.show_laws(usr) - if(!ai_number) - to_chat(usr, "No AIs located" ) - -/datum/admins/proc/output_all_devil_info() - var/devil_number = 0 - for(var/D in SSticker.mode.devils) - devil_number++ - to_chat(usr, "Devil #[devil_number]:

" + SSticker.mode.printdevilinfo(D)) - if(!devil_number) - to_chat(usr, "No Devils located" ) - -/datum/admins/proc/output_devil_info(mob/living/M) - if(istype(M) && M.mind && M.mind.devilinfo) - to_chat(usr, SSticker.mode.printdevilinfo(M.mind)) - else - to_chat(usr, "[M] is not a devil.") - -/datum/admins/proc/manage_free_slots() - if(!check_rights()) - return - var/dat = "Manage Free Slots" - var/count = 0 - - if(SSticker && !SSticker.mode) - alert(usr, "You cannot manage jobs before the round starts!") - return - - if(SSjob) - for(var/datum/job/job in SSjob.occupations) - count++ - var/J_title = html_encode(job.title) - var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions)) - var/J_totPos = html_encode(job.total_positions) - if(job.total_positions < 0) - dat += "[J_title]: [J_opPos] (unlimited)" - else - dat += "[J_title]: [J_opPos]/[J_totPos]" - - if(job.title == "AI" || job.title == "Cyborg") - dat += " (Cannot Late Join)
" - continue - if(job.total_positions >= 0) - dat += " Add | " - if(job.total_positions > job.current_positions) - dat += "Remove | " - else - dat += "Remove | " - dat += "Unlimit" - else - dat += " Limit" - dat += "
" - - dat += "" - var/winheight = 100 + (count * 20) - winheight = min(winheight, 690) - usr << browse(dat, "window=players;size=375x[winheight]") - -// -// -//ALL DONE -//********************************************************************************************************* -//TO-DO: -// -// - -//RIP ferry snowflakes - -//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked -//defaults to kicking everyone (afk + non afk clients in the lobby) -//returns a list of ckeys of the kicked clients -/proc/kick_clients_in_lobby(message, kick_only_afk = 0) - var/list/kicked_client_names = list() - for(var/client/C in GLOB.clients) - if(isnewplayer(C.mob)) - if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk - continue - if(message) - to_chat(C, message) - kicked_client_names.Add("[C.ckey]") - qdel(C) - return kicked_client_names - -//returns 1 to let the dragdrop code know we are trapping this event -//returns 0 if we don't plan to trap the event -/datum/admins/proc/cmd_ghost_drag(mob/dead/observer/frommob, mob/living/tomob) - - //this is the exact two check rights checks required to edit a ckey with vv. - if (!check_rights(R_VAREDIT,0) || !check_rights(R_SPAWN|R_DEBUG,0)) - return 0 - - if (!frommob.ckey) - return 0 - - var/question = "" - if (tomob.ckey) - question = "This mob already has a user ([tomob.key]) in control of it! " - question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?" - - var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No") - if (ask != "Yes") - return 1 - - if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response - return 1 - - tomob.ghostize(0) - - message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") - log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") - SSblackbox.add_details("admin_verb","Ghost Drag Control") - - tomob.ckey = frommob.ckey - qdel(frommob) - - return 1 - -/client/proc/adminGreet(logout) - if(SSticker.HasRoundStarted()) - var/string - if(logout && config && config.announce_admin_logout) - string = pick( - "Admin logout: [key_name(src)]") - else if(!logout && config && config.announce_admin_login && (prefs.toggles & ANNOUNCE_LOGIN)) - string = pick( - "Admin login: [key_name(src)]") - if(string) + +//////////////////////////////// +/proc/message_admins(msg) + msg = "ADMIN LOG: [msg]" + to_chat(GLOB.admins, msg) + +/proc/relay_msg_admins(msg) + msg = "RELAY: [msg]" + to_chat(GLOB.admins, msg) + + +///////////////////////////////////////////////////////////////////////////////////////////////Panels + +/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list) + set category = "Admin" + set name = "Show Player Panel" + set desc="Edit player (respawn, ban, heal, etc)" + + if(!check_rights()) + return + + if(!isobserver(usr)) + log_game("[key_name_admin(usr)] checked the player panel while in game.") + + if(!M) + to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.") + return + + var/body = "Options for [M.key]" + body += "Options panel for [M]" + if(M.client) + body += " played by [M.client] " + body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" + + if(isnewplayer(M)) + body += " Hasn't Entered Game " + else + body += " \[Heal\] " + + if(M.client) + body += "
\[Player Age: [M.client.player_age]\]\[Byond Age: [M.client.account_age]\]" + body += "
Show related accounts by: " + body += "\[ CID | " + body += "IP \]" + + body += "

\[ " + body += "VV - " + body += "TP - " + body += "PM - " + body += "SM - " + body += "FLW - " + body += "LOGS\]
" + + body += "Mob type = [M.type]

" + + body += "Kick | " + body += "Ban | " + body += "Jobban | " + body += "Identity Ban | " + if(jobban_isbanned(M, "OOC")) + body+= "OOCBan | " + else + body+= "OOCBan | " + if(jobban_isbanned(M, "emote")) + body+= "EmoteBan | " + else + body+= "Emoteban | " + + body += "Notes | Messages | Watchlist | " + if(M.client) + body += "| Prison | " + body += "\ Send back to Lobby | " + var/muted = M.client.prefs.muted + body += "
Mute: " + body += "\[IC | " + body += "OOC | " + body += "PRAY | " + body += "ADMINHELP | " + body += "DEADCHAT\]" + body += "(toggle all)" + + body += "

" + body += "Jump to | " + body += "Get | " + body += "Send To" + + body += "

" + body += "Traitor panel | " + body += "Narrate to | " + body += "Subtle message | " + body += "Language Menu" + + if (M.client) + if(!isnewplayer(M)) + body += "

" + body += "Transformation:" + body += "
" + + //Human + if(ishuman(M)) + body += "Human | " + else + body += "Humanize | " + + //Monkey + if(ismonkey(M)) + body += "Monkeyized | " + else + body += "Monkeyize | " + + //Corgi + if(iscorgi(M)) + body += "Corgized | " + else + body += "Corgize | " + + //AI / Cyborg + if(isAI(M)) + body += "Is an AI " + else if(ishuman(M)) + body += "Make AI | " + body += "Make Robot | " + body += "Make Alien | " + body += "Make Slime | " + body += "Make Blob | " + + //Simple Animals + if(isanimal(M)) + body += "Re-Animalize | " + else + body += "Animalize | " + + body += "

" + body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

" + body += "Observer | " + body += "\[ Alien: Drone, " + body += "Hunter, " + body += "Sentinel, " + body += "Praetorian, " + body += "Queen, " + body += "Larva \] " + body += "Human " + body += "\[ slime: Baby, " + body += "Adult \] " + body += "Monkey | " + body += "Cyborg | " + body += "Cat | " + body += "Runtime | " + body += "Corgi | " + body += "Ian | " + body += "Crab | " + body += "Coffee | " + //body += "Parrot | " + //body += "Poly | " + body += "\[ Construct: Juggernaut , " + body += "Artificer , " + body += "Wraith \] " + body += "Shade" + body += "
" + + if (M.client) + body += "

" + body += "Other actions:" + body += "
" + body += "Forcesay | " + body += "Thunderdome 1 | " + body += "Thunderdome 2 | " + body += "Thunderdome Admin | " + body += "Thunderdome Observer | " + + body += "
" + body += "" + + usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515") + SSblackbox.add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/datum/admins/proc/access_news_network() //MARKER + set category = "Fun" + set name = "Access Newscaster Network" + set desc = "Allows you to view, add and edit news feeds." + + if (!istype(src,/datum/admins)) + src = usr.client.holder + if (!istype(src,/datum/admins)) + to_chat(usr, "Error: you are not an admin!") + return + var/dat + dat = text("Admin Newscaster

Admin Newscaster Unit

") + + switch(admincaster_screen) + if(0) + dat += "Welcome to the admin newscaster.
Here you can add, edit and censor every newspiece on the network." + dat += "
Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units." + dat += "
Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!" + if(GLOB.news_network.wanted_issue.active) + dat+= "
Read Wanted Issue" + dat+= "

Create Feed Channel" + dat+= "
View Feed Channels" + dat+= "
Submit new Feed story" + dat+= "

Exit" + var/wanted_already = 0 + if(GLOB.news_network.wanted_issue.active) + wanted_already = 1 + dat+="
Feed Security functions:
" + dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" + dat+="
Censor Feed Stories" + dat+="
Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)." + dat+="

The newscaster recognises you as:
[src.admin_signature]
" + if(1) + dat+= "Station Feed Channels
" + if( isemptylist(GLOB.news_network.network_channels) ) + dat+="No active channels found..." + else + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) + if(CHANNEL.is_admin_channel) + dat+="[CHANNEL.channel_name]
" + else + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" + dat+="

Refresh" + dat+="
Back" + if(2) + dat+="Creating new Feed Channel..." + dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
" + dat+="Channel Author: [src.admin_signature]
" + dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

" + dat+="
Submit

Cancel
" + if(3) + dat+="Creating new Feed Message..." + dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK + dat+="Message Author: [src.admin_signature]
" + dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
" + dat+="
Submit

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

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

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

" + if(src.admincaster_feed_channel.channel_name=="") + dat+="•Invalid receiving channel name.
" + if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]") + dat+="•Invalid message body.
" + dat+="
Return
" + if(7) + dat+="ERROR: Could not submit Feed Channel to Network.

" + if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") + dat+="•Invalid channel name.
" + var/check = 0 + for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) + if(FC.channel_name == src.admincaster_feed_channel.channel_name) + check = 1 + break + if(check) + dat+="•Channel name already in use.
" + dat+="
Return
" + if(9) + dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
" + if(src.admincaster_feed_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.admincaster_feed_channel.messages) ) + dat+="No feed messages found in channel...
" + else + var/i = 0 + for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) + i++ + dat+="-[MESSAGE.returnBody(-1)]
" + if(MESSAGE.img) + usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") + dat+="

" + dat+="\[Story by [MESSAGE.returnAuthor(-1)]\]
" + dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]:
" + for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) + dat+="[comment.body]
[comment.author] [comment.time_stamp]
" + dat+="
" + dat+="

Refresh" + dat+="
Back" + if(10) + dat+="Nanotrasen Feed Censorship Tool
" + dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
" + dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
" + dat+="
Select Feed channel to get Stories from:
" + if(isemptylist(GLOB.news_network.network_channels)) + dat+="No feed channels found active...
" + else + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" + dat+="
Cancel" + if(11) + dat+="Nanotrasen D-Notice Handler
" + dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" + dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" + dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
" + if(isemptylist(GLOB.news_network.network_channels)) + dat+="No feed channels found active...
" + else + for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) + dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" + + dat+="
Back" + if(12) + dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
" + dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
" + + if( isemptylist(src.admincaster_feed_channel.messages) ) + dat+="No feed messages found in channel...
" + else + for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) + dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" + dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
" + dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
" + for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) + dat+="[comment.body] X
[comment.author] [comment.time_stamp]
" + dat+="
Back" + if(13) + dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
" + dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" + if(src.admincaster_feed_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.admincaster_feed_channel.messages) ) + dat+="No feed messages found in channel...
" + else + for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) + dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" + dat+="
Back" + if(14) + dat+="Wanted Issue Handler:" + var/wanted_already = 0 + var/end_param = 1 + if(GLOB.news_network.wanted_issue.active) + wanted_already = 1 + end_param = 2 + if(wanted_already) + dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below.
" + dat+="
" + dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
" + dat+="Description: [src.admincaster_wanted_message.body]
" + if(wanted_already) + dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
" + else + dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
" + dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" + if(wanted_already) + dat+="
Take down Issue" + dat+="
Cancel" + if(15) + dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.

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

" + if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]") + dat+="•Invalid name for person wanted.
" + if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") + dat+="•Invalid description.
" + dat+="
Return
" + if(17) + dat+="Wanted Issue successfully deleted from Circulation
" + dat+="
Return
" + if(18) + dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
" + dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
" + dat+="Description: [GLOB.news_network.wanted_issue.body]
" + dat+="Photo:: " + if(GLOB.news_network.wanted_issue.img) + usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") + dat+="
" + else + dat+="None" + dat+="
Back
" + if(19) + dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.

" + dat+="
Return
" + else + dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" + + //to_chat(world, "Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]") + //to_chat(world, "Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]") + usr << browse(dat, "window=admincaster_main;size=400x600") + onclose(usr, "admincaster_main") + + +/datum/admins/proc/Game() + if(!check_rights(0)) + return + + var/dat = {" +
Game Panel

\n + Change Game Mode
+ "} + if(GLOB.master_mode == "secret") + dat += "(Force Secret Mode)
" + + dat += {" +
+ Create Object
+ Quick Create Object
+ Create Turf
+ Create Mob
+ "} + + if(marked_datum && istype(marked_datum, /atom)) + dat += "Duplicate Marked Datum
" + + usr << browse(dat, "window=admin2;size=210x200") + return + +/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge +//i.e. buttons/verbs + + +/datum/admins/proc/restart() + set category = "Server" + set name = "Reboot World" + set desc="Restarts the world immediately" + if (!usr.client.holder) + return + var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel") + if(confirm == "Cancel") + return + if(confirm == "Yes") + SSticker.delay_end = 0 + SSblackbox.add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) + +/datum/admins/proc/end_round() + set category = "Server" + set name = "End Round" + set desc = "Attempts to produce a round end report and then restart the server organically." + + if (!usr.client.holder) + return + var/confirm = alert("End the round and restart the game world?", "End Round", "Yes", "Cancel") + if(confirm == "Cancel") + return + if(confirm == "Yes") + SSticker.force_ending = 1 + SSblackbox.add_details("admin_verb","End Round") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/datum/admins/proc/announce() + set category = "Special Verbs" + set name = "Announce" + set desc="Announce your desires to the world" + if(!check_rights(0)) + return + + var/message = input("Global message to send:", "Admin Announce", null, null) as message + if(message) + if(!check_rights(R_SERVER,0)) + message = adminscrub(message,500) + to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]") + log_admin("Announce: [key_name(usr)] : [message]") + SSblackbox.add_details("admin_verb","Announce") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/set_admin_notice() + set category = "Special Verbs" + set name = "Set Admin Notice" + set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round" + if(!check_rights(0)) + return + + var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null + if(new_admin_notice == null) + return + if(new_admin_notice == GLOB.admin_notice) + return + if(new_admin_notice == "") + message_admins("[key_name(usr)] removed the admin notice.") + log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]") + else + message_admins("[key_name(usr)] set the admin notice.") + log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]") + to_chat(world, "Admin Notice:\n \t [new_admin_notice]") + SSblackbox.add_details("admin_verb","Set Admin Notice") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + GLOB.admin_notice = new_admin_notice + return + +/datum/admins/proc/toggleooc() + set category = "Server" + set desc="Toggle dis bitch" + set name="Toggle OOC" + toggle_ooc() + log_admin("[key_name(usr)] toggled OOC.") + message_admins("[key_name_admin(usr)] toggled OOC.") + SSblackbox.add_details("admin_toggle","Toggle OOC|[GLOB.ooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/toggleoocdead() + set category = "Server" + set desc="Toggle dis bitch" + set name="Toggle Dead OOC" + GLOB.dooc_allowed = !( GLOB.dooc_allowed ) + + log_admin("[key_name(usr)] toggled OOC.") + message_admins("[key_name_admin(usr)] toggled Dead OOC.") + SSblackbox.add_details("admin_toggle","Toggle Dead OOC|[GLOB.dooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/startnow() + set category = "Server" + set desc="Start the round RIGHT NOW" + set name="Start Now" + if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP) + SSticker.start_immediately = TRUE + log_admin("[usr.key] has started the game.") + var/msg = "" + if(SSticker.current_state == GAME_STATE_STARTUP) + msg = " (The server is still setting up, but the round will be \ + started as soon as possible.)" + message_admins("\ + [usr.key] has started the game.[msg]") + SSblackbox.add_details("admin_verb","Start Now") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return 1 + else + to_chat(usr, "Error: Start Now: Game has already started.") + + return 0 + +/datum/admins/proc/toggleenter() + set category = "Server" + set desc="People can't enter" + set name="Toggle Entering" + GLOB.enter_allowed = !( GLOB.enter_allowed ) + if (!( GLOB.enter_allowed )) + to_chat(world, "New players may no longer enter the game.") + else + to_chat(world, "New players may now enter the game.") + log_admin("[key_name(usr)] toggled new player game entering.") + message_admins("[key_name_admin(usr)] toggled new player game entering.") + world.update_status() + SSblackbox.add_details("admin_toggle","Toggle Entering|[GLOB.enter_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/toggleAI() + set category = "Server" + set desc="People can't be AI" + set name="Toggle AI" + config.allow_ai = !( config.allow_ai ) + if (!( config.allow_ai )) + to_chat(world, "The AI job is no longer chooseable.") + else + to_chat(world, "The AI job is chooseable now.") + log_admin("[key_name(usr)] toggled AI allowed.") + world.update_status() + SSblackbox.add_details("admin_toggle","Toggle AI|[config.allow_ai]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/toggleaban() + set category = "Server" + set desc="Respawn basically" + set name="Toggle Respawn" + GLOB.abandon_allowed = !( GLOB.abandon_allowed ) + if (GLOB.abandon_allowed) + to_chat(world, "You may now respawn.") + else + to_chat(world, "You may no longer respawn :(") + message_admins("[key_name_admin(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") + log_admin("[key_name(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].") + world.update_status() + SSblackbox.add_details("admin_toggle","Toggle Respawn|[GLOB.abandon_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/delay() + set category = "Server" + set desc="Delay the game start" + set name="Delay pre-game" + + var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null + if(SSticker.current_state > GAME_STATE_PREGAME) + return alert("Too late... The game has already started!") + if(newtime) + SSticker.SetTimeLeft(newtime * 10) + if(newtime < 0) + to_chat(world, "The game start has been delayed.") + log_admin("[key_name(usr)] delayed the round start.") + else + to_chat(world, "The game will start in [newtime] seconds.") + world << 'sound/ai/attention.ogg' + log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.") + SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/unprison(mob/M in GLOB.mob_list) + set category = "Admin" + set name = "Unprison" + if (M.z == ZLEVEL_CENTCOM) + M.loc = pick(GLOB.latejoin) + message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]") + log_admin("[key_name(usr)] has unprisoned [key_name(M)]") + else + alert("[M.name] is not prisoned.") + SSblackbox.add_details("admin_verb","Unprison") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS + +/* +/datum/admins/proc/get_sab_desc(var/target) + switch(target) + if(1) + return "Destroy at least 70% of the plasma canisters on the station" + if(2) + return "Destroy the AI" + if(3) + var/count = 0 + for(var/mob/living/carbon/monkey/Monkey in world) + if(Monkey.z == 1) + count++ + return "Kill all [count] of the monkeys on the station" + if(4) + return "Cut power to at least 80% of the station" + else + return "Error: Invalid sabotage target: [target]" +*/ +/datum/admins/proc/spawn_atom(object as text) + set category = "Debug" + set desc = "(atom path) Spawn an atom" + set name = "Spawn" + + if(!check_rights(R_SPAWN)) + return + + var/chosen = pick_closest_path(object) + if(!chosen) + return + if(ispath(chosen,/turf)) + var/turf/T = get_turf(usr.loc) + T.ChangeTurf(chosen) + else + var/atom/A = new chosen(usr.loc) + A.admin_spawned = TRUE + + log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])") + SSblackbox.add_details("admin_verb","Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list) + set category = "Admin" + set desc = "Edit mobs's memory and role" + set name = "Show Traitor Panel" + + if(!istype(M)) + to_chat(usr, "This can only be used on instances of type /mob") + return + if(!M.mind) + to_chat(usr, "This mob has no mind!") + return + + M.mind.edit_memory() + SSblackbox.add_details("admin_verb","Traitor Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/datum/admins/proc/toggletintedweldhelmets() + set category = "Debug" + set desc="Reduces view range when wearing welding helmets" + set name="Toggle tinted welding helmes" + GLOB.tinted_weldhelh = !( GLOB.tinted_weldhelh ) + if (GLOB.tinted_weldhelh) + to_chat(world, "The tinted_weldhelh has been enabled!") + else + to_chat(world, "The tinted_weldhelh has been disabled!") + log_admin("[key_name(usr)] toggled tinted_weldhelh.") + message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.") + SSblackbox.add_details("admin_toggle","Toggle Tinted Welding Helmets|[GLOB.tinted_weldhelh]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/toggleguests() + set category = "Server" + set desc="Guests can't enter" + set name="Toggle guests" + GLOB.guests_allowed = !( GLOB.guests_allowed ) + if (!( GLOB.guests_allowed )) + to_chat(world, "Guests may no longer enter the game.") + else + to_chat(world, "Guests may now enter the game.") + log_admin("[key_name(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") + message_admins("[key_name_admin(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.") + SSblackbox.add_details("admin_toggle","Toggle Guests|[GLOB.guests_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/output_ai_laws() + var/ai_number = 0 + for(var/mob/living/silicon/S in GLOB.mob_list) + ai_number++ + if(isAI(S)) + to_chat(usr, "AI [key_name(S, usr)]'s laws:") + else if(iscyborg(S)) + var/mob/living/silicon/robot/R = S + to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:") + else if (ispAI(S)) + to_chat(usr, "pAI [key_name(S, usr)]'s laws:") + else + to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") + + if (S.laws == null) + to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") + else + S.laws.show_laws(usr) + if(!ai_number) + to_chat(usr, "No AIs located" ) + +/datum/admins/proc/output_all_devil_info() + var/devil_number = 0 + for(var/D in SSticker.mode.devils) + devil_number++ + to_chat(usr, "Devil #[devil_number]:

" + SSticker.mode.printdevilinfo(D)) + if(!devil_number) + to_chat(usr, "No Devils located" ) + +/datum/admins/proc/output_devil_info(mob/living/M) + if(istype(M) && M.mind && M.mind.devilinfo) + to_chat(usr, SSticker.mode.printdevilinfo(M.mind)) + else + to_chat(usr, "[M] is not a devil.") + +/datum/admins/proc/manage_free_slots() + if(!check_rights()) + return + var/dat = "Manage Free Slots" + var/count = 0 + + if(SSticker && !SSticker.mode) + alert(usr, "You cannot manage jobs before the round starts!") + return + + if(SSjob) + for(var/datum/job/job in SSjob.occupations) + count++ + var/J_title = html_encode(job.title) + var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions)) + var/J_totPos = html_encode(job.total_positions) + if(job.total_positions < 0) + dat += "[J_title]: [J_opPos] (unlimited)" + else + dat += "[J_title]: [J_opPos]/[J_totPos]" + + if(job.title == "AI" || job.title == "Cyborg") + dat += " (Cannot Late Join)
" + continue + if(job.total_positions >= 0) + dat += " Add | " + if(job.total_positions > job.current_positions) + dat += "Remove | " + else + dat += "Remove | " + dat += "Unlimit" + else + dat += " Limit" + dat += "
" + + dat += "" + var/winheight = 100 + (count * 20) + winheight = min(winheight, 690) + usr << browse(dat, "window=players;size=375x[winheight]") + +// +// +//ALL DONE +//********************************************************************************************************* +//TO-DO: +// +// + +//RIP ferry snowflakes + +//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked +//defaults to kicking everyone (afk + non afk clients in the lobby) +//returns a list of ckeys of the kicked clients +/proc/kick_clients_in_lobby(message, kick_only_afk = 0) + var/list/kicked_client_names = list() + for(var/client/C in GLOB.clients) + if(isnewplayer(C.mob)) + if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk + continue + if(message) + to_chat(C, message) + kicked_client_names.Add("[C.ckey]") + qdel(C) + return kicked_client_names + +//returns 1 to let the dragdrop code know we are trapping this event +//returns 0 if we don't plan to trap the event +/datum/admins/proc/cmd_ghost_drag(mob/dead/observer/frommob, mob/living/tomob) + + //this is the exact two check rights checks required to edit a ckey with vv. + if (!check_rights(R_VAREDIT,0) || !check_rights(R_SPAWN|R_DEBUG,0)) + return 0 + + if (!frommob.ckey) + return 0 + + var/question = "" + if (tomob.ckey) + question = "This mob already has a user ([tomob.key]) in control of it! " + question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?" + + var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No") + if (ask != "Yes") + return 1 + + if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response + return 1 + + tomob.ghostize(0) + + message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") + log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") + SSblackbox.add_details("admin_verb","Ghost Drag Control") + + tomob.ckey = frommob.ckey + qdel(frommob) + + return 1 + +/client/proc/adminGreet(logout) + if(SSticker.HasRoundStarted()) + var/string + if(logout && config && config.announce_admin_logout) + string = pick( + "Admin logout: [key_name(src)]") + else if(!logout && config && config.announce_admin_login && (prefs.toggles & ANNOUNCE_LOGIN)) + string = pick( + "Admin login: [key_name(src)]") + if(string) message_admins("[string]") \ No newline at end of file diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index c15c28d0d0..122e0d2dd2 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -1,284 +1,284 @@ -//- Are all the floors with or without air, as they should be? (regular or airless) -//- Does the area have an APC? -//- Does the area have an Air Alarm? -//- Does the area have a Request Console? -//- Does the area have lights? -//- Does the area have a light switch? -//- Does the area have enough intercoms? -//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) -//- Is the area connected to the scrubbers air loop? -//- Is the area connected to the vent air loop? (vent pumps) -//- Is everything wired properly? -//- Does the area have a fire alarm and firedoors? -//- Do all pod doors work properly? -//- Are accesses set properly on doors, pod buttons, etc. -//- Are all items placed properly? (not below vents, scrubbers, tables) -//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? -//- Check for any misplaced or stacked piece of pipe (air and disposal) -//- Check for any misplaced or stacked piece of wire -//- Identify how hard it is to break into the area and where the weak points are -//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. - -GLOBAL_PROTECT(admin_verbs_debug_mapping) -GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( - /client/proc/do_not_use_these, //-errorage - /client/proc/camera_view, //-errorage - /client/proc/sec_camera_report, //-errorage - /client/proc/intercom_view, //-errorage - /client/proc/air_status, //Air things - /client/proc/Cell, //More air things - /client/proc/atmosscan, //check plumbing - /client/proc/powerdebug, //check power - /client/proc/count_objects_on_z_level, - /client/proc/count_objects_all, - /client/proc/cmd_assume_direct_control, //-errorage - /client/proc/startSinglo, - /client/proc/set_server_fps, //allows you to set the ticklag. - /client/proc/cmd_admin_grantfullaccess, - /client/proc/cmd_admin_areatest, - /client/proc/cmd_admin_rejuvenate, - /datum/admins/proc/show_traitor_panel, - /client/proc/disable_communication, - /client/proc/print_pointers, - /client/proc/cmd_show_at_list, - /client/proc/cmd_show_at_markers, - /client/proc/manipulate_organs -)) - -/obj/effect/debugging/mapfix_marker - name = "map fix marker" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "mapfixmarker" - desc = "I am a mappers mistake." - -/obj/effect/debugging/marker - icon = 'icons/turf/areas.dmi' - icon_state = "yellow" - -/obj/effect/debugging/marker/Move() - return 0 - -/client/proc/do_not_use_these() - set category = "Mapping" - set name = "-None of these are for ingame use!!" - - ..() - -/client/proc/camera_view() - set category = "Mapping" - set name = "Camera Range Display" - - var/on = 0 - for(var/turf/T in world) - if(T.maptext) - on = 1 - T.maptext = null - - if(!on) - var/list/seen = list() - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - for(var/turf/T in C.can_see()) - seen[T]++ - for(var/turf/T in seen) - T.maptext = "[seen[T]]" - SSblackbox.add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - - -/client/proc/sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - if(!Master) - alert(usr,"Master_controller not found.","Sec Camera Report") - return 0 - - var/list/obj/machinery/camera/CL = list() - - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - CL += C - - var/output = {"CAMERA ANNOMALITIES REPORT
-The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
    "} - - for(var/obj/machinery/camera/C1 in CL) - for(var/obj/machinery/camera/C2 in CL) - if(C1 != C2) - if(C1.c_tag == C2.c_tag) - output += "
  • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
  • " - if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) - output += "
  • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " - if(C1.loc == C2.loc) - output += "
  • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " - var/turf/T = get_step(C1,turn(C1.dir,180)) - if(!T || !isturf(T) || !T.density ) - if(!(locate(/obj/structure/grille,T))) - var/window_check = 0 - for(var/obj/structure/window/W in T) - if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) ) - window_check = 1 - break - if(!window_check) - output += "
  • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
  • " - - output += "
" - usr << browse(output,"window=airreport;size=1000x500") - SSblackbox.add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/intercom_view() - set category = "Mapping" - set name = "Intercom Range Display" - - var/static/intercom_range_display_status = 0 - if(intercom_range_display_status) - intercom_range_display_status = 0 - else - intercom_range_display_status = 1 - - for(var/obj/effect/debugging/marker/M in world) - qdel(M) - - if(intercom_range_display_status) - for(var/obj/item/device/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - qdel(F) - SSblackbox.add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_show_at_list() - set category = "Mapping" - set name = "Show roundstart AT list" - set desc = "Displays a list of active turfs coordinates at roundstart" - - var/dat = {"Coordinate list of Active Turfs at Roundstart -
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"} - - for(var/t in GLOB.active_turfs_startlist) - var/turf/T = t - dat += "[ADMIN_COORDJMP(T)]\n" - dat += "
" - - usr << browse(dat, "window=at_list") - - SSblackbox.add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_show_at_markers() - set category = "Mapping" - set name = "Show roundstart AT markers" - set desc = "Places a marker on all active-at-roundstart turfs" - - var/count = 0 - for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers) - qdel(AT) - count++ - - if(count) - to_chat(usr, "[count] AT markers removed.") - else - for(var/t in GLOB.active_turfs_startlist) - new /obj/effect/abstract/marker/at(t) - count++ - to_chat(usr, "[count] AT markers placed.") - - SSblackbox.add_details("admin_verb","Show Roundstart Active Turf Markers") - - -/client/proc/enable_debug_verbs() - set category = "Debug" - set name = "Debug verbs - Enable" - if(!check_rights(R_DEBUG)) - return - verbs -= /client/proc/enable_debug_verbs - verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) - SSblackbox.add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/disable_debug_verbs() - set category = "Debug" - set name = "Debug verbs - Disable" - verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) - verbs += /client/proc/enable_debug_verbs - SSblackbox.add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/count_objects_on_z_level() - set category = "Mapping" - set name = "Count Objects On Level" - var/level = input("Which z-level?","Level?") as text - if(!level) return - var/num_level = text2num(level) - if(!num_level) return - if(!isnum(num_level)) return - - var/type_text = input("Which type path?","Path?") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - var/list/atom/atom_list = list() - - for(var/atom/A in world) - if(istype(A,type_path)) - var/atom/B = A - while(!(isturf(B.loc))) - if(B && B.loc) - B = B.loc - else - break - if(B) - if(B.z == num_level) - count++ - atom_list += A - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - to_chat(world, line)*/ - - to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]") - SSblackbox.add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/count_objects_all() - set category = "Mapping" - set name = "Count Objects All" - - var/type_text = input("Which type path?","") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - for(var/atom/A in world) - if(istype(A,type_path)) - count++ - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - to_chat(world, line)*/ - - to_chat(world, "There are [count] objects of type [type_path] in the game world") - SSblackbox.add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -//This proc is intended to detect lag problems relating to communication procs -GLOBAL_VAR_INIT(say_disabled, FALSE) -/client/proc/disable_communication() - set category = "Mapping" - set name = "Disable all communication verbs" - - GLOB.say_disabled = !GLOB.say_disabled - if(GLOB.say_disabled) - message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") - else - message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") +//- Are all the floors with or without air, as they should be? (regular or airless) +//- Does the area have an APC? +//- Does the area have an Air Alarm? +//- Does the area have a Request Console? +//- Does the area have lights? +//- Does the area have a light switch? +//- Does the area have enough intercoms? +//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) +//- Is the area connected to the scrubbers air loop? +//- Is the area connected to the vent air loop? (vent pumps) +//- Is everything wired properly? +//- Does the area have a fire alarm and firedoors? +//- Do all pod doors work properly? +//- Are accesses set properly on doors, pod buttons, etc. +//- Are all items placed properly? (not below vents, scrubbers, tables) +//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? +//- Check for any misplaced or stacked piece of pipe (air and disposal) +//- Check for any misplaced or stacked piece of wire +//- Identify how hard it is to break into the area and where the weak points are +//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. + +GLOBAL_PROTECT(admin_verbs_debug_mapping) +GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( + /client/proc/do_not_use_these, //-errorage + /client/proc/camera_view, //-errorage + /client/proc/sec_camera_report, //-errorage + /client/proc/intercom_view, //-errorage + /client/proc/air_status, //Air things + /client/proc/Cell, //More air things + /client/proc/atmosscan, //check plumbing + /client/proc/powerdebug, //check power + /client/proc/count_objects_on_z_level, + /client/proc/count_objects_all, + /client/proc/cmd_assume_direct_control, //-errorage + /client/proc/startSinglo, + /client/proc/set_server_fps, //allows you to set the ticklag. + /client/proc/cmd_admin_grantfullaccess, + /client/proc/cmd_admin_areatest, + /client/proc/cmd_admin_rejuvenate, + /datum/admins/proc/show_traitor_panel, + /client/proc/disable_communication, + /client/proc/print_pointers, + /client/proc/cmd_show_at_list, + /client/proc/cmd_show_at_markers, + /client/proc/manipulate_organs +)) + +/obj/effect/debugging/mapfix_marker + name = "map fix marker" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "mapfixmarker" + desc = "I am a mappers mistake." + +/obj/effect/debugging/marker + icon = 'icons/turf/areas.dmi' + icon_state = "yellow" + +/obj/effect/debugging/marker/Move() + return 0 + +/client/proc/do_not_use_these() + set category = "Mapping" + set name = "-None of these are for ingame use!!" + + ..() + +/client/proc/camera_view() + set category = "Mapping" + set name = "Camera Range Display" + + var/on = 0 + for(var/turf/T in world) + if(T.maptext) + on = 1 + T.maptext = null + + if(!on) + var/list/seen = list() + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + for(var/turf/T in C.can_see()) + seen[T]++ + for(var/turf/T in seen) + T.maptext = "[seen[T]]" + SSblackbox.add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + + +/client/proc/sec_camera_report() + set category = "Mapping" + set name = "Camera Report" + + if(!Master) + alert(usr,"Master_controller not found.","Sec Camera Report") + return 0 + + var/list/obj/machinery/camera/CL = list() + + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + CL += C + + var/output = {"CAMERA ANNOMALITIES REPORT
+The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
    "} + + for(var/obj/machinery/camera/C1 in CL) + for(var/obj/machinery/camera/C2 in CL) + if(C1 != C2) + if(C1.c_tag == C2.c_tag) + output += "
  • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
  • " + if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) + output += "
  • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + if(C1.loc == C2.loc) + output += "
  • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + var/turf/T = get_step(C1,turn(C1.dir,180)) + if(!T || !isturf(T) || !T.density ) + if(!(locate(/obj/structure/grille,T))) + var/window_check = 0 + for(var/obj/structure/window/W in T) + if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) ) + window_check = 1 + break + if(!window_check) + output += "
  • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
  • " + + output += "
" + usr << browse(output,"window=airreport;size=1000x500") + SSblackbox.add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/intercom_view() + set category = "Mapping" + set name = "Intercom Range Display" + + var/static/intercom_range_display_status = 0 + if(intercom_range_display_status) + intercom_range_display_status = 0 + else + intercom_range_display_status = 1 + + for(var/obj/effect/debugging/marker/M in world) + qdel(M) + + if(intercom_range_display_status) + for(var/obj/item/device/radio/intercom/I in world) + for(var/turf/T in orange(7,I)) + var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) + if (!(F in view(7,I.loc))) + qdel(F) + SSblackbox.add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_show_at_list() + set category = "Mapping" + set name = "Show roundstart AT list" + set desc = "Displays a list of active turfs coordinates at roundstart" + + var/dat = {"Coordinate list of Active Turfs at Roundstart +
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"} + + for(var/t in GLOB.active_turfs_startlist) + var/turf/T = t + dat += "[ADMIN_COORDJMP(T)]\n" + dat += "
" + + usr << browse(dat, "window=at_list") + + SSblackbox.add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_show_at_markers() + set category = "Mapping" + set name = "Show roundstart AT markers" + set desc = "Places a marker on all active-at-roundstart turfs" + + var/count = 0 + for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers) + qdel(AT) + count++ + + if(count) + to_chat(usr, "[count] AT markers removed.") + else + for(var/t in GLOB.active_turfs_startlist) + new /obj/effect/abstract/marker/at(t) + count++ + to_chat(usr, "[count] AT markers placed.") + + SSblackbox.add_details("admin_verb","Show Roundstart Active Turf Markers") + + +/client/proc/enable_debug_verbs() + set category = "Debug" + set name = "Debug verbs - Enable" + if(!check_rights(R_DEBUG)) + return + verbs -= /client/proc/enable_debug_verbs + verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) + SSblackbox.add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/disable_debug_verbs() + set category = "Debug" + set name = "Debug verbs - Disable" + verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) + verbs += /client/proc/enable_debug_verbs + SSblackbox.add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/count_objects_on_z_level() + set category = "Mapping" + set name = "Count Objects On Level" + var/level = input("Which z-level?","Level?") as text + if(!level) return + var/num_level = text2num(level) + if(!num_level) return + if(!isnum(num_level)) return + + var/type_text = input("Which type path?","Path?") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + var/list/atom/atom_list = list() + + for(var/atom/A in world) + if(istype(A,type_path)) + var/atom/B = A + while(!(isturf(B.loc))) + if(B && B.loc) + B = B.loc + else + break + if(B) + if(B.z == num_level) + count++ + atom_list += A + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + to_chat(world, line)*/ + + to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]") + SSblackbox.add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/count_objects_all() + set category = "Mapping" + set name = "Count Objects All" + + var/type_text = input("Which type path?","") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + for(var/atom/A in world) + if(istype(A,type_path)) + count++ + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + to_chat(world, line)*/ + + to_chat(world, "There are [count] objects of type [type_path] in the game world") + SSblackbox.add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +//This proc is intended to detect lag problems relating to communication procs +GLOBAL_VAR_INIT(say_disabled, FALSE) +/client/proc/disable_communication() + set category = "Mapping" + set name = "Disable all communication verbs" + + GLOB.say_disabled = !GLOB.say_disabled + if(GLOB.say_disabled) + message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") + else + message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ce556640e0..f287870ef6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,806 +1,806 @@ -/obj/item/clothing - name = "clothing" - resistance_flags = FLAMMABLE - obj_integrity = 200 - max_integrity = 200 - integrity_failure = 80 - var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var - var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS - var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect - var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets - var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down - var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv - var/visor_flags_cover = 0 //same as above, but for flags_cover -//what to toggle when toggled with weldingvisortoggle() - var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW - lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - var/alt_desc = null - var/toggle_message = null - var/alt_toggle_message = null - var/active_sound = null - var/toggle_cooldown = null - var/cooldown = 0 - var/obj/item/device/flashlight/F = null - var/can_flashlight = 0 - var/gang //Is this a gang outfit? - var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? - - //Var modification - PLEASE be careful with this I know who you are and where you live - var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts" - var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped() - - var/obj/item/weapon/storage/internal/pocket/pockets = null - - //These allow head/mask items to dynamically alter the user's hair - // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi - // for a state matching hair_state+dynamic_hair_suffix - // THESE OVERRIDE THE HIDEHAIR FLAGS - var/dynamic_hair_suffix = ""//head > mask for head hair - var/dynamic_fhair_suffix = ""//mask > head for facial hair - -/obj/item/clothing/New() - ..() - if(ispath(pockets)) - pockets = new pockets(src) - -/obj/item/clothing/MouseDrop(atom/over_object) - var/mob/M = usr - - if(pockets && over_object == M) - return pockets.MouseDrop(over_object) - - if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech - return - - if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object - if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) - add_fingerprint(usr) - -/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - if(pockets) - pockets.close_all() - return ..() - -/obj/item/clothing/attack_hand(mob/user) - if(pockets && pockets.priority && ismob(loc)) - //If we already have the pockets open, close them. - if (user.s_active == pockets) - pockets.close(user) - //Close whatever the user has open and show them the pockets. - else - if (user.s_active) - user.s_active.close(user) - pockets.orient2hud(user) - pockets.show_to(user) - else - return ..() - -/obj/item/clothing/attackby(obj/item/W, mob/user, params) - if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth)) - var/obj/item/stack/sheet/cloth/C = W - C.use(1) - update_clothes_damaged_state(FALSE) - obj_integrity = max_integrity - to_chat(user, "You fix the damage on [src] with [C].") - return 1 - if(pockets) - var/i = pockets.attackby(W, user, params) - if(i) - return i - return ..() - -/obj/item/clothing/AltClick(mob/user) - if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated()) - var/obj/item/I = pockets.contents[1] - if(!I) - return - pockets.remove_from_storage(I, get_turf(src)) - - if(!user.put_in_hands(I)) - to_chat(user, "You fumble for [I] and it falls on the floor.") - return 1 - user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].") - return 1 - else - return ..() - - -/obj/item/clothing/Destroy() - if(isliving(loc)) - dropped(loc) - if(pockets) - qdel(pockets) - pockets = null - user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up - return ..() - - -/obj/item/clothing/dropped(mob/user) - ..() - if(!istype(user)) - return - if(user_vars_remembered && user_vars_remembered.len) - for(var/variable in user_vars_remembered) - if(variable in user.vars) - if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it) - user.vars[variable] = user_vars_remembered[variable] - user_vars_remembered = list() - - -/obj/item/clothing/equipped(mob/user, slot) - ..() - - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? - for(var/variable in user_vars_to_edit) - if(variable in user.vars) - user_vars_remembered[variable] = user.vars[variable] - user.vars[variable] = user_vars_to_edit[variable] - - -/obj/item/clothing/examine(mob/user) - ..() - if(damaged_clothes) - to_chat(user, "It looks damaged!") - if(pockets) - var/list/how_cool_are_your_threads = list("") - if(pockets.priority) - how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" - else - how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" - how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" - how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" - if(pockets.quickdraw) - how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" - if(pockets.silent) - how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" - how_cool_are_your_threads += "" - to_chat(user, how_cool_are_your_threads.Join()) - -/obj/item/clothing/obj_break(damage_flag) - if(!damaged_clothes) - update_clothes_damaged_state(TRUE) - if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it - var/mob/M = loc - M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!") - -/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) - var/index = "\ref[initial(icon)]-[initial(icon_state)]" - var/static/list/damaged_clothes_icons = list() - if(damaging) - damaged_clothes = 1 - var/icon/damaged_clothes_icon = damaged_clothes_icons[index] - if(!damaged_clothes_icon) - damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object - damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant - damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) - damaged_clothes_icons[index] = damaged_clothes_icon - add_overlay(damaged_clothes_icon, 1) - else - damaged_clothes = 0 - cut_overlay(damaged_clothes_icons[index], TRUE) - - -//Ears: currently only used for headsets and earmuffs -/obj/item/clothing/ears - name = "ears" - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - slot_flags = SLOT_EARS - resistance_flags = 0 - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "Protects your hearing from loud noises, and quiet ones as well." - icon_state = "earmuffs" - item_state = "earmuffs" - strip_delay = 15 - put_on_delay = 25 - resistance_flags = FLAMMABLE - -/obj/item/clothing/ears/earmuffs/Initialize(mapload) - ..() - SET_SECONDARY_FLAG(src, BANG_PROTECT) - SET_SECONDARY_FLAG(src, HEALS_EARS) - -//Glasses -/obj/item/clothing/glasses - name = "glasses" - icon = 'icons/obj/clothing/glasses.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_cover = GLASSESCOVERSEYES - slot_flags = SLOT_EYES - var/vision_flags = 0 - var/darkness_view = 2//Base human is 2 - var/invis_view = SEE_INVISIBLE_LIVING - var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis - var/lighting_alpha - var/emagged = 0 - var/list/icon/current = list() //the current hud icons - var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? - strip_delay = 20 - put_on_delay = 25 - resistance_flags = 0 -/* -SEE_SELF // can see self, no matter what -SEE_MOBS // can see all mobs, no matter what -SEE_OBJS // can see all objs, no matter what -SEE_TURFS // can see all turfs (and areas), no matter what -SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are - // in a lit area (via pixel_x,y or smooth movement), can see those pixels -BLIND // can't see anything -*/ - - -//Gloves -/obj/item/clothing/gloves - name = "gloves" - gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/clothing/gloves.dmi' - siemens_coefficient = 0.50 - body_parts_covered = HANDS - slot_flags = SLOT_GLOVES - attack_verb = list("challenged") - var/transfer_prints = FALSE - strip_delay = 20 - put_on_delay = 40 - - -/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") - -/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_gloves() - -// Called just before an attack_hand(), in mob/UnarmedAttack() -/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) - return 0 // return 1 to cancel attack_hand() - -//Head -/obj/item/clothing/head - name = "head" - icon = 'icons/obj/clothing/hats.dmi' - body_parts_covered = HEAD - slot_flags = SLOT_HEAD - var/blockTracking = 0 //For AI tracking - var/can_toggle = null - - -/obj/item/clothing/head/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") - -/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_head() - - -//Neck -/obj/item/clothing/neck - name = "necklace" - icon = 'icons/obj/clothing/neck.dmi' - body_parts_covered = NECK - slot_flags = SLOT_NECK - strip_delay = 40 - put_on_delay = 40 - -/obj/item/clothing/neck/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(body_parts_covered & HEAD) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "maskblood") - - -//Mask -/obj/item/clothing/mask - name = "mask" - icon = 'icons/obj/clothing/masks.dmi' - body_parts_covered = HEAD - slot_flags = SLOT_MASK - strip_delay = 40 - put_on_delay = 40 - var/mask_adjusted = 0 - var/adjusted_flags = null - - -/obj/item/clothing/mask/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(body_parts_covered & HEAD) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "maskblood") - -/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_wear_mask() - - -//Override this to modify speech like luchador masks. -/obj/item/clothing/mask/proc/speechModification(message) - return message - -//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption -/obj/item/clothing/mask/proc/adjustmask(mob/living/user) - if(user && user.incapacitated()) - return - mask_adjusted = !mask_adjusted - if(!mask_adjusted) - src.icon_state = initial(icon_state) - gas_transfer_coefficient = initial(gas_transfer_coefficient) - permeability_coefficient = initial(permeability_coefficient) - flags |= visor_flags - flags_inv |= visor_flags_inv - flags_cover |= visor_flags_cover - to_chat(user, "You push \the [src] back into place.") - slot_flags = initial(slot_flags) - else - icon_state += "_up" - to_chat(user, "You push \the [src] out of the way.") - gas_transfer_coefficient = null - permeability_coefficient = null - flags &= ~visor_flags - flags_inv &= ~visor_flags_inv - flags_cover &= ~visor_flags_cover - if(adjusted_flags) - slot_flags = adjusted_flags - if(user) - user.wear_mask_update(src, toggle_off = mask_adjusted) - user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off. - - - - -//Shoes -/obj/item/clothing/shoes - name = "shoes" - icon = 'icons/obj/clothing/shoes.dmi' - desc = "Comfortable-looking shoes." - gender = PLURAL //Carn: for grammarically correct text-parsing - var/chained = 0 - - body_parts_covered = FEET - slot_flags = SLOT_FEET - - permeability_coefficient = 0.50 - slowdown = SHOES_SLOWDOWN - var/blood_state = BLOOD_STATE_NOT_BLOODY - var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - var/offset = 0 - var/equipped_before_drop = FALSE - -/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - var/bloody = 0 - if(blood_DNA) - bloody = 1 - else - bloody = bloody_shoes[BLOOD_STATE_HUMAN] - - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") - if(bloody) - . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") - -/obj/item/clothing/shoes/equipped(mob/user, slot) - . = ..() - if(offset && slot_flags & slotdefine2slotbit(slot)) - user.pixel_y += offset - worn_y_dimension -= (offset * 2) - user.update_inv_shoes() - equipped_before_drop = TRUE - -/obj/item/clothing/shoes/proc/restore_offsets(mob/user) - equipped_before_drop = FALSE - user.pixel_y -= offset - worn_y_dimension = world.icon_size - -/obj/item/clothing/shoes/dropped(mob/user) - if(offset && equipped_before_drop) - restore_offsets(user) - . = ..() - -/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/clothing/shoes/clean_blood() - ..() - bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - blood_state = BLOOD_STATE_NOT_BLOODY - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/proc/negates_gravity() - return 0 - -//Suit -/obj/item/clothing/suit - icon = 'icons/obj/clothing/suits.dmi' - name = "suit" - var/fire_resist = T0C+100 - allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - slot_flags = SLOT_OCLOTHING - var/blood_overlay_type = "suit" - var/togglename = null - - -/obj/item/clothing/suit/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") - -/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_wear_suit() - -//Spacesuit -//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. -// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! -/obj/item/clothing/head/helmet/space - name = "space helmet" - icon_state = "spaceold" - desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays." - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - item_state = "spaceold" - permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - flash_protect = 2 - strip_delay = 50 - put_on_delay = 50 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - resistance_flags = 0 - -/obj/item/clothing/suit/space - name = "space suit" - desc = "A suit that protects against low pressure environments. Has a big 13 on the back." - icon_state = "spaceold" - item_state = "s_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals) - slowdown = 1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - strip_delay = 80 - put_on_delay = 80 - resistance_flags = 0 - -//Under clothing - -/obj/item/clothing/under - icon = 'icons/obj/clothing/uniforms.dmi' - name = "under" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - permeability_coefficient = 0.90 - slot_flags = SLOT_ICLOTHING - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women - var/has_sensor = HAS_SENSORS // For the crew computer - var/random_sensor = 1 - var/sensor_mode = NO_SENSORS - var/can_adjust = 1 - var/adjusted = NORMAL_STYLE - var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only - var/obj/item/clothing/tie/hastie = null - var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. - -/obj/item/clothing/under/worn_overlays(isinhands = FALSE) - . = list() - - if(!isinhands) - - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") - if(hastie) - var/tie_color = hastie.item_color - if(!tie_color) - tie_color = hastie.icon_state - var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") - tie.alpha = hastie.alpha - tie.color = hastie.color - . += tie - -/obj/item/clothing/under/attackby(obj/item/W, mob/user, params) - if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - C.use(1) - has_sensor = HAS_SENSORS - to_chat(user,"You repair the suit sensors on [src] with [C].") - return 1 - -/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_w_uniform() - if(has_sensor > NO_SENSORS) - has_sensor = BROKEN_SENSORS - -/obj/item/clothing/under/New() - if(random_sensor) - //make the sensor mode favor higher levels, except coords. - sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS) - adjusted = NORMAL_STYLE - ..() - -/obj/item/clothing/under/equipped(mob/user, slot) - ..() - if(adjusted) - adjusted = NORMAL_STYLE - fitted = initial(fitted) - if(!alt_covers_chest) - body_parts_covered |= CHEST - - if(mutantrace_variation && ishuman(user)) - var/mob/living/carbon/human/H = user - if(DIGITIGRADE in H.dna.species.species_traits) - adjusted = DIGITIGRADE_STYLE - H.update_inv_w_uniform() - - if(hastie && slot != slot_hands) - hastie.on_uniform_equip(src, user) - -/obj/item/clothing/under/dropped(mob/user) - if(hastie) - hastie.on_uniform_dropped(src, user) - ..() - -/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) - if(!attachTie(I, user)) - ..() - -/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1) - if(istype(I, /obj/item/clothing/tie)) - var/obj/item/clothing/tie/T = I - if(hastie) - if(user) - to_chat(user, "[src] already has an accessory.") - return 0 - else - if(user && !user.drop_item()) - return - if(!T.attach(src, user)) - return - - if(user && notifyAttach) - to_chat(user, "You attach [I] to [src].") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform() - - return 1 - -/obj/item/clothing/under/proc/removetie(mob/user) - if(!isliving(user)) - return - if(!can_use(user)) - return - - if(hastie) - var/obj/item/clothing/tie/T = hastie - hastie.detach(src, user) - if(user.put_in_hands(T)) - to_chat(user, "You detach [T] from [src].") - else - to_chat(user, "You detach [T] from [src] and it falls on the floor.") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform() - - -/obj/item/clothing/under/examine(mob/user) - ..() - if(can_adjust) - if(adjusted == ALT_STYLE) - to_chat(user, "Alt-click on [src] to wear it normally.") - else - to_chat(user, "Alt-click on [src] to wear it casually.") - if (has_sensor == BROKEN_SENSORS) - to_chat(user, "Its sensors appear to be shorted out.") - else if(has_sensor > NO_SENSORS) - switch(sensor_mode) - if(SENSOR_OFF) - to_chat(user, "Its sensors appear to be disabled.") - if(SENSOR_LIVING) - to_chat(user, "Its binary life sensors appear to be enabled.") - if(SENSOR_VITALS) - to_chat(user, "Its vital tracker appears to be enabled.") - if(SENSOR_COORDS) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") - if(hastie) - to_chat(user, "\A [hastie] is attached to it.") - -/proc/generate_female_clothing(index,t_color,icon,type) - var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color) - var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") - female_clothing_icon.Blend(female_s, ICON_MULTIPLY) - female_clothing_icon = fcopy_rsc(female_clothing_icon) - GLOB.female_clothing_icons[index] = female_clothing_icon - -/obj/item/clothing/under/verb/toggle() - set name = "Adjust Suit Sensors" - set category = "Object" - set src in usr - var/mob/M = usr - if (istype(M, /mob/dead/)) - return - if (!can_use(M)) - return - if(src.has_sensor == LOCKED_SENSORS) - to_chat(usr, "The controls are locked.") - return 0 - if(src.has_sensor == BROKEN_SENSORS) - to_chat(usr, "The sensors have shorted out!") - return 0 - if(src.has_sensor <= NO_SENSORS) - to_chat(usr, "This suit does not have any sensors.") - return 0 - - var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(get_dist(usr, src) > 1) - to_chat(usr, "You have moved too far away!") - return - sensor_mode = modes.Find(switchMode) - 1 - - if (src.loc == usr) - switch(sensor_mode) - if(0) - to_chat(usr, "You disable your suit's remote sensing equipment.") - if(1) - to_chat(usr, "Your suit will now only report whether you are alive or dead.") - if(2) - to_chat(usr, "Your suit will now only report your exact vital lifesigns.") - if(3) - to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.w_uniform == src) - H.update_suit_sensors() - - ..() - -/obj/item/clothing/under/AltClick(mob/user) - if(..()) - return 1 - - if(!user.canUseTopic(src, be_close=TRUE)) - to_chat(user, "You can't do that right now!") - return - else - if(hastie) - removetie(user) - else - rolldown() - -/obj/item/clothing/under/verb/jumpsuit_adjust() - set name = "Adjust Jumpsuit Style" - set category = null - set src in usr - rolldown() - -/obj/item/clothing/under/proc/rolldown() - if(!can_use(usr)) - return - if(!can_adjust) - to_chat(usr, "You cannot wear this suit any differently!") - return - if(toggle_jumpsuit_adjust()) - to_chat(usr, "You adjust the suit to wear it more casually.") - else - to_chat(usr, "You adjust the suit back to normal.") - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.update_inv_w_uniform() - H.update_body() - -/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() - if(adjusted == DIGITIGRADE_STYLE) - return - adjusted = !adjusted - if(adjusted) - if(fitted != FEMALE_UNIFORM_TOP) - fitted = NO_FEMALE_UNIFORM - if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted - body_parts_covered &= ~CHEST - else - fitted = initial(fitted) - if(!alt_covers_chest) - body_parts_covered |= CHEST - return adjusted - -/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. - if(!can_use(user)) - return FALSE - - visor_toggling() - - to_chat(user, "You adjust \the [src] [up ? "up" : "down"].") - - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.head_update(src, forced = 1) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - return TRUE - -/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags - up = !up - flags ^= visor_flags - flags_inv ^= visor_flags_inv - flags_cover ^= initial(flags_cover) - icon_state = "[initial(icon_state)][up ? "up" : ""]" - if(visor_vars_to_toggle & VISOR_FLASHPROTECT) - flash_protect ^= initial(flash_protect) - if(visor_vars_to_toggle & VISOR_TINT) - tint ^= initial(tint) - - -/obj/item/clothing/proc/can_use(mob/user) - if(user && ismob(user)) - if(!user.incapacitated()) - return 1 - return 0 - - -/obj/item/clothing/obj_destruction(damage_flag) - if(damage_flag == "bomb" || damage_flag == "melee") - var/turf/T = get_turf(src) - spawn(1) //so the shred survives potential turf change from the explosion. - var/obj/effect/decal/cleanable/shreds/Shreds = new(T) - Shreds.desc = "The sad remains of what used to be [name]." - deconstruct(FALSE) - else - ..() +/obj/item/clothing + name = "clothing" + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 80 + var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var + var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS + var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect + var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets + var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down + var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv + var/visor_flags_cover = 0 //same as above, but for flags_cover +//what to toggle when toggled with weldingvisortoggle() + var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW + lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' + var/alt_desc = null + var/toggle_message = null + var/alt_toggle_message = null + var/active_sound = null + var/toggle_cooldown = null + var/cooldown = 0 + var/obj/item/device/flashlight/F = null + var/can_flashlight = 0 + var/gang //Is this a gang outfit? + var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? + + //Var modification - PLEASE be careful with this I know who you are and where you live + var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts" + var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped() + + var/obj/item/weapon/storage/internal/pocket/pockets = null + + //These allow head/mask items to dynamically alter the user's hair + // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi + // for a state matching hair_state+dynamic_hair_suffix + // THESE OVERRIDE THE HIDEHAIR FLAGS + var/dynamic_hair_suffix = ""//head > mask for head hair + var/dynamic_fhair_suffix = ""//mask > head for facial hair + +/obj/item/clothing/New() + ..() + if(ispath(pockets)) + pockets = new pockets(src) + +/obj/item/clothing/MouseDrop(atom/over_object) + var/mob/M = usr + + if(pockets && over_object == M) + return pockets.MouseDrop(over_object) + + if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech + return + + if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) + var/obj/screen/inventory/hand/H = over_object + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + add_fingerprint(usr) + +/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + if(pockets) + pockets.close_all() + return ..() + +/obj/item/clothing/attack_hand(mob/user) + if(pockets && pockets.priority && ismob(loc)) + //If we already have the pockets open, close them. + if (user.s_active == pockets) + pockets.close(user) + //Close whatever the user has open and show them the pockets. + else + if (user.s_active) + user.s_active.close(user) + pockets.orient2hud(user) + pockets.show_to(user) + else + return ..() + +/obj/item/clothing/attackby(obj/item/W, mob/user, params) + if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth)) + var/obj/item/stack/sheet/cloth/C = W + C.use(1) + update_clothes_damaged_state(FALSE) + obj_integrity = max_integrity + to_chat(user, "You fix the damage on [src] with [C].") + return 1 + if(pockets) + var/i = pockets.attackby(W, user, params) + if(i) + return i + return ..() + +/obj/item/clothing/AltClick(mob/user) + if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated()) + var/obj/item/I = pockets.contents[1] + if(!I) + return + pockets.remove_from_storage(I, get_turf(src)) + + if(!user.put_in_hands(I)) + to_chat(user, "You fumble for [I] and it falls on the floor.") + return 1 + user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].") + return 1 + else + return ..() + + +/obj/item/clothing/Destroy() + if(isliving(loc)) + dropped(loc) + if(pockets) + qdel(pockets) + pockets = null + user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up + return ..() + + +/obj/item/clothing/dropped(mob/user) + ..() + if(!istype(user)) + return + if(user_vars_remembered && user_vars_remembered.len) + for(var/variable in user_vars_remembered) + if(variable in user.vars) + if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it) + user.vars[variable] = user_vars_remembered[variable] + user_vars_remembered = list() + + +/obj/item/clothing/equipped(mob/user, slot) + ..() + + if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + for(var/variable in user_vars_to_edit) + if(variable in user.vars) + user_vars_remembered[variable] = user.vars[variable] + user.vars[variable] = user_vars_to_edit[variable] + + +/obj/item/clothing/examine(mob/user) + ..() + if(damaged_clothes) + to_chat(user, "It looks damaged!") + if(pockets) + var/list/how_cool_are_your_threads = list("") + if(pockets.priority) + how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" + else + how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" + how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" + how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" + if(pockets.quickdraw) + how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" + if(pockets.silent) + how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" + how_cool_are_your_threads += "" + to_chat(user, how_cool_are_your_threads.Join()) + +/obj/item/clothing/obj_break(damage_flag) + if(!damaged_clothes) + update_clothes_damaged_state(TRUE) + if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it + var/mob/M = loc + M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!") + +/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) + var/index = "\ref[initial(icon)]-[initial(icon_state)]" + var/static/list/damaged_clothes_icons = list() + if(damaging) + damaged_clothes = 1 + var/icon/damaged_clothes_icon = damaged_clothes_icons[index] + if(!damaged_clothes_icon) + damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object + damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant + damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) + damaged_clothes_icons[index] = damaged_clothes_icon + add_overlay(damaged_clothes_icon, 1) + else + damaged_clothes = 0 + cut_overlay(damaged_clothes_icons[index], TRUE) + + +//Ears: currently only used for headsets and earmuffs +/obj/item/clothing/ears + name = "ears" + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + slot_flags = SLOT_EARS + resistance_flags = 0 + +/obj/item/clothing/ears/earmuffs + name = "earmuffs" + desc = "Protects your hearing from loud noises, and quiet ones as well." + icon_state = "earmuffs" + item_state = "earmuffs" + strip_delay = 15 + put_on_delay = 25 + resistance_flags = FLAMMABLE + +/obj/item/clothing/ears/earmuffs/Initialize(mapload) + ..() + SET_SECONDARY_FLAG(src, BANG_PROTECT) + SET_SECONDARY_FLAG(src, HEALS_EARS) + +//Glasses +/obj/item/clothing/glasses + name = "glasses" + icon = 'icons/obj/clothing/glasses.dmi' + w_class = WEIGHT_CLASS_SMALL + flags_cover = GLASSESCOVERSEYES + slot_flags = SLOT_EYES + var/vision_flags = 0 + var/darkness_view = 2//Base human is 2 + var/invis_view = SEE_INVISIBLE_LIVING + var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis + var/lighting_alpha + var/emagged = 0 + var/list/icon/current = list() //the current hud icons + var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? + strip_delay = 20 + put_on_delay = 25 + resistance_flags = 0 +/* +SEE_SELF // can see self, no matter what +SEE_MOBS // can see all mobs, no matter what +SEE_OBJS // can see all objs, no matter what +SEE_TURFS // can see all turfs (and areas), no matter what +SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are + // in a lit area (via pixel_x,y or smooth movement), can see those pixels +BLIND // can't see anything +*/ + + +//Gloves +/obj/item/clothing/gloves + name = "gloves" + gender = PLURAL //Carn: for grammarically correct text-parsing + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/clothing/gloves.dmi' + siemens_coefficient = 0.50 + body_parts_covered = HANDS + slot_flags = SLOT_GLOVES + attack_verb = list("challenged") + var/transfer_prints = FALSE + strip_delay = 20 + put_on_delay = 40 + + +/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") + +/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_gloves() + +// Called just before an attack_hand(), in mob/UnarmedAttack() +/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) + return 0 // return 1 to cancel attack_hand() + +//Head +/obj/item/clothing/head + name = "head" + icon = 'icons/obj/clothing/hats.dmi' + body_parts_covered = HEAD + slot_flags = SLOT_HEAD + var/blockTracking = 0 //For AI tracking + var/can_toggle = null + + +/obj/item/clothing/head/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") + +/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_head() + + +//Neck +/obj/item/clothing/neck + name = "necklace" + icon = 'icons/obj/clothing/neck.dmi' + body_parts_covered = NECK + slot_flags = SLOT_NECK + strip_delay = 40 + put_on_delay = 40 + +/obj/item/clothing/neck/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") + + +//Mask +/obj/item/clothing/mask + name = "mask" + icon = 'icons/obj/clothing/masks.dmi' + body_parts_covered = HEAD + slot_flags = SLOT_MASK + strip_delay = 40 + put_on_delay = 40 + var/mask_adjusted = 0 + var/adjusted_flags = null + + +/obj/item/clothing/mask/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") + +/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_mask() + + +//Override this to modify speech like luchador masks. +/obj/item/clothing/mask/proc/speechModification(message) + return message + +//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption +/obj/item/clothing/mask/proc/adjustmask(mob/living/user) + if(user && user.incapacitated()) + return + mask_adjusted = !mask_adjusted + if(!mask_adjusted) + src.icon_state = initial(icon_state) + gas_transfer_coefficient = initial(gas_transfer_coefficient) + permeability_coefficient = initial(permeability_coefficient) + flags |= visor_flags + flags_inv |= visor_flags_inv + flags_cover |= visor_flags_cover + to_chat(user, "You push \the [src] back into place.") + slot_flags = initial(slot_flags) + else + icon_state += "_up" + to_chat(user, "You push \the [src] out of the way.") + gas_transfer_coefficient = null + permeability_coefficient = null + flags &= ~visor_flags + flags_inv &= ~visor_flags_inv + flags_cover &= ~visor_flags_cover + if(adjusted_flags) + slot_flags = adjusted_flags + if(user) + user.wear_mask_update(src, toggle_off = mask_adjusted) + user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off. + + + + +//Shoes +/obj/item/clothing/shoes + name = "shoes" + icon = 'icons/obj/clothing/shoes.dmi' + desc = "Comfortable-looking shoes." + gender = PLURAL //Carn: for grammarically correct text-parsing + var/chained = 0 + + body_parts_covered = FEET + slot_flags = SLOT_FEET + + permeability_coefficient = 0.50 + slowdown = SHOES_SLOWDOWN + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + var/offset = 0 + var/equipped_before_drop = FALSE + +/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + var/bloody = 0 + if(blood_DNA) + bloody = 1 + else + bloody = bloody_shoes[BLOOD_STATE_HUMAN] + + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") + if(bloody) + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") + +/obj/item/clothing/shoes/equipped(mob/user, slot) + . = ..() + if(offset && slot_flags & slotdefine2slotbit(slot)) + user.pixel_y += offset + worn_y_dimension -= (offset * 2) + user.update_inv_shoes() + equipped_before_drop = TRUE + +/obj/item/clothing/shoes/proc/restore_offsets(mob/user) + equipped_before_drop = FALSE + user.pixel_y -= offset + worn_y_dimension = world.icon_size + +/obj/item/clothing/shoes/dropped(mob/user) + if(offset && equipped_before_drop) + restore_offsets(user) + . = ..() + +/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/clothing/shoes/clean_blood() + ..() + bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/proc/negates_gravity() + return 0 + +//Suit +/obj/item/clothing/suit + icon = 'icons/obj/clothing/suits.dmi' + name = "suit" + var/fire_resist = T0C+100 + allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + slot_flags = SLOT_OCLOTHING + var/blood_overlay_type = "suit" + var/togglename = null + + +/obj/item/clothing/suit/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") + +/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_suit() + +//Spacesuit +//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. +// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! +/obj/item/clothing/head/helmet/space + name = "space helmet" + icon_state = "spaceold" + desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays." + flags = STOPSPRESSUREDMAGE | THICKMATERIAL + item_state = "spaceold" + permeability_coefficient = 0.01 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT + flash_protect = 2 + strip_delay = 50 + put_on_delay = 50 + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + resistance_flags = 0 + +/obj/item/clothing/suit/space + name = "space suit" + desc = "A suit that protects against low pressure environments. Has a big 13 on the back." + icon_state = "spaceold" + item_state = "s_suit" + w_class = WEIGHT_CLASS_BULKY + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.02 + flags = STOPSPRESSUREDMAGE | THICKMATERIAL + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals) + slowdown = 1 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + strip_delay = 80 + put_on_delay = 80 + resistance_flags = 0 + +//Under clothing + +/obj/item/clothing/under + icon = 'icons/obj/clothing/uniforms.dmi' + name = "under" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + permeability_coefficient = 0.90 + slot_flags = SLOT_ICLOTHING + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women + var/has_sensor = HAS_SENSORS // For the crew computer + var/random_sensor = 1 + var/sensor_mode = NO_SENSORS + var/can_adjust = 1 + var/adjusted = NORMAL_STYLE + var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only + var/obj/item/clothing/tie/hastie = null + var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. + +/obj/item/clothing/under/worn_overlays(isinhands = FALSE) + . = list() + + if(!isinhands) + + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") + if(hastie) + var/tie_color = hastie.item_color + if(!tie_color) + tie_color = hastie.icon_state + var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") + tie.alpha = hastie.alpha + tie.color = hastie.color + . += tie + +/obj/item/clothing/under/attackby(obj/item/W, mob/user, params) + if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + C.use(1) + has_sensor = HAS_SENSORS + to_chat(user,"You repair the suit sensors on [src] with [C].") + return 1 + +/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_w_uniform() + if(has_sensor > NO_SENSORS) + has_sensor = BROKEN_SENSORS + +/obj/item/clothing/under/New() + if(random_sensor) + //make the sensor mode favor higher levels, except coords. + sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS) + adjusted = NORMAL_STYLE + ..() + +/obj/item/clothing/under/equipped(mob/user, slot) + ..() + if(adjusted) + adjusted = NORMAL_STYLE + fitted = initial(fitted) + if(!alt_covers_chest) + body_parts_covered |= CHEST + + if(mutantrace_variation && ishuman(user)) + var/mob/living/carbon/human/H = user + if(DIGITIGRADE in H.dna.species.species_traits) + adjusted = DIGITIGRADE_STYLE + H.update_inv_w_uniform() + + if(hastie && slot != slot_hands) + hastie.on_uniform_equip(src, user) + +/obj/item/clothing/under/dropped(mob/user) + if(hastie) + hastie.on_uniform_dropped(src, user) + ..() + +/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) + if(!attachTie(I, user)) + ..() + +/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1) + if(istype(I, /obj/item/clothing/tie)) + var/obj/item/clothing/tie/T = I + if(hastie) + if(user) + to_chat(user, "[src] already has an accessory.") + return 0 + else + if(user && !user.drop_item()) + return + if(!T.attach(src, user)) + return + + if(user && notifyAttach) + to_chat(user, "You attach [I] to [src].") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.update_inv_w_uniform() + + return 1 + +/obj/item/clothing/under/proc/removetie(mob/user) + if(!isliving(user)) + return + if(!can_use(user)) + return + + if(hastie) + var/obj/item/clothing/tie/T = hastie + hastie.detach(src, user) + if(user.put_in_hands(T)) + to_chat(user, "You detach [T] from [src].") + else + to_chat(user, "You detach [T] from [src] and it falls on the floor.") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.update_inv_w_uniform() + + +/obj/item/clothing/under/examine(mob/user) + ..() + if(can_adjust) + if(adjusted == ALT_STYLE) + to_chat(user, "Alt-click on [src] to wear it normally.") + else + to_chat(user, "Alt-click on [src] to wear it casually.") + if (has_sensor == BROKEN_SENSORS) + to_chat(user, "Its sensors appear to be shorted out.") + else if(has_sensor > NO_SENSORS) + switch(sensor_mode) + if(SENSOR_OFF) + to_chat(user, "Its sensors appear to be disabled.") + if(SENSOR_LIVING) + to_chat(user, "Its binary life sensors appear to be enabled.") + if(SENSOR_VITALS) + to_chat(user, "Its vital tracker appears to be enabled.") + if(SENSOR_COORDS) + to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + if(hastie) + to_chat(user, "\A [hastie] is attached to it.") + +/proc/generate_female_clothing(index,t_color,icon,type) + var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color) + var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") + female_clothing_icon.Blend(female_s, ICON_MULTIPLY) + female_clothing_icon = fcopy_rsc(female_clothing_icon) + GLOB.female_clothing_icons[index] = female_clothing_icon + +/obj/item/clothing/under/verb/toggle() + set name = "Adjust Suit Sensors" + set category = "Object" + set src in usr + var/mob/M = usr + if (istype(M, /mob/dead/)) + return + if (!can_use(M)) + return + if(src.has_sensor == LOCKED_SENSORS) + to_chat(usr, "The controls are locked.") + return 0 + if(src.has_sensor == BROKEN_SENSORS) + to_chat(usr, "The sensors have shorted out!") + return 0 + if(src.has_sensor <= NO_SENSORS) + to_chat(usr, "This suit does not have any sensors.") + return 0 + + var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") + var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes + if(get_dist(usr, src) > 1) + to_chat(usr, "You have moved too far away!") + return + sensor_mode = modes.Find(switchMode) - 1 + + if (src.loc == usr) + switch(sensor_mode) + if(0) + to_chat(usr, "You disable your suit's remote sensing equipment.") + if(1) + to_chat(usr, "Your suit will now only report whether you are alive or dead.") + if(2) + to_chat(usr, "Your suit will now only report your exact vital lifesigns.") + if(3) + to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.w_uniform == src) + H.update_suit_sensors() + + ..() + +/obj/item/clothing/under/AltClick(mob/user) + if(..()) + return 1 + + if(!user.canUseTopic(src, be_close=TRUE)) + to_chat(user, "You can't do that right now!") + return + else + if(hastie) + removetie(user) + else + rolldown() + +/obj/item/clothing/under/verb/jumpsuit_adjust() + set name = "Adjust Jumpsuit Style" + set category = null + set src in usr + rolldown() + +/obj/item/clothing/under/proc/rolldown() + if(!can_use(usr)) + return + if(!can_adjust) + to_chat(usr, "You cannot wear this suit any differently!") + return + if(toggle_jumpsuit_adjust()) + to_chat(usr, "You adjust the suit to wear it more casually.") + else + to_chat(usr, "You adjust the suit back to normal.") + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + H.update_inv_w_uniform() + H.update_body() + +/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() + if(adjusted == DIGITIGRADE_STYLE) + return + adjusted = !adjusted + if(adjusted) + if(fitted != FEMALE_UNIFORM_TOP) + fitted = NO_FEMALE_UNIFORM + if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted + body_parts_covered &= ~CHEST + else + fitted = initial(fitted) + if(!alt_covers_chest) + body_parts_covered |= CHEST + return adjusted + +/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. + if(!can_use(user)) + return FALSE + + visor_toggling() + + to_chat(user, "You adjust \the [src] [up ? "up" : "down"].") + + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.head_update(src, forced = 1) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + return TRUE + +/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags + up = !up + flags ^= visor_flags + flags_inv ^= visor_flags_inv + flags_cover ^= initial(flags_cover) + icon_state = "[initial(icon_state)][up ? "up" : ""]" + if(visor_vars_to_toggle & VISOR_FLASHPROTECT) + flash_protect ^= initial(flash_protect) + if(visor_vars_to_toggle & VISOR_TINT) + tint ^= initial(tint) + + +/obj/item/clothing/proc/can_use(mob/user) + if(user && ismob(user)) + if(!user.incapacitated()) + return 1 + return 0 + + +/obj/item/clothing/obj_destruction(damage_flag) + if(damage_flag == "bomb" || damage_flag == "melee") + var/turf/T = get_turf(src) + spawn(1) //so the shred survives potential turf change from the explosion. + var/obj/effect/decal/cleanable/shreds/Shreds = new(T) + Shreds.desc = "The sad remains of what used to be [name]." + deconstruct(FALSE) + else + ..() diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 741ceef951..6011d7c4b8 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -1,661 +1,661 @@ -/datum/species/golem - // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. - name = "Golem" - id = "iron golem" - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) - speedmod = 2 - armor = 55 - siemens_coeff = 0 - punchdamagelow = 5 - punchdamagehigh = 14 - punchstunthreshold = 11 //about 40% chance to stun - no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) - nojumpsuit = 1 - sexes = 1 - damage_overlay_type = "" - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem - // To prevent golem subtypes from overwhelming the odds when random species - // changes, only the Random Golem type can be chosen - blacklisted = TRUE - dangerous_existence = TRUE - limbs_id = "golem" - fixed_mut_color = "aaa" - var/info_text = "As an Iron Golem, you don't have any special traits." - - var/prefix = "Iron" - var/list/special_names - -/datum/species/golem/random_name(gender,unique,lastname) - var/golem_surname = pick(GLOB.golem_names) - // 3% chance that our golem has a human surname, because - // cultural contamination - if(prob(3)) - golem_surname = pick(GLOB.last_names) - else if(special_names && prob(5)) - golem_surname = pick(special_names) - - var/golem_name = "[prefix] [golem_surname]" - return golem_name - -/datum/species/golem/random - name = "Random Golem" - blacklisted = FALSE - dangerous_existence = FALSE - -/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - var/list/golem_types = typesof(/datum/species/golem) - src.type - var/datum/species/golem/golem_type = pick(golem_types) - var/mob/living/carbon/human/H = C - H.set_species(golem_type) - to_chat(H, "[initial(golem_type.info_text)]") - -/datum/species/golem/adamantine - name = "Adamantine Golem" - id = "adamantine golem" - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine - fixed_mut_color = "4ed" - info_text = "As an Adamantine Golem, you don't have any special traits." - prefix = "Adamantine" - -//Explodes on death -/datum/species/golem/plasma - name = "Plasma Golem" - id = "plasma golem" - fixed_mut_color = "a3d" - meat = /obj/item/weapon/ore/plasma - //Can burn and takes damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) - info_text = "As a Plasma Golem, you explode on death!" - burnmod = 1.5 - prefix = "Plasma" - special_names = list("Flood","Fire","Bar","Man") - -/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H) - if(H.bodytemperature > 900 && H.on_fire) - explosion(get_turf(H),1,2,4,flame_range = 5) - if(H) - H.gib() - if(H.fire_stacks < 2) //flammable - H.adjust_fire_stacks(1) - ..() - -//Harder to hurt -/datum/species/golem/diamond - name = "Diamond Golem" - id = "diamond golem" - fixed_mut_color = "0ff" - armor = 70 //up from 55 - meat = /obj/item/weapon/ore/diamond - info_text = "As a Diamond Golem, you are more resistant than the average golem." - prefix = "Diamond" - special_names = list("Back") - -//Faster but softer and less armoured -/datum/species/golem/gold - name = "Gold Golem" - id = "gold golem" - fixed_mut_color = "cc0" - speedmod = 1 - armor = 25 //down from 55 - meat = /obj/item/weapon/ore/gold - info_text = "As a Gold Golem, you are faster but less resistant than the average golem." - prefix = "Golden" - -//Heavier, thus higher chance of stunning when punching -/datum/species/golem/silver - name = "Silver Golem" - id = "silver golem" - fixed_mut_color = "ddd" - punchstunthreshold = 9 //60% chance, from 40% - meat = /obj/item/weapon/ore/silver - info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." - prefix = "Silver" - special_names = list("Surfer", "Chariot", "Lining") - -//Harder to stun, deals more damage, but it's even slower -/datum/species/golem/plasteel - name = "Plasteel Golem" - id = "plasteel golem" - fixed_mut_color = "bbb" - stunmod = 0.40 - punchdamagelow = 12 - punchdamagehigh = 21 - punchstunthreshold = 18 //still 40% stun chance - speedmod = 4 //pretty fucking slow - meat = /obj/item/weapon/ore/iron - info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." - attack_verb = "smash" - attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard - prefix = "Plasteel" - -//Immune to ash storms -/datum/species/golem/titanium - name = "Titanium Golem" - id = "titanium golem" - fixed_mut_color = "fff" - meat = /obj/item/weapon/ore/titanium - info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." - burnmod = 0.9 - prefix = "Titanium" - -/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "ash" - -/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - -//Immune to ash storms and lava -/datum/species/golem/plastitanium - name = "Plastitanium Golem" - id = "plastitanium golem" - fixed_mut_color = "888" - meat = /obj/item/weapon/ore/titanium - info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." - burnmod = 0.8 - prefix = "Plastitanium" - -/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "lava" - C.weather_immunities |= "ash" - -/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - C.weather_immunities -= "lava" - -//Fast and regenerates... but can only speak like an abductor -/datum/species/golem/alloy - name = "Alien Alloy Golem" - id = "alloy golem" - fixed_mut_color = "333" - meat = /obj/item/stack/sheet/mineral/abductor - mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue - speedmod = 1 //faster - info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." - prefix = "Alien" - special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown - -//Regenerates because self-repairing super-advanced alien tech -/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - H.heal_overall_damage(2,2) - H.adjustToxLoss(-2) - H.adjustOxyLoss(-2) - -//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races -/datum/species/golem/wood - name = "Wood Golem" - id = "wood golem" - fixed_mut_color = "49311c" - meat = /obj/item/stack/sheet/mineral/wood - //Can burn and take damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) - armor = 30 - burnmod = 1.25 - heatmod = 1.5 - info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." - prefix = "Wooden" - -/datum/species/golem/wood/random_name(gender,unique,lastname) - var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \ - "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") - var/golem_name = "[prefix] [plant_name]" - return golem_name - -/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "plants" - C.faction |= "vines" - -/datum/species/golem/wood/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "plants" - C.faction -= "vines" - -/datum/species/golem/wood/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(H.loc)) //else, there's considered to be no light - var/turf/T = H.loc - light_amount = min(1,T.get_lumcount()) - 0.5 - H.nutrition += light_amount * 10 - if(H.nutrition > NUTRITION_LEVEL_FULL) - H.nutrition = NUTRITION_LEVEL_FULL - if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(1,1) - H.adjustToxLoss(-1) - H.adjustOxyLoss(-1) - - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) - -/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.id == "plantbgone") - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - return 1 - -//Radioactive -/datum/species/golem/uranium - name = "Uranium Golem" - id = "uranium golem" - fixed_mut_color = "7f0" - meat = /obj/item/weapon/ore/uranium - info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." - - var/last_event = 0 - var/active = null - prefix = "Uranium" - -/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_event+30) - active = 1 - radiation_pulse(get_turf(H), 3, 3, 5, 0) - last_event = world.time - active = null - ..() - -//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. -/datum/species/golem/sand - name = "Sand Golem" - id = "sand golem" - fixed_mut_color = "ffdc8f" - meat = /obj/item/weapon/ore/glass //this is sand - armor = 0 - burnmod = 3 //melts easily - brutemod = 0.25 - info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery." - attack_sound = 'sound/effects/shovel_dig.ogg' - prefix = "Sand" - -/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message("[H] turns into a pile of sand!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/weapon/ore/glass(get_turf(H)) - qdel(H) - -/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) - if(P.flag == "bullet" || P.flag == "bomb") - playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) - H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ - "The [P.name] sinks harmlessly in [H]'s sandy body!") - return 2 - return 0 - -//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. -/datum/species/golem/glass - name = "Glass Golem" - id = "glass golem" - fixed_mut_color = "5a96b4aa" //transparent body - meat = /obj/item/weapon/shard - armor = 0 - brutemod = 3 //very fragile - burnmod = 0.25 - info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - attack_sound = 'sound/effects/Glassbr2.ogg' - prefix = "Glass" - -/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) - playsound(H, "shatter", 70, 1) - H.visible_message("[H] shatters!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/weapon/shard(get_turf(H)) - qdel(H) - -/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) //self-shots don't reflect - if(P.flag == "laser" || P.flag == "energy") - H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ - "The [P.name] gets reflected by [H]'s glass skin!") - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(H) - - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = H - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - P.Angle = null - return -1 - return 0 - -//Teleports when hit or when it wants to -/datum/species/golem/bluespace - name = "Bluespace Golem" - id = "bluespace golem" - fixed_mut_color = "33f" - meat = /obj/item/weapon/ore/bluespace_crystal - info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." - attack_verb = "bluespace punch" - attack_sound = 'sound/effects/phasein.ogg' - prefix = "Bluespace" - special_names = list("Crystal", "Polycrystal") - - var/datum/action/innate/unstable_teleport/unstable_teleport - var/teleport_cooldown = 100 - var/last_teleport = 0 - -/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) - H.visible_message("[H] teleports!", "You destabilize and teleport!") - new /obj/effect/particle_effect/sparks(get_turf(H)) - playsound(get_turf(H), "sparks", 50, 1) - do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg') - last_teleport = world.time - -/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport - return 0 - else - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) - ..() - if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP) - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown && user != H) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - unstable_teleport = new - unstable_teleport.Grant(C) - -/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) - if(unstable_teleport) - unstable_teleport.Remove(C) - ..() - -/datum/action/innate/unstable_teleport - name = "Unstable Teleport" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "jaunt" - var/cooldown = 150 - var/last_teleport = 0 - -/datum/action/innate/unstable_teleport/IsAvailable() - if(..()) - if(world.time > last_teleport + cooldown) - return 1 - return 0 - -/datum/action/innate/unstable_teleport/Activate() - var/mob/living/carbon/human/H = owner - H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...") - playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1) - addtimer(CALLBACK(src, .proc/teleport, H), 15) - -/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) - H.visible_message("[H] disappears in a shower of sparks!", "You teleport!") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(10, 0, src) - spark_system.attach(H) - spark_system.start() - do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg') - last_teleport = world.time - UpdateButtonIcon() //action icon looks unavailable - sleep(cooldown + 5) - UpdateButtonIcon() //action icon looks available again - - -//honk -/datum/species/golem/bananium - name = "Bananium Golem" - id = "bananium golem" - fixed_mut_color = "ff0" - say_mod = "honks" - punchdamagelow = 0 - punchdamagehigh = 1 - punchstunthreshold = 2 //Harmless and can't stun - meat = /obj/item/weapon/ore/bananium - info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." - attack_verb = "honk" - attack_sound = 'sound/items/AirHorn2.ogg' - prefix = "Bananium" - - var/last_honk = 0 - var/honkooldown = 0 - var/last_banana = 0 - var/banana_cooldown = 100 - var/active = null - -/datum/species/golem/bananium/random_name(gender,unique,lastname) - var/clown_name = pick(GLOB.clown_names) - var/golem_name = "[uppertext(clown_name)]" - return golem_name - -/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) - ..() - if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown && user != H) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at yourself to make bananas - return 0 - else - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_honk + honkooldown) - active = 1 - playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1) - last_honk = world.time - honkooldown = rand(20, 80) - active = null - ..() - -/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) - playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) - -/datum/species/golem/bananium/get_spans() - return list(SPAN_CLOWN) - - -/datum/species/golem/runic - name = "Runic Golem" - id = "runic golem" - limbs_id = "cultgolem" - sexes = FALSE - info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors - prefix = "Runic" - - var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift - var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze - var/obj/effect/proc_holder/spell/targeted/dominate/dominate - -/datum/species/golem/runic/random_name(gender,unique,lastname) - var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly") - var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor - var/golem_name = "[edgy_first_name] [edgy_last_name]" - return golem_name - -/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "cult" - phase_shift = new - C.AddSpell(phase_shift) - abyssal_gaze = new - C.AddSpell(abyssal_gaze) - dominate = new - C.AddSpell(dominate) - -/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "cult" - if(phase_shift) - C.RemoveSpell(phase_shift) - if(abyssal_gaze) - C.RemoveSpell(abyssal_gaze) - if(dominate) - C.RemoveSpell(dominate) - -/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.id == "holywater") - H.adjustFireLoss(4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - - if(chem.id == "unholywater") - H.adjustBruteLoss(-4) - H.adjustFireLoss(-4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - -/datum/species/golem/cloth - name = "Cloth Golem" - id = "cloth golem" - limbs_id = "clothgolem" - sexes = FALSE - info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable." - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn - armor = 15 //feels no pain, but not too resistant - burnmod = 2 // don't get burned - speedmod = 1 // not as heavy as stone - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 // not as heavy as stone - prefix = "Cloth" - -/datum/species/golem/cloth/random_name(gender,unique,lastname) - var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ - "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh - var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" - return golem_name - -/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) - if(H.fire_stacks < 1) - H.adjust_fire_stacks(1) //always prone to burning - ..() - -/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) - if(gibbed) - return - if(H.on_fire) - H.visible_message("[H] burns into ash!") - H.dust(just_ash = TRUE) - return - - H.visible_message("[H] falls apart into a pile of bandages!") - new /obj/structure/cloth_pile(get_turf(H), H) - ..() - -/obj/structure/cloth_pile - name = "pile of bandages" - desc = "It emits a strange aura, as if there was still life within it..." - obj_integrity = 50 - max_integrity = 50 - armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) - icon = 'icons/obj/items.dmi' - icon_state = "pile_bandages" - resistance_flags = FLAMMABLE - - var/revive_time = 900 - var/mob/living/carbon/human/cloth_golem - -/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) - if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) - H.unequip_everything() - H.forceMove(src) - cloth_golem = H - to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") - addtimer(CALLBACK(src, .proc/revive), revive_time) - else - qdel(src) - -/obj/structure/cloth_pile/Destroy() - if(cloth_golem) - QDEL_NULL(cloth_golem) - return ..() - -/obj/structure/cloth_pile/burn() - visible_message("[src] burns into ash!") - new /obj/effect/decal/cleanable/ash(get_turf(src)) - ..() - -/obj/structure/cloth_pile/proc/revive() - if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime - return - if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) - QDEL_NULL(cloth_golem) - return - - invisibility = INVISIBILITY_MAXIMUM //disappear before the animation - new /obj/effect/overlay/temp/mummy_animation(get_turf(src)) - if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) - cloth_golem.grab_ghost() //won't pull if it's a suicide - sleep(20) - cloth_golem.forceMove(get_turf(src)) - cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") - cloth_golem = null - qdel(src) - -/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) - . = ..() - - if(resistance_flags & ON_FIRE) - return - - if(P.is_hot()) - visible_message("[src] bursts into flames!") - fire_act() - -/datum/species/golem/plastic - name = "Plastic" - id = "plastic golem" - prefix = "Plastic" - fixed_mut_color = "fff" - info_text = "As a Plastic Golem, you are capable of ventcrawling, and passing through plastic flaps." - -/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.ventcrawler = VENTCRAWLER_NUDE - -/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) - . = ..() - C.ventcrawler = initial(C.ventcrawler) +/datum/species/golem + // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. + name = "Golem" + id = "iron golem" + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + speedmod = 2 + armor = 55 + siemens_coeff = 0 + punchdamagelow = 5 + punchdamagehigh = 14 + punchstunthreshold = 11 //about 40% chance to stun + no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) + nojumpsuit = 1 + sexes = 1 + damage_overlay_type = "" + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem + // To prevent golem subtypes from overwhelming the odds when random species + // changes, only the Random Golem type can be chosen + blacklisted = TRUE + dangerous_existence = TRUE + limbs_id = "golem" + fixed_mut_color = "aaa" + var/info_text = "As an Iron Golem, you don't have any special traits." + + var/prefix = "Iron" + var/list/special_names + +/datum/species/golem/random_name(gender,unique,lastname) + var/golem_surname = pick(GLOB.golem_names) + // 3% chance that our golem has a human surname, because + // cultural contamination + if(prob(3)) + golem_surname = pick(GLOB.last_names) + else if(special_names && prob(5)) + golem_surname = pick(special_names) + + var/golem_name = "[prefix] [golem_surname]" + return golem_name + +/datum/species/golem/random + name = "Random Golem" + blacklisted = FALSE + dangerous_existence = FALSE + +/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + var/list/golem_types = typesof(/datum/species/golem) - src.type + var/datum/species/golem/golem_type = pick(golem_types) + var/mob/living/carbon/human/H = C + H.set_species(golem_type) + to_chat(H, "[initial(golem_type.info_text)]") + +/datum/species/golem/adamantine + name = "Adamantine Golem" + id = "adamantine golem" + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine + fixed_mut_color = "4ed" + info_text = "As an Adamantine Golem, you don't have any special traits." + prefix = "Adamantine" + +//Explodes on death +/datum/species/golem/plasma + name = "Plasma Golem" + id = "plasma golem" + fixed_mut_color = "a3d" + meat = /obj/item/weapon/ore/plasma + //Can burn and takes damage from heat + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + info_text = "As a Plasma Golem, you explode on death!" + burnmod = 1.5 + prefix = "Plasma" + special_names = list("Flood","Fire","Bar","Man") + +/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H) + if(H.bodytemperature > 900 && H.on_fire) + explosion(get_turf(H),1,2,4,flame_range = 5) + if(H) + H.gib() + if(H.fire_stacks < 2) //flammable + H.adjust_fire_stacks(1) + ..() + +//Harder to hurt +/datum/species/golem/diamond + name = "Diamond Golem" + id = "diamond golem" + fixed_mut_color = "0ff" + armor = 70 //up from 55 + meat = /obj/item/weapon/ore/diamond + info_text = "As a Diamond Golem, you are more resistant than the average golem." + prefix = "Diamond" + special_names = list("Back") + +//Faster but softer and less armoured +/datum/species/golem/gold + name = "Gold Golem" + id = "gold golem" + fixed_mut_color = "cc0" + speedmod = 1 + armor = 25 //down from 55 + meat = /obj/item/weapon/ore/gold + info_text = "As a Gold Golem, you are faster but less resistant than the average golem." + prefix = "Golden" + +//Heavier, thus higher chance of stunning when punching +/datum/species/golem/silver + name = "Silver Golem" + id = "silver golem" + fixed_mut_color = "ddd" + punchstunthreshold = 9 //60% chance, from 40% + meat = /obj/item/weapon/ore/silver + info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." + prefix = "Silver" + special_names = list("Surfer", "Chariot", "Lining") + +//Harder to stun, deals more damage, but it's even slower +/datum/species/golem/plasteel + name = "Plasteel Golem" + id = "plasteel golem" + fixed_mut_color = "bbb" + stunmod = 0.40 + punchdamagelow = 12 + punchdamagehigh = 21 + punchstunthreshold = 18 //still 40% stun chance + speedmod = 4 //pretty fucking slow + meat = /obj/item/weapon/ore/iron + info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." + attack_verb = "smash" + attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard + prefix = "Plasteel" + +//Immune to ash storms +/datum/species/golem/titanium + name = "Titanium Golem" + id = "titanium golem" + fixed_mut_color = "fff" + meat = /obj/item/weapon/ore/titanium + info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." + burnmod = 0.9 + prefix = "Titanium" + +/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.weather_immunities |= "ash" + +/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) + . = ..() + C.weather_immunities -= "ash" + +//Immune to ash storms and lava +/datum/species/golem/plastitanium + name = "Plastitanium Golem" + id = "plastitanium golem" + fixed_mut_color = "888" + meat = /obj/item/weapon/ore/titanium + info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." + burnmod = 0.8 + prefix = "Plastitanium" + +/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.weather_immunities |= "lava" + C.weather_immunities |= "ash" + +/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) + . = ..() + C.weather_immunities -= "ash" + C.weather_immunities -= "lava" + +//Fast and regenerates... but can only speak like an abductor +/datum/species/golem/alloy + name = "Alien Alloy Golem" + id = "alloy golem" + fixed_mut_color = "333" + meat = /obj/item/stack/sheet/mineral/abductor + mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue + speedmod = 1 //faster + info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." + prefix = "Alien" + special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown + +//Regenerates because self-repairing super-advanced alien tech +/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return + H.heal_overall_damage(2,2) + H.adjustToxLoss(-2) + H.adjustOxyLoss(-2) + +//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races +/datum/species/golem/wood + name = "Wood Golem" + id = "wood golem" + fixed_mut_color = "49311c" + meat = /obj/item/stack/sheet/mineral/wood + //Can burn and take damage from heat + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + armor = 30 + burnmod = 1.25 + heatmod = 1.5 + info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." + prefix = "Wooden" + +/datum/species/golem/wood/random_name(gender,unique,lastname) + var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \ + "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") + var/golem_name = "[prefix] [plant_name]" + return golem_name + +/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "plants" + C.faction |= "vines" + +/datum/species/golem/wood/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "plants" + C.faction -= "vines" + +/datum/species/golem/wood/spec_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return + var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing + if(isturf(H.loc)) //else, there's considered to be no light + var/turf/T = H.loc + light_amount = min(1,T.get_lumcount()) - 0.5 + H.nutrition += light_amount * 10 + if(H.nutrition > NUTRITION_LEVEL_FULL) + H.nutrition = NUTRITION_LEVEL_FULL + if(light_amount > 0.2) //if there's enough light, heal + H.heal_overall_damage(1,1) + H.adjustToxLoss(-1) + H.adjustOxyLoss(-1) + + if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) + H.take_overall_damage(2,0) + +/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(chem.id == "plantbgone") + H.adjustToxLoss(3) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + return 1 + +//Radioactive +/datum/species/golem/uranium + name = "Uranium Golem" + id = "uranium golem" + fixed_mut_color = "7f0" + meat = /obj/item/weapon/ore/uranium + info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." + + var/last_event = 0 + var/active = null + prefix = "Uranium" + +/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_event+30) + active = 1 + radiation_pulse(get_turf(H), 3, 3, 5, 0) + last_event = world.time + active = null + ..() + +//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. +/datum/species/golem/sand + name = "Sand Golem" + id = "sand golem" + fixed_mut_color = "ffdc8f" + meat = /obj/item/weapon/ore/glass //this is sand + armor = 0 + burnmod = 3 //melts easily + brutemod = 0.25 + info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery." + attack_sound = 'sound/effects/shovel_dig.ogg' + prefix = "Sand" + +/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) + H.visible_message("[H] turns into a pile of sand!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3,5), i++) + new /obj/item/weapon/ore/glass(get_turf(H)) + qdel(H) + +/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) + if(P.flag == "bullet" || P.flag == "bomb") + playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) + H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ + "The [P.name] sinks harmlessly in [H]'s sandy body!") + return 2 + return 0 + +//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. +/datum/species/golem/glass + name = "Glass Golem" + id = "glass golem" + fixed_mut_color = "5a96b4aa" //transparent body + meat = /obj/item/weapon/shard + armor = 0 + brutemod = 3 //very fragile + burnmod = 0.25 + info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." + attack_sound = 'sound/effects/Glassbr2.ogg' + prefix = "Glass" + +/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) + playsound(H, "shatter", 70, 1) + H.visible_message("[H] shatters!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3,5), i++) + new /obj/item/weapon/shard(get_turf(H)) + qdel(H) + +/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) //self-shots don't reflect + if(P.flag == "laser" || P.flag == "energy") + H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ + "The [P.name] gets reflected by [H]'s glass skin!") + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(H) + + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.firer = H + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + P.Angle = null + return -1 + return 0 + +//Teleports when hit or when it wants to +/datum/species/golem/bluespace + name = "Bluespace Golem" + id = "bluespace golem" + fixed_mut_color = "33f" + meat = /obj/item/weapon/ore/bluespace_crystal + info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." + attack_verb = "bluespace punch" + attack_sound = 'sound/effects/phasein.ogg' + prefix = "Bluespace" + special_names = list("Crystal", "Polycrystal") + + var/datum/action/innate/unstable_teleport/unstable_teleport + var/teleport_cooldown = 100 + var/last_teleport = 0 + +/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) + H.visible_message("[H] teleports!", "You destabilize and teleport!") + new /obj/effect/particle_effect/sparks(get_turf(H)) + playsound(get_turf(H), "sparks", 50, 1) + do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg') + last_teleport = world.time + +/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + var/obj/item/I + if(istype(AM, /obj/item)) + I = AM + if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport + return 0 + else + reactive_teleport(H) + +/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) + ..() + if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP) + reactive_teleport(H) + +/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown && user != H) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + unstable_teleport = new + unstable_teleport.Grant(C) + +/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) + if(unstable_teleport) + unstable_teleport.Remove(C) + ..() + +/datum/action/innate/unstable_teleport + name = "Unstable Teleport" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "jaunt" + var/cooldown = 150 + var/last_teleport = 0 + +/datum/action/innate/unstable_teleport/IsAvailable() + if(..()) + if(world.time > last_teleport + cooldown) + return 1 + return 0 + +/datum/action/innate/unstable_teleport/Activate() + var/mob/living/carbon/human/H = owner + H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...") + playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1) + addtimer(CALLBACK(src, .proc/teleport, H), 15) + +/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) + H.visible_message("[H] disappears in a shower of sparks!", "You teleport!") + var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread + spark_system.set_up(10, 0, src) + spark_system.attach(H) + spark_system.start() + do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg') + last_teleport = world.time + UpdateButtonIcon() //action icon looks unavailable + sleep(cooldown + 5) + UpdateButtonIcon() //action icon looks available again + + +//honk +/datum/species/golem/bananium + name = "Bananium Golem" + id = "bananium golem" + fixed_mut_color = "ff0" + say_mod = "honks" + punchdamagelow = 0 + punchdamagehigh = 1 + punchstunthreshold = 2 //Harmless and can't stun + meat = /obj/item/weapon/ore/bananium + info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." + attack_verb = "honk" + attack_sound = 'sound/items/AirHorn2.ogg' + prefix = "Bananium" + + var/last_honk = 0 + var/honkooldown = 0 + var/last_banana = 0 + var/banana_cooldown = 100 + var/active = null + +/datum/species/golem/bananium/random_name(gender,unique,lastname) + var/clown_name = pick(GLOB.clown_names) + var/golem_name = "[uppertext(clown_name)]" + return golem_name + +/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) + ..() + if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown && user != H) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + var/obj/item/I + if(istype(AM, /obj/item)) + I = AM + if(I.thrownby == H) //No throwing stuff at yourself to make bananas + return 0 + else + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_honk + honkooldown) + active = 1 + playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1) + last_honk = world.time + honkooldown = rand(20, 80) + active = null + ..() + +/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) + playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) + +/datum/species/golem/bananium/get_spans() + return list(SPAN_CLOWN) + + +/datum/species/golem/runic + name = "Runic Golem" + id = "runic golem" + limbs_id = "cultgolem" + sexes = FALSE + info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors + prefix = "Runic" + + var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift + var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze + var/obj/effect/proc_holder/spell/targeted/dominate/dominate + +/datum/species/golem/runic/random_name(gender,unique,lastname) + var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly") + var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor + var/golem_name = "[edgy_first_name] [edgy_last_name]" + return golem_name + +/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "cult" + phase_shift = new + C.AddSpell(phase_shift) + abyssal_gaze = new + C.AddSpell(abyssal_gaze) + dominate = new + C.AddSpell(dominate) + +/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "cult" + if(phase_shift) + C.RemoveSpell(phase_shift) + if(abyssal_gaze) + C.RemoveSpell(abyssal_gaze) + if(dominate) + C.RemoveSpell(dominate) + +/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(chem.id == "holywater") + H.adjustFireLoss(4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + + if(chem.id == "unholywater") + H.adjustBruteLoss(-4) + H.adjustFireLoss(-4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + +/datum/species/golem/cloth + name = "Cloth Golem" + id = "cloth golem" + limbs_id = "clothgolem" + sexes = FALSE + info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable." + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn + armor = 15 //feels no pain, but not too resistant + burnmod = 2 // don't get burned + speedmod = 1 // not as heavy as stone + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 // not as heavy as stone + prefix = "Cloth" + +/datum/species/golem/cloth/random_name(gender,unique,lastname) + var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ + "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh + var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" + return golem_name + +/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) + if(H.fire_stacks < 1) + H.adjust_fire_stacks(1) //always prone to burning + ..() + +/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) + if(gibbed) + return + if(H.on_fire) + H.visible_message("[H] burns into ash!") + H.dust(just_ash = TRUE) + return + + H.visible_message("[H] falls apart into a pile of bandages!") + new /obj/structure/cloth_pile(get_turf(H), H) + ..() + +/obj/structure/cloth_pile + name = "pile of bandages" + desc = "It emits a strange aura, as if there was still life within it..." + obj_integrity = 50 + max_integrity = 50 + armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) + icon = 'icons/obj/items.dmi' + icon_state = "pile_bandages" + resistance_flags = FLAMMABLE + + var/revive_time = 900 + var/mob/living/carbon/human/cloth_golem + +/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) + if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) + H.unequip_everything() + H.forceMove(src) + cloth_golem = H + to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") + addtimer(CALLBACK(src, .proc/revive), revive_time) + else + qdel(src) + +/obj/structure/cloth_pile/Destroy() + if(cloth_golem) + QDEL_NULL(cloth_golem) + return ..() + +/obj/structure/cloth_pile/burn() + visible_message("[src] burns into ash!") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + ..() + +/obj/structure/cloth_pile/proc/revive() + if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime + return + if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) + QDEL_NULL(cloth_golem) + return + + invisibility = INVISIBILITY_MAXIMUM //disappear before the animation + new /obj/effect/overlay/temp/mummy_animation(get_turf(src)) + if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) + cloth_golem.grab_ghost() //won't pull if it's a suicide + sleep(20) + cloth_golem.forceMove(get_turf(src)) + cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") + cloth_golem = null + qdel(src) + +/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + . = ..() + + if(resistance_flags & ON_FIRE) + return + + if(P.is_hot()) + visible_message("[src] bursts into flames!") + fire_act() + +/datum/species/golem/plastic + name = "Plastic" + id = "plastic golem" + prefix = "Plastic" + fixed_mut_color = "fff" + info_text = "As a Plastic Golem, you are capable of ventcrawling, and passing through plastic flaps." + +/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.ventcrawler = VENTCRAWLER_NUDE + +/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) + . = ..() + C.ventcrawler = initial(C.ventcrawler) diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 0069aa5349..b8296a1da5 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -1,365 +1,365 @@ -/obj/effect/proc_holder/spell/targeted/projectile/magic_missile - name = "Magic Missile" - desc = "This spell fires several, slow moving, magic projectiles at nearby targets." - - school = "evocation" - charge_max = 200 - clothes_req = 1 - invocation = "FORTI GY AMA" - invocation_type = "shout" - range = 7 - cooldown_min = 60 //35 deciseconds reduction per rank - - max_targets = 0 - - proj_icon_state = "magicm" - proj_name = "a magic missile" - proj_lingering = 1 - proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile" - - proj_lifespan = 20 - proj_step_delay = 5 - - proj_trail = 1 - proj_trail_lifespan = 5 - proj_trail_icon_state = "magicmd" - - action_icon_state = "magicm" - sound = 'sound/magic/MAGIC_MISSILE.ogg' - -/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile - amt_weakened = 3 - sound = 'sound/magic/MM_Hit.ogg' - -/obj/effect/proc_holder/spell/targeted/genetic/mutate - name = "Mutate" - desc = "This spell causes you to turn into a hulk and gain laser vision for a short while." - - school = "transmutation" - charge_max = 400 - clothes_req = 1 - invocation = "BIRUZ BENNAR" - invocation_type = "shout" - range = -1 - include_user = 1 - - mutations = list(LASEREYES, HULK) - duration = 300 - cooldown_min = 300 //25 deciseconds reduction per rank - - action_icon_state = "mutate" - sound = 'sound/magic/Mutate.ogg' - - -/obj/effect/proc_holder/spell/targeted/smoke - name = "Smoke" - desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." - - school = "conjuration" - charge_max = 120 - clothes_req = 0 - invocation = "none" - invocation_type = "none" - range = -1 - include_user = 1 - cooldown_min = 20 //25 deciseconds reduction per rank - - smoke_spread = 2 - smoke_amt = 4 - - action_icon_state = "smoke" - - -/obj/effect/proc_holder/spell/targeted/smoke/lesser //Chaplain smoke book - name = "Smoke" - desc = "This spell spawns a small cloud of choking smoke at your location." - - school = "conjuration" - charge_max = 360 - clothes_req = 0 - invocation = "none" - invocation_type = "none" - range = -1 - include_user = 1 - - smoke_spread = 1 - smoke_amt = 2 - - action_icon_state = "smoke" - -/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech - name = "Disable Tech" - desc = "This spell disables all weapons, cameras and most other technology in range." - charge_max = 400 - clothes_req = 1 - invocation = "NEC CANTIO" - invocation_type = "shout" - range = -1 - include_user = 1 - cooldown_min = 200 //50 deciseconds reduction per rank - - emp_heavy = 6 - emp_light = 10 - sound = 'sound/magic/Disable_Tech.ogg' - -/obj/effect/proc_holder/spell/targeted/turf_teleport/blink - name = "Blink" - desc = "This spell randomly teleports you a short distance." - - school = "abjuration" - charge_max = 20 - clothes_req = 1 - invocation = "none" - invocation_type = "none" - range = -1 - include_user = 1 - cooldown_min = 5 //4 deciseconds reduction per rank - - - smoke_spread = 1 - smoke_amt = 0 - - inner_tele_radius = 0 - outer_tele_radius = 6 - - action_icon_state = "blink" - sound1 = 'sound/magic/blink.ogg' - sound2 = 'sound/magic/blink.ogg' - -/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult - name = "quickstep" - - charge_max = 100 - clothes_req = 0 - cult_req = 1 - -/obj/effect/proc_holder/spell/targeted/area_teleport/teleport - name = "Teleport" - desc = "This spell teleports you to a type of area of your selection." - - school = "abjuration" - charge_max = 600 - clothes_req = 1 - invocation = "SCYAR NILA" - invocation_type = "shout" - range = -1 - include_user = 1 - cooldown_min = 200 //100 deciseconds reduction per rank - - smoke_spread = 1 - smoke_amt = 2 - sound1 = 'sound/magic/Teleport_diss.ogg' - sound2 = 'sound/magic/Teleport_app.ogg' - -/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop - name = "Stop Time" - desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen." - charge_max = 500 - clothes_req = 1 - invocation = "TOKI WO TOMARE" - invocation_type = "shout" - range = 0 - cooldown_min = 100 - summon_amt = 1 - action_icon_state = "time" - - summon_type = list(/obj/effect/timestop/wizard) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/carp - name = "Summon Carp" - desc = "This spell conjures a simple carp." - - school = "conjuration" - charge_max = 1200 - clothes_req = 1 - invocation = "NOUK FHUNMM SACP RISSKA" - invocation_type = "shout" - range = 1 - - summon_type = list(/mob/living/simple_animal/hostile/carp) - cast_sound = 'sound/magic/Summon_Karp.ogg' - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct - name = "Artificer" - desc = "This spell conjures a construct which may be controlled by Shades" - - school = "conjuration" - charge_max = 600 - clothes_req = 0 - invocation = "none" - invocation_type = "none" - range = 0 - - summon_type = list(/obj/structure/constructshell) - - action_icon_state = "artificer" - cast_sound = 'sound/magic/SummonItems_generic.ogg' - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/creature - name = "Summon Creature Swarm" - desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" - - school = "conjuration" - charge_max = 1200 - clothes_req = 0 - invocation = "IA IA" - invocation_type = "shout" - summon_amt = 10 - range = 3 - - summon_type = list(/mob/living/simple_animal/hostile/creature) - cast_sound = 'sound/magic/SummonItems_generic.ogg' - -/obj/effect/proc_holder/spell/targeted/trigger/blind - name = "Blind" - desc = "This spell temporarily blinds a single person and does not require wizard garb." - - school = "transmutation" - charge_max = 300 - clothes_req = 0 - invocation = "STI KALY" - invocation_type = "whisper" - message = "Your eyes cry out in pain!" - cooldown_min = 50 //12 deciseconds reduction per rank - - starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind") - - action_icon_state = "blind" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult - name = "Summon Creatures (DANGEROUS)" - cult_req = 1 - charge_max = 5000 - summon_amt = 2 - - - -/obj/effect/proc_holder/spell/targeted/inflict_handler/blind - amt_eye_blind = 10 - amt_eye_blurry = 20 - sound = 'sound/magic/Blind.ogg' - -/obj/effect/proc_holder/spell/targeted/genetic/blind - mutations = list(BLINDMUT) - duration = 300 - sound = 'sound/magic/Blind.ogg' -/obj/effect/proc_holder/spell/aoe_turf/repulse - name = "Repulse" - desc = "This spell throws everything around the user away." - charge_max = 400 - clothes_req = 1 - invocation = "GITTAH WEIGH" - invocation_type = "shout" - range = 5 - cooldown_min = 150 - selection_type = "view" - sound = 'sound/magic/Repulse.ogg' - var/maxthrow = 5 - var/sparkle_path = /obj/effect/overlay/temp/gravpush - - action_icon_state = "repulse" - -/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2) - var/list/thrownatoms = list() - var/atom/throwtarget - var/distfromcaster - playMagSound() - for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously. - for(var/atom/movable/AM in T) - thrownatoms += AM - - for(var/am in thrownatoms) - var/atom/movable/AM = am - if(AM == user || AM.anchored) - continue - - throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) - distfromcaster = get_dist(user, AM) - if(distfromcaster == 0) - if(isliving(AM)) - var/mob/living/M = AM - M.Weaken(5) - M.adjustBruteLoss(5) - to_chat(M, "You're slammed into the floor by [user]!") - else - new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own - if(isliving(AM)) - var/mob/living/M = AM - M.Weaken(stun_amt) - to_chat(M, "You're thrown back by [user]!") - AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. - -/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! - name = "Tail Sweep" - desc = "Throw back attackers with a sweep of your tail." - sound = 'sound/magic/Tail_swing.ogg' - charge_max = 150 - clothes_req = 0 - range = 2 - cooldown_min = 150 - invocation_type = "none" - sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep - action_icon_state = "tailsweep" - action_background_icon_state = "bg_alien" - -/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr) - if(istype(user, /mob/living/carbon)) - var/mob/living/carbon/C = user - playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1) - C.spin(6,1) - ..(targets, user, 3) - -/obj/effect/proc_holder/spell/targeted/sacred_flame - name = "Sacred Flame" - desc = "Makes everyone around you more flammable, and lights yourself on fire." - charge_max = 60 - clothes_req = 0 - invocation = "FI'RAN DADISKO" - invocation_type = "shout" - max_targets = 0 - range = 6 - include_user = 1 - selection_type = "view" - action_icon_state = "sacredflame" - sound = 'sound/magic/Fireball.ogg' - -/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) - for(var/mob/living/L in targets) - L.adjust_fire_stacks(20) - if(isliving(user)) - var/mob/living/U = user - U.IgniteMob() - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket - name = "Thrown Lightning" - desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target." - clothes_req = 1 - item_type = /obj/item/spellpacket/lightningbolt - charge_max = 10 - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/carbon/C in targets) - C.throw_mode_on() - -/obj/item/spellpacket/lightningbolt - name = "\improper Lightning bolt Spell Packet" - desc = "Some birdseed wrapped in cloth that somehow crackles with electricity." - icon = 'icons/obj/toy.dmi' - icon_state = "snappop" - w_class = WEIGHT_CLASS_TINY - -/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom) - if(!..()) - if(isliving(hit_atom)) - var/mob/living/M = hit_atom - M.electrocute_act(80, src, illusion = 1) - qdel(src) - -/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - . = ..() - if(ishuman(thrower)) - var/mob/living/carbon/human/H = thrower - H.say("LIGHTNINGBOLT!!") +/obj/effect/proc_holder/spell/targeted/projectile/magic_missile + name = "Magic Missile" + desc = "This spell fires several, slow moving, magic projectiles at nearby targets." + + school = "evocation" + charge_max = 200 + clothes_req = 1 + invocation = "FORTI GY AMA" + invocation_type = "shout" + range = 7 + cooldown_min = 60 //35 deciseconds reduction per rank + + max_targets = 0 + + proj_icon_state = "magicm" + proj_name = "a magic missile" + proj_lingering = 1 + proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile" + + proj_lifespan = 20 + proj_step_delay = 5 + + proj_trail = 1 + proj_trail_lifespan = 5 + proj_trail_icon_state = "magicmd" + + action_icon_state = "magicm" + sound = 'sound/magic/MAGIC_MISSILE.ogg' + +/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile + amt_weakened = 3 + sound = 'sound/magic/MM_Hit.ogg' + +/obj/effect/proc_holder/spell/targeted/genetic/mutate + name = "Mutate" + desc = "This spell causes you to turn into a hulk and gain laser vision for a short while." + + school = "transmutation" + charge_max = 400 + clothes_req = 1 + invocation = "BIRUZ BENNAR" + invocation_type = "shout" + range = -1 + include_user = 1 + + mutations = list(LASEREYES, HULK) + duration = 300 + cooldown_min = 300 //25 deciseconds reduction per rank + + action_icon_state = "mutate" + sound = 'sound/magic/Mutate.ogg' + + +/obj/effect/proc_holder/spell/targeted/smoke + name = "Smoke" + desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." + + school = "conjuration" + charge_max = 120 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + cooldown_min = 20 //25 deciseconds reduction per rank + + smoke_spread = 2 + smoke_amt = 4 + + action_icon_state = "smoke" + + +/obj/effect/proc_holder/spell/targeted/smoke/lesser //Chaplain smoke book + name = "Smoke" + desc = "This spell spawns a small cloud of choking smoke at your location." + + school = "conjuration" + charge_max = 360 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + + smoke_spread = 1 + smoke_amt = 2 + + action_icon_state = "smoke" + +/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech + name = "Disable Tech" + desc = "This spell disables all weapons, cameras and most other technology in range." + charge_max = 400 + clothes_req = 1 + invocation = "NEC CANTIO" + invocation_type = "shout" + range = -1 + include_user = 1 + cooldown_min = 200 //50 deciseconds reduction per rank + + emp_heavy = 6 + emp_light = 10 + sound = 'sound/magic/Disable_Tech.ogg' + +/obj/effect/proc_holder/spell/targeted/turf_teleport/blink + name = "Blink" + desc = "This spell randomly teleports you a short distance." + + school = "abjuration" + charge_max = 20 + clothes_req = 1 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + cooldown_min = 5 //4 deciseconds reduction per rank + + + smoke_spread = 1 + smoke_amt = 0 + + inner_tele_radius = 0 + outer_tele_radius = 6 + + action_icon_state = "blink" + sound1 = 'sound/magic/blink.ogg' + sound2 = 'sound/magic/blink.ogg' + +/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult + name = "quickstep" + + charge_max = 100 + clothes_req = 0 + cult_req = 1 + +/obj/effect/proc_holder/spell/targeted/area_teleport/teleport + name = "Teleport" + desc = "This spell teleports you to a type of area of your selection." + + school = "abjuration" + charge_max = 600 + clothes_req = 1 + invocation = "SCYAR NILA" + invocation_type = "shout" + range = -1 + include_user = 1 + cooldown_min = 200 //100 deciseconds reduction per rank + + smoke_spread = 1 + smoke_amt = 2 + sound1 = 'sound/magic/Teleport_diss.ogg' + sound2 = 'sound/magic/Teleport_app.ogg' + +/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop + name = "Stop Time" + desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen." + charge_max = 500 + clothes_req = 1 + invocation = "TOKI WO TOMARE" + invocation_type = "shout" + range = 0 + cooldown_min = 100 + summon_amt = 1 + action_icon_state = "time" + + summon_type = list(/obj/effect/timestop/wizard) + +/obj/effect/proc_holder/spell/aoe_turf/conjure/carp + name = "Summon Carp" + desc = "This spell conjures a simple carp." + + school = "conjuration" + charge_max = 1200 + clothes_req = 1 + invocation = "NOUK FHUNMM SACP RISSKA" + invocation_type = "shout" + range = 1 + + summon_type = list(/mob/living/simple_animal/hostile/carp) + cast_sound = 'sound/magic/Summon_Karp.ogg' + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct + name = "Artificer" + desc = "This spell conjures a construct which may be controlled by Shades" + + school = "conjuration" + charge_max = 600 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list(/obj/structure/constructshell) + + action_icon_state = "artificer" + cast_sound = 'sound/magic/SummonItems_generic.ogg' + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/creature + name = "Summon Creature Swarm" + desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" + + school = "conjuration" + charge_max = 1200 + clothes_req = 0 + invocation = "IA IA" + invocation_type = "shout" + summon_amt = 10 + range = 3 + + summon_type = list(/mob/living/simple_animal/hostile/creature) + cast_sound = 'sound/magic/SummonItems_generic.ogg' + +/obj/effect/proc_holder/spell/targeted/trigger/blind + name = "Blind" + desc = "This spell temporarily blinds a single person and does not require wizard garb." + + school = "transmutation" + charge_max = 300 + clothes_req = 0 + invocation = "STI KALY" + invocation_type = "whisper" + message = "Your eyes cry out in pain!" + cooldown_min = 50 //12 deciseconds reduction per rank + + starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind") + + action_icon_state = "blind" + +/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult + name = "Summon Creatures (DANGEROUS)" + cult_req = 1 + charge_max = 5000 + summon_amt = 2 + + + +/obj/effect/proc_holder/spell/targeted/inflict_handler/blind + amt_eye_blind = 10 + amt_eye_blurry = 20 + sound = 'sound/magic/Blind.ogg' + +/obj/effect/proc_holder/spell/targeted/genetic/blind + mutations = list(BLINDMUT) + duration = 300 + sound = 'sound/magic/Blind.ogg' +/obj/effect/proc_holder/spell/aoe_turf/repulse + name = "Repulse" + desc = "This spell throws everything around the user away." + charge_max = 400 + clothes_req = 1 + invocation = "GITTAH WEIGH" + invocation_type = "shout" + range = 5 + cooldown_min = 150 + selection_type = "view" + sound = 'sound/magic/Repulse.ogg' + var/maxthrow = 5 + var/sparkle_path = /obj/effect/overlay/temp/gravpush + + action_icon_state = "repulse" + +/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2) + var/list/thrownatoms = list() + var/atom/throwtarget + var/distfromcaster + playMagSound() + for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously. + for(var/atom/movable/AM in T) + thrownatoms += AM + + for(var/am in thrownatoms) + var/atom/movable/AM = am + if(AM == user || AM.anchored) + continue + + throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) + distfromcaster = get_dist(user, AM) + if(distfromcaster == 0) + if(isliving(AM)) + var/mob/living/M = AM + M.Weaken(5) + M.adjustBruteLoss(5) + to_chat(M, "You're slammed into the floor by [user]!") + else + new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own + if(isliving(AM)) + var/mob/living/M = AM + M.Weaken(stun_amt) + to_chat(M, "You're thrown back by [user]!") + AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. + +/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! + name = "Tail Sweep" + desc = "Throw back attackers with a sweep of your tail." + sound = 'sound/magic/Tail_swing.ogg' + charge_max = 150 + clothes_req = 0 + range = 2 + cooldown_min = 150 + invocation_type = "none" + sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep + action_icon_state = "tailsweep" + action_background_icon_state = "bg_alien" + +/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr) + if(istype(user, /mob/living/carbon)) + var/mob/living/carbon/C = user + playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1) + C.spin(6,1) + ..(targets, user, 3) + +/obj/effect/proc_holder/spell/targeted/sacred_flame + name = "Sacred Flame" + desc = "Makes everyone around you more flammable, and lights yourself on fire." + charge_max = 60 + clothes_req = 0 + invocation = "FI'RAN DADISKO" + invocation_type = "shout" + max_targets = 0 + range = 6 + include_user = 1 + selection_type = "view" + action_icon_state = "sacredflame" + sound = 'sound/magic/Fireball.ogg' + +/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) + for(var/mob/living/L in targets) + L.adjust_fire_stacks(20) + if(isliving(user)) + var/mob/living/U = user + U.IgniteMob() + +/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket + name = "Thrown Lightning" + desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target." + clothes_req = 1 + item_type = /obj/item/spellpacket/lightningbolt + charge_max = 10 + +/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr) + ..() + for(var/mob/living/carbon/C in targets) + C.throw_mode_on() + +/obj/item/spellpacket/lightningbolt + name = "\improper Lightning bolt Spell Packet" + desc = "Some birdseed wrapped in cloth that somehow crackles with electricity." + icon = 'icons/obj/toy.dmi' + icon_state = "snappop" + w_class = WEIGHT_CLASS_TINY + +/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom) + if(!..()) + if(isliving(hit_atom)) + var/mob/living/M = hit_atom + M.electrocute_act(80, src, illusion = 1) + qdel(src) + +/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + . = ..() + if(ishuman(thrower)) + var/mob/living/carbon/human/H = thrower + H.say("LIGHTNINGBOLT!!") diff --git a/icons/obj/doors/airlocks/station/maintenanceexternal.dmi b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi new file mode 100644 index 0000000000..4323cf944e Binary files /dev/null and b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi differ diff --git a/tgui/assets/tgui.css.rej b/tgui/assets/tgui.css.rej new file mode 100644 index 0000000000..bc960c1251 --- /dev/null +++ b/tgui/assets/tgui.css.rej @@ -0,0 +1,6 @@ +diff a/tgui/assets/tgui.css b/tgui/assets/tgui.css (rejected hunks) +@@ -1 +1 @@ +-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb18b25',endColorstr='#ff5f380e',GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input::-moz-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} +\ No newline at end of file ++@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} +\ No newline at end of file diff --git a/tgui/assets/tgui.js.rej b/tgui/assets/tgui.js.rej new file mode 100644 index 0000000000..b1b6e568ff --- /dev/null +++ b/tgui/assets/tgui.js.rej @@ -0,0 +1,34 @@ +diff a/tgui/assets/tgui.js b/tgui/assets/tgui.js (rejected hunks) +@@ -1,16 +1,16 @@ +-require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var p=Error("Cannot find module '"+o+"'");throw p.code="MODULE_NOT_FOUND",p}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?p[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-u,o-s),f=1;for(s>u&&u+l>s&&(f=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,u=r(s>1?o[1]:void 0,n),p=s>2?o[2]:void 0,c=void 0===p?n:r(p,n);c>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=a(e),p=r(u.length),c=i(o,p);if(t&&n!=n){for(;p>c;)if(s=u[c++],s!=s)return!0}else for(;p>c;c++)if((t||c in u)&&u[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,p=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),_=o(b.length),x=0,w=e?s(f,_):n?s(f,0):void 0;_>x;x++)if((l||x in b)&&(m=b[x],v=y(m,x,g),t))if(e)w[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(p)return!1;return c?-1:u||p?p:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),u=t(18),p=t(27),c=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,_=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},x=function(t,e){var n,a=_(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&p(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=x(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!x(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return u(this[b])}}),c},def:function(t,e,n){var a,r,i=x(t,e);return i?i.v=n:(t._l=i={i:r=_(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:x,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),u=t(27),p=t(8),c=t(30),l=t(82)("weak"),f=Object.isExtensible||o,d=p(5),h=p(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&u(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),u=t(69),p=t(38),c=t(24),l=t(43),f=t(66);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,_={},x=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!p(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,P=k[b](m?{}:-0,1)!=k,E=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(E||w)&&(x("delete"),x("has"),h&&x("get")),(w||P)&&x(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),_[t]=g,r(r.G+r.W+r.F*(g!=v),_),m||d.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),u="prototype",p=function(t,e,n){var c,l,f,d,h=t&p.F,m=t&p.G,v=t&p.S,g=t&p.P,b=t&p.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[u],_=m?r:r[e]||(r[e]={}),x=_[u]||(_[u]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),_[c]!=f&&i(_,c,d),g&&x[c]!=f&&(x[c]=f)};a.core=r,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,e.exports=p},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),p=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,u,p)),a(RegExp.prototype,u,2==e?function(t,e){return p.call(t,this,e)}:function(t){return p.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,p){var c,l,f,d=u(t),h=a(n,p,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),u=t(45),p=t(41),c=t(66),l=t(46).getProto,f=t(83)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,_,x){p(n,e,b);var w,k,P=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},E=e+" Iterator",C=y==v,S=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||P(y);if(O){var M=l(T.call(new t));c(M,E,!0),!a&&s(A,h)&&o(M,f,g),C&&O.name!==v&&(S=!0,T=function(){return O.call(this)})}if(a&&!x||!d&&!S&&A[f]||o(A,f,T),u[e]=T,u[E]=g,y)if(w={values:C?T:P(v),keys:_?T:P(m),entries:C?P("entries"):T},x)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||S),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,p=o.process,c=o.Promise,l="process"==t(11)(p),f=function(){var t,e,n;for(l&&(t=p.domain)&&(p.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){p.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&p.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,u=1,p=a.getKeys,c=a.getSymbols,l=a.isEnum;s>u;)for(var f,d=i(o[u++]),h=c?p(d).concat(c(d)):p(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),u=s.length,p=0,c=[];u>p;)i.call(o,n=s[p++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var a,i=this,o=arguments,p=o.length,c=0,l=0;if(!u&&!p)return r(t,n,i);if(a=n.slice(),u)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;p>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",u=a(n),p=s.length;return 0>u||u>=p?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===p||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,p=void 0===n?" ":n+"",c=a(e);if(u>=c)return s;""==p&&(p=" ");var l=c-u,f=r.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(p,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),u=t(32),p=t(20),c=t(29),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in p("script")?function(t){u.appendChild(p("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),u=t(32),p=t(20),c=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),_=t(76),x=t(79),w=t(34),k=t(82)("__proto__"),P=t(8),E=t(7)(!1),C=Object.prototype,S=Array.prototype,A=S.slice,O=S.join,T=r.setDesc,M=r.getDesc,R=r.setDescs,L={};o||(a=!d(function(){return 7!=T(p("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return M(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var j="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),F=j.concat("length","prototype"),N=j.length,D=function(){var t,e=p("iframe"),n=N,a=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("