diff --git a/.gitignore b/.gitignore index 558bd8a78c3..c209860320c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ *.lk *.int *.backup -*.int \ No newline at end of file +*.int diff --git a/.travis.yml b/.travis.yml index 6eb8961a07f..7b90bccd36f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ sudo: false env: global: - BYOND_MAJOR="509" - - BYOND_MINOR="1317" + - BYOND_MINOR="1319" - NODE_VERSION="4" matrix: - DM_MAPFILE="tgstation2" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf96cb874db..4026811af12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -208,6 +208,48 @@ This prevents nesting levels from getting deeper then they need to be. Math operators like +, -, /, *, etc are up in the air, just choose which version looks more readable. +###Dream Maker Quirks/Tricks: +Like all languages, Dream Maker has its quirks, some of them are beneficial to us, like these + +* In-To for loops: ```for(var/i = 1, i <= some_value, i++)``` is a fairly standard way to write an incremental for loop in most languages (especially those in the C family) however DM's ```for(var/i in 1 to some_value)``` syntax is oddly faster than its implementation of the former syntax; where possible it's advised to use DM's syntax. (Note, the ```to``` keyword is inclusive, so it automatically defaults to replacing ```<=```, if you want ```<``` then you should write it as ```1 to some_value-1```). + +* Istypeless for loops: a name for a differing syntax for writing for-each style loops in DM, however it is NOT DM's standard syntax hence why this is considered a quirk. Take a look at this: +``` +var/list/bag_of_items = list(sword, apple, coinpouch, sword, sword) +var/obj/item/sword/best_sword = null +for(var/obj/item/sword/S in bag_of_items) + if(!best_sword || S.damage > best_sword.damage) + best_sword = S +``` +The above is a simple proc for checking all swords in a container and returning the one with the highest damage, it uses DM's standard syntax for a for loop, it does this by specifying a type in the variable of the for header which byond interprets as a type to filter by, it performs this filter using ```istype()``` (or some internal-magic similar to ```istype()```, I wouldn't put it past byond), the above example is fine with the data currently contained in ```bag_of_items```, however if ```bag_of_items``` contained ONLY swords, or only SUBTYPES of swords, then the above is inefficient, for example: +``` +var/list/bag_of_swords = list(sword, sword, sword, sword) +var/obj/item/sword/best_sword = null +for(var/obj/item/sword/S in bag_of_swords) + if(!best_sword || S.damage > best_sword.damage) + best_sword = S +``` +specifies a type for DM to filter by, with the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Whereever a list (or other container, such as an atom (in which case you're technically accessing their special contents list but I digress)) contains datums of the same datatype or subtypes of the datatype you require for your for body +you can circumvent DM's filtering and automatic ```istype()``` checks by writing the loop as such: +``` +var/list/bag_of_swords = list(sword, sword, sword, sword) +var/obj/item/sword/best_sword = null +for(var/s in bag_of_swords) + var/obj/item/sword/S = s + if(!best_sword || S.damage > best_sword.damage) + best_sword = S +``` +Of course, if the list contains data of a mixed type then the above optimisation is DANGEROUS, as it will blindly typecast all data in the list as the specified type, even if it isn't really that type! which will cause runtime errors. + +* Dot variable: like other languages in the C family, Dream maker has a ```.``` or "Dot" operator, used for accessing variables/members/functions of an object instance. +eg: +``` +var/mob/living/carbon/human/H = YOU_THE_READER +H.gib() +``` +however DM also has a dot variable, accessed just as ```.``` on it's own, defaulting to a value of null, now what's special about the dot operator is that it is automatically returned (as in the ```return``` statment) at the end of a proc, provided the proc does not already manually return (```return count``` for example). Why is this special? well the ```return``` statement should ideally be free from overhead (functionally free, of course nothing's free) but DM fails to fulfill this, DM's return statement is actually fairly costly for what it does and for what it's used for. +With ```.``` being everpresent in every proc can we use it as a temporary variable? Of course we can! However the ```.``` operator cannot replace a typecasted variable, it can hold data any other var in DM can, it just can't be accessed as one, however the ```.``` operator is compatible with a few operators that look weird but work perfectly fine, such as: ```.++``` for incrementing ```.'s``` value, or ```.[1]``` for accessing the first element of ```.``` (provided it's a list). + ##Pull Request Process There is no strict process when it comes to merging pull requests, pull requests will sometimes take a while before they are looked at by a maintainer, the bigger the change the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be nice. Here are some helpful ways to make it easier for you and for the maintainer when making a pull request. diff --git a/README.md b/README.md index d7e17e395b8..7e086f035ab 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,9 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html). All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html). +(Including tools unless their readme specifies otherwise.) + +See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details. -including tools unless their readme specifies otherwise. See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details. All content including icons and sound is under a Creative Commons 3.0 BY-SA license (http://creativecommons.org/licenses/by-sa/3.0/). diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 6819b565f6e..c1673e47528 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -43,8 +43,8 @@ "aQ" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base) "aR" = (/obj/structure/closet/crate,/obj/item/weapon/survivalcapsule,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/shoes/winterboots,/obj/item/clothing/shoes/winterboots,/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base) "aS" = (/obj/structure/closet/crate,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/pill_bottle/stimulant,/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base) -"aT" = (/turf/simulated/floor/plating,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) -"aU" = (/turf/simulated/floor/plating,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin) +"aT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) +"aU" = (/turf/space,/area/awaymission/snowdin) "aV" = (/obj/structure/flora/bush,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin) "aW" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin) "aX" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin) @@ -214,12 +214,12 @@ "ef" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post) "eg" = (/obj/machinery/light/small,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post) "eh" = (/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"ei" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"ej" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"ek" = (/turf/simulated/floor/plating,/mob/living/simple_animal/hostile/bear/snow,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin) -"el" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"ei" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) +"ej" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) +"ek" = (/obj/effect/spider/stickyweb,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) +"el" = (/obj/effect/spider/stickyweb,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) "em" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/wall/mineral/snow,/area/awaymission/snowdin/dungeon1) -"en" = (/obj/effect/spider/stickyweb,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"en" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) "eo" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/ice/colder,/area/awaymission/snowdin/dungeon1) "ep" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) "eq" = (/turf/simulated/wall/mineral/snow,/area/awaymission/snowdin/dungeon1) @@ -228,13 +228,13 @@ "et" = (/obj/structure/table/wood,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eu" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "ev" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) -"ew" = (/mob/living/simple_animal/hostile/skeleton/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"ex" = (/obj/effect/spider/stickyweb,/obj/structure/barricade/wooden,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"ew" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) +"ex" = (/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1) "ey" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"ez" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"ez" = (/turf/space,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) "eA" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eB" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"eC" = (/obj/effect/spider/stickyweb,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"eC" = (/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) "eD" = (/turf/simulated/wall/ice{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/dungeon1) "eE" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eF" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) @@ -242,13 +242,13 @@ "eH" = (/obj/structure/flora/rock/pile/icy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eI" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eJ" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/ice/colder,/area/awaymission/snowdin/dungeon1) -"eK" = (/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"eL" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"eM" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"eK" = (/turf/space,/obj/structure/girder,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) +"eL" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/space,/area/awaymission/snowdin/post) +"eM" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post) "eN" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eO" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "eP" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"eQ" = (/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) +"eQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/cautery{pixel_x = 4},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "eR" = (/turf/indestructible/rock/snow,/area/awaymission/snowdin/cave) "eS" = (/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin/cave) "eT" = (/turf/simulated/floor/plating/ice,/area/awaymission/snowdin/cave) @@ -321,7 +321,6 @@ "gi" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "gj" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "gk" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/asteroid/basalt{temperature = 140},/area/awaymission/snowdin/dungeon1) -"gl" = (/mob/living/simple_animal/hostile/bear/snow,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "gm" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "gn" = (/obj/effect/bump_teleporter{id = "up"; id_target = "down"},/turf/simulated/floor/plasteel/stairs/left{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave) "go" = (/obj/effect/bump_teleporter{id = "up"; id_target = "down"},/turf/simulated/floor/plasteel/stairs/right{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave) @@ -333,7 +332,6 @@ "gu" = (/obj/item/weapon/stock_parts/cell/high/empty,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) -"gx" = (/turf/simulated/floor/plating,/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post) "gy" = (/obj/structure/table,/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post) "gz" = (/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post) "gA" = (/obj/structure/closet/secure_closet{anchored = 1; name = "Contraband Locker"; req_access_txt = "3"},/obj/item/weapon/gun/projectile/automatic/speargun,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) @@ -408,7 +406,6 @@ "hR" = (/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin/cave) "hS" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) "hT" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1) -"hU" = (/mob/living/simple_animal/hostile/skeleton/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post) "hV" = (/turf/simulated/wall/r_wall{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "hW" = (/obj/structure/closet/emcloset,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "hX" = (/obj/machinery/space_heater,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) @@ -459,7 +456,6 @@ "iQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret) "iR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{baseturf = /turf/simulated/floor/plating/asteroid/snow; wet = 0},/area/awaymission/snowdin/sekret) "iS" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel/cmo{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) -"iT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/cautery{pixel_x = 4},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "iU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "iV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret) "iW" = (/obj/structure/sign/bluecross{pixel_x = -32},/turf/simulated/floor/plasteel{baseturf = /turf/simulated/floor/plating/asteroid/snow; wet = 0},/area/awaymission/snowdin/sekret) @@ -737,115 +733,115 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacalaxawayalacacacacacacacacacacacacacadazazazazadadaAadacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacalaCaBaEaDalalalalalalaFacacacacacacaGacacacacacamaoamacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacalalaDaIaHaJaIaIaIaKaIaIaIaIaFacacacacacacacacacacacadaAadacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFalaMaMaDaIaNaJaOaQaPaIaRaIaSaIaIaFacacacacacacacacacacaTaUaGacacacacacacacacacacacacacacacacaVacafafafafafafafafafafafafacacacaWacacacacacacaLacaXacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacaFaFaYaZaZaZbaaIaIaJbbbdbcaIbeaIbfaIbgalacacacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafacacacaWacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacalbibhbjaZaZbkblaDbmaIaJbnbpboaIbqaIbeaIbralacacacacacacacacacaUaUaUacaWacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbsbkaZaZaZbkaZbtaDbvbubxbwbybwbwaIaIbzaIbAalacacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbBaZbCbEbDbGbFblaDbvbHbJbIbLbKbwaIaIaIaIaIalacacacacacacacacaUaUaUacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalbObQbPaDbRbTbSbUaDbVbPaDbWbYbXbZaDcbcaccccalacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacaLacacacacacacacacacacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalcdcebVaDbUbUbUbUcfcecgaDchchcichaDcbcbckcjaFacacacacacacacacaUaUacacacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaWacacacacacacacacacacacacacalaDcfaDaDbUclbUbUaDcdbOaDchchchchaDcmcbcbcnaFacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacaFbUcpcoclcqcrbUbUaDaDaDaDchchchchcsckcbcbctaFacacacacacacacaUaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcucvclbUaDcxcwaDchchchchaDcmcbcbcyaFacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacaWacacacacacaFbUbUbUbUclbUcpcAczcCcBaDchchcDchaDcbcbcbcEaFacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcpbUcFbUaDcdbOaDcGbZbXbYaDcbcHcIcIalacacacacacacacaUaUacacacacaVacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacalaDaDaDcJaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacaUaUacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaKaIaIaIaIaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIalacacacacacacaUaUaUacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaIaIcKcKaIcKaIaIaIaIaIaIaIaIaIaIaIaIaIaIalacacacacacacaUaUacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLaLacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaVacacacacacacacacacacalalaFaFaFaFaFaFalalaDcLaDcLaDalalalalalalalalacacacacacacaUaUacaWacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacaUaUacacacacacacacacacaWacacacacacafafafafafafafafafafafafafafafafafacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacaUaUacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalcLalcLalacacacacacacacacacacacacacacaUaUaUacacacacacacacacacacacaWacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacaccMacacacaccPcPcPcPcPacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacaVacaccOaUaUaUcOacacacacacacacacacacacaWacacaccQaUaUacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacacacacacaccPcPcScRcTcPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacaccMacacacacacacaUaUaUacacacacacacacacacacacacacacacacaWaUaUacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccPcPcPcRcUcRcRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacacaUaUaUaUacacacacacacacaWacacacacacacacacaUaUacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccWcRcRcRcRcRcRcXcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYcZcZcYcYcZcYadcYcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaccMcVdacVcMacacacaUaUaUaUaUacacacacacacacacacacacacacaWacacaUaUaUacacacacacbMacacacacafafafafafafafafafafafacacacacacacacbMacacacacacacacacacaLaLaLaLcPcPcPdbcRdccRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddddfdededgdedhadcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacaUaUaUaUaUacacacacacacacacacacacacacacacacacaUaUacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacaVacacacaLaLaLaLacaccPcPcRcRdicPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdjdgdedfdfdfdkcYcYadadadcNdldldldldldldmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacaccMacacacacacaUaUaUaUaUacacacacacacacacacacacacacacacacaWaUaUacacacacacacaUaUaUaUafafafafafafafafafafafacacacacacacbMacacbMacacacacacacacaLaLaLaLacacaccPcPcPcPcPacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdgdfdedfaddfdedeaddfdfdnaddldldldocNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUdpdpafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddfdededfaddfdedgdfdfdfadaddlcNcNcNcNcNcNcNcNcNcNcNdldldldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpdpafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdededgdfdfdfdfdfdfdgadaddldlcNcNcNcNcNcNcNcNcNcNcNdldldldldqdqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacaLaLaLaLacacacacaWacacacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpdpdpafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdrdfdfdfdfdtdsaddgduaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacacacacacacacacaWacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpafafafafafafafafafacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdrdfadadaddfdgaddvdwaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdxdxdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacaWacacacacacacacacacacaWacacacdzdzdzdzdzdzdzdzaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacafdpdpafafafafafafafafacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacbMacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYaddfdfdfdAdfdfdgdvdwdwdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydxdxdxdydydxdxdycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLacacacacacacacacacacacaWacacacacacacacacacacacdzdzdzdzdzacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacacacafafafdpdpafafdpafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYdedBdfdfdCadadaddwdldldlcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydydxdxdydxdxdxdydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFalaMaMaDaIaNaJaOaQaPaIaRaIaSaIaIaFacacacacacacacacacacaTdzaGacacacacacacacacacacacacacacacacaVacafafafafafafafafafafafafacacacaWacacacacacacaLacaXacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacaFaFaYaZaZaZbaaIaIaJbbbdbcaIbeaIbfaIbgalacacacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafacacacaWacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacalbibhbjaZaZbkblaDbmaIaJbnbpboaIbqaIbeaIbralacacacacacacacacacdzdzdzacaWacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbsbkaZaZaZbkaZbtaDbvbubxbwbybwbwaIaIbzaIbAalacacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbBaZbCbEbDbGbFblaDbvbHbJbIbLbKbwaIaIaIaIaIalacacacacacacacacdzdzdzacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalbObQbPaDbRbTbSbUaDbVbPaDbWbYbXbZaDcbcaccccalacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacaLacacacacacacacacacacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalcdcebVaDbUbUbUbUcfcecgaDchchcichaDcbcbckcjaFacacacacacacacacdzdzacacacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaWacacacacacacacacacacacacacalaDcfaDaDbUclbUbUaDcdbOaDchchchchaDcmcbcbcnaFacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacaFbUcpcoclcqcrbUbUaDaDaDaDchchchchcsckcbcbctaFacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcucvclbUaDcxcwaDchchchchaDcmcbcbcyaFacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacaWacacacacacaFbUbUbUbUclbUcpcAczcCcBaDchchcDchaDcbcbcbcEaFacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcpbUcFbUaDcdbOaDcGbZbXbYaDcbcHcIcIalacacacacacacacdzdzacacacacaVacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacalaDaDaDcJaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacdzdzacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaKaIaIaIaIaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIalacacacacacacdzdzdzacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaIaIcKcKaIcKaIaIaIaIaIaIaIaIaIaIaIaIaIaIalacacacacacacdzdzacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLaLacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaVacacacacacacacacacacalalaFaFaFaFaFaFalalaDcLaDcLaDalalalalalalalalacacacacacacdzdzacaWacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacdzdzacacacacacacacacacaWacacacacacafafafafafafafafafafafafafafafafafacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalcLalcLalacacacacacacacacacacacacacacdzdzdzacacacacacacacacacacacaWacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacaccMacacacaccPcPcPcPcPacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacaVacaccOdzdzdzcOacacacacacacacacacacacaWacacacaUdzdzacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacacacacacaccPcPcScRcTcPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacaccMacacacacacacdzdzdzacacacacacacacacacacacacacacacacaWdzdzacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccPcPcPcRcUcRcRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacacdzdzdzdzacacacacacacacaWacacacacacacacacdzdzacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccWcRcRcRcRcRcRcXcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYcZcZcYcYcZcYadcYcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaccMcVdacVcMacacacdzdzdzdzdzacacacacacacacacacacacacacaWacacdzdzdzacacacacacbMacacacacafafafafafafafafafafafacacacacacacacbMacacacacacacacacacaLaLaLaLcPcPcPdbcRdccRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddddfdededgdedhadcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacdzdzacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacaVacacacaLaLaLaLacaccPcPcRcRdicPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdjdgdedfdfdfdkcYcYadadadcNdldldldldldldmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacaccMacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacaWdzdzacacacacacacdzdzdzdzafafafafafafafafafafafacacacacacacbMacacbMacacacacacacacaLaLaLaLacacaccPcPcPcPcPacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdgdfdedfaddfdedeaddfdfdnaddldldldocNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdpdpafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddfdededfaddfdedgdfdfdfadaddlcNcNcNcNcNcNcNcNcNcNcNdldldldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpdpafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdededgdfdfdfdfdfdfdgadaddldlcNcNcNcNcNcNcNcNcNcNcNdldldldldqdqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacaLaLaLaLacacacacaWacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpdpdpafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdrdfdfdfdfdtdsaddgduaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacacacacacacacacaWacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpafafafafafafafafafacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdrdfadadaddfdgaddvdwaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdxdxdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacaWacacacacacacacacacacaWacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacafdpdpafafafafafafafafacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacbMacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYaddfdfdfdAdfdfdgdvdwdwdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydxdxdxdydydxdxdycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLacacacacacacacacacacacaWacacacacacacacacacacacdzdzdzdzdzacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacacacafafafdpdpafafdpafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYdedBdfdfdCadadaddwdldldlcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydydxdxdydxdxdxdydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafdpdpafafafacacacaWacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacbMacacbMacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdEdededfdCaddldldldldldldldldlcNcNdldmdDdDdDdDdDcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNdydydydydydxdxdydldqdldFdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafdpdpafafacacacacacacacacaWacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddGdededHadaddldldmdldldldldqdlcNcNdldDdDdDdDdldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdydydxdydydycNcNdldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacaWacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedgcYdfaddldldldldldldldldldlcNcNdldDdDdDdDdldldldldldldldlcNcNcNcZcZcZcZcZcZcZcNdydxdxdydycNcNcNdldldDdDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafdpdpdpdpdpacacacacacacacacacacacaLaLacacacacacacacacaWacacacacacaWacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdIdeaddfaddldldldldodldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdJdKcZdMdLcZcNdxdxdycNcNcNcNcNdldldDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafdpdpdpdpdpaUaUacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedeadadcYcNdldldldldldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdNdJdOdQdQdPdydydydldlcNcNdldldldDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacbMacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafdpdpdpdpaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddededRcZcYcNcNcNcNdldldldldldldldldldDdDdDdlcNdldldodldldlcNcNcNcNcZdSdUcZdQdPdTdydydldldlcNcNdldldmdDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafdpdpdpaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddedgdecZcYcNcNcNcNdldldldldldldodldDdDdDdDdlcNdldldldmdldlcNcNcNcNcZcZcZcZdVcZcZcNcNdldldldldldqdldldDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafafafafafafaUaUaUaUaUaUaUaUacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldqdldldldldldldDdDdDcNcNcNdldldldldldldldlcNcNcNcNcZajajajcZcNcNdqdldldldldldldldldldldlcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacaUaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldldldldldldldldDdDcNcNcNcNcNdldldldldldldldldldlcNcZajajdXcZcNcNdldldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLaLacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcYdededYcZcNcNcNcNdldldldldqdldldldDdDcNcNcNcNcNdldldldldldldldlduadcYcZajajdZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacaUaUaUaUaUaUaUacacacacacacacacacacacacacacacbMacacbMacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYebeacYdedgcZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlecdfecajajdXcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafacacacacacaUaUaUaUaUaUaUacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYeeedcYdedecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldldldlduadefcZcZcZcZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLacacacacacdzdzdzdzdzdzacacacacacacacacacacaVacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacaUaUaUaUaUaUacacacacacacacacacacdWacacacacacacbMacacbMacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYdfdfdededecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNdldldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacbMacacbMacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZdfegdfdfdecZcNcNcNcNehehehehehehehcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNdldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZcZcZcZcZcZcZcNcNcNcNehehejeieieiehcNcNcNcNcNcNcNcNcNcNdldFdldldldDdldldldlcNcNdldldldldldldldldldldldldlcNdldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacbMacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieheieiehehcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdDdldlcNcNdldldldmdldldldldldldldldldldldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafacacacacbMacacacacacacekaUaUacaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieheheheheleheienemehcNcNcNdDeoesepdldqdqdldldDdDdldldldldldldldldldlcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacbMacacbMacacacdzdzdzdzdzdzacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUacacaUacacacacacacacacacaWacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNejereicNcNeheheheieneiehcNcNcNdDeoesepdldqdqdldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeheheteueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacaWacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacbMacacbMacacacacacaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheieicNcNcNcNehejeheqeheqdDdDeoeoevdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNeqeqeqeheheheweheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUacaUacacacacacacacaWacacacacacacacacacaWacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieieicNcNcNcNehereierehexeodDeoeocNcNcNcNcNdldldldldldldmcNcNcNcNcNcNcNcNcNcNcNcNcNdldldmdlcNcNcNcNcNcNcNcNeqeyehehcNeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacaUacacacacacacacacacacacacacacaWacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeherejehehcNcNcNcNeheiereieqexeodDepepcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehewehehehehehcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacaUacacdWacacacacacaLacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieiehehehehcNcNcNcNcNcNcNcNdDdDdldlcNcNcNcNcNdldldldDdDdldlcNcNcNcNeqeqeqcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehehehehehezeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbMacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNehehehehehelehcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNeqeAeheheqcNcNcNcNcNcNcNdldodlcNcNcNcNcNeqeBeheheqeqeqeqeheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNejeieieieieCeiehcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldydlcNcNcNcNeDeheqeheDcNcNcNcNcNcNcNdldldlcNcNcNcNcNeqeEehehdDdDdDeheqeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaVacacacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheiereieheieieieicNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNeqeheweFeqeqeqeqcNcNcNcNdldldlcNcNcNcNcNeqehehdDdDdDdDeheqeGcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheheheheheieicNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNeqeqeFeFeHeheIeqcNeqeqdldldlcNcNcNcNcNcNeqeqeqeqeJeJeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheieiejeieCeheieheheiereieicNcNcNcNcNcNdxdydydycNcNcNcNcNcNeDeheqehdDeheqeqeheJdldlcNcNcNcNcNcNcNcNcNdlevevevcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafacacacacafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacaUacaUaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheKeheheheheqeieieLeheheMeieieCcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNeDeqeheweheheheheJdmdocNcNcNcNcNcNcNcNdldldodlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLaLacacacacacacacacacacacacacacdzdzdzdzdzacacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacaUacacacaUacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieiehehcNcNcNcNcNcNcNcNcNcNdydydydydydydycNcNcNcNcNcNeqeqeqeqeqeheqdlcNcNcNcNcNdldldldldldldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafdpdpdpdpdpdzdzacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedeadadcYcNdldldldldldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdNdJdOdQdQdPdydydydldlcNcNdldldldDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacbMacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafdpdpdpdpdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddededRcZcYcNcNcNcNdldldldldldldldldldDdDdDdlcNdldldodldldlcNcNcNcNcZdSdUcZdQdPdTdydydldldlcNcNdldldmdDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafdpdpdpdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddedgdecZcYcNcNcNcNdldldldldldldodldDdDdDdDdlcNdldldldmdldlcNcNcNcNcZcZcZcZdVcZcZcNcNdldldldldldqdldldDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafafafafafafdzdzdzdzdzdzdzdzacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldqdldldldldldldDdDdDcNcNcNdldldldldldldldlcNcNcNcNcZajajajcZcNcNdqdldldldldldldldldldldlcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacdzdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldldldldldldldldDdDcNcNcNcNcNdldldldldldldldldldlcNcZajajdXcZcNcNdldldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLaLacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcYdededYcZcNcNcNcNdldldldldqdldldldDdDcNcNcNcNcNdldldldldldldldlduadcYcZajajdZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacbMacacbMacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYebeacYdedgcZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlecdfecajajdXcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafacacacacacdzdzdzdzdzdzdzacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYeeedcYdedecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldldldlduadefcZcZcZcZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLacacacacacdzdzdzdzdzdzacacacacacacacacacacaVacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacdWacacacacacacbMacacbMacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYdfdfdededecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNdldldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacbMacacbMacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZdfegdfdfdecZcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNdldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZcZcZcZcZcZcZcNcNcNcNdldleiepepepdlcNcNcNcNcNcNcNcNcNcNdldFdldldldDdldldldlcNcNdldldldldldldldldldldldldlcNdldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacbMacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepdlepepdldlcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdDdldlcNcNdldldldmdldldldldldldldldldldldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafacacacacbMacacacacacacdzdzdzacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepdldldldlejdlepekemdlcNcNcNdDeoesepdldqdqdldldDdDdldldldldldldldldldlcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacbMacacbMacacacdzdzdzdzdzdzacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzacacdzacacacacacacacacacaWacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeierepcNcNdldldlepekepdlcNcNcNdDeoesepdldqdqdldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeheheteueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacaWacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacbMacacbMacacdWacacdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlepepcNcNcNcNdleidleqdleqdDdDeoeoevdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNeqeqeqehehdldoeheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzacdzacacacacacacacaWacacacacacacacacacaWacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepepepcNcNcNcNdlereperdleseodDeoeocNcNcNcNcNdldldldldldldmcNcNcNcNcNcNcNcNcNcNcNcNcNdldldmdlcNcNcNcNcNcNcNcNeqeyehehcNeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacdzacacacacacacacacacacacacacacaWacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlereidldlcNcNcNcNdleperepeqeseodDepepcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehdodlehdldlehcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacdzacacdWacacacacacaLacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepdldldldlcNcNcNcNcNcNcNcNdDdDdldlcNcNcNcNcNdldldldDdDdldlcNcNcNcNeqeqeqcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehdldlehdldFdleheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbMacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlejdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNeqeAeheheqcNcNcNcNcNcNcNdldodlcNcNcNcNcNeqeBeheheqeqeqeqdldleheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeiepepepepelepdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldydlcNcNcNcNeDdleqeheDcNcNcNcNcNcNcNdldldlcNcNcNcNcNeqeEehehdDdDdDeheqeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaVacacacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleperepdlepepepepcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNeqdldoeFeqeqeqeqcNcNcNcNdldldlcNcNcNcNcNeqehehdDdDdDdDeheqeGcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlepepcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNeqeqeFeFeHeheIeqcNeqeqdldldlcNcNcNcNcNcNeqeqeqeqeJeJeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlepepeiepeldlepdldleperepepcNcNcNcNcNcNdxdydydycNcNcNcNcNcNeDeheqdldDeheqeqeheJdldlcNcNcNcNcNcNcNcNcNdlevevevcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafacacacacafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacdzacdzaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliOdldldldleqepependldlewepepelcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNeDeqdldoeheheheheJdmdocNcNcNcNcNcNcNcNdldldodlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLaLacacacacacacacacacacacacacacdzdzdzdzdzacacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacdzacacacdzacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepepdldlcNcNcNcNcNcNcNcNcNcNdydydydydydydycNcNcNcNcNcNeqeqeqeqeqeheqdlcNcNcNcNcNdldldldldldldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacaWacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqcNcNcNcNcNcNcNdldldldmdldldodldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacaUaUaUacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldqdldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacaUaUaUacacacacacacacacaLacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNdldldldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacaWacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacaUacaUaUaUacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqcNdldldydydydydycNcNcNcNcNcNdldldldldldDdDdldldldldlcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacacacacaLacacacaWacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacaUaUaUacacacaLacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeOeNePeqeheqeqeqeqdldydydydycNcNcNcNcNcNdmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLaLaLaLacacacacacdzdzdzdzdzdzafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheheheqeFdldldydxdycNcNdydldldldldldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLacacacacacacdzdzdzdzdzdzdzafafafafafafafafafafafafafafafafacaLacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeFeqeqeheQeheFeFdldldydydydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacafafafafafafdzdzdzdzdzafafafafafafafafafafafafacacacacacacacacacacacacacacacaWacacacacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheweheqeheheqeqeqdldldldldydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafafafacacacacacacaaaaaaaaaaaaacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheweqeheheheheqcNcNcNcNdldldqdldDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafdpdpdpdpdpafafafafafacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacacafafafafafafafafafafafafafacacacacaUaUaUaUacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNeqeheheheheheqeqcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLacafafafafafafafafafafafafafacacacacaUaUaUaUacacacacacacacacacacaceSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNeqeqeQeheheqeqeqcNcNcNcNcNdldldDeUdDdDdldldDdldleqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacaUaUaUaUacacacacacacacacacaLaceSeSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNeqeqeqcNcNcNcNdldldldldDdDdDdDdDdldldldldleFeFeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzdzacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacacaUaUaUaUacacacacacacacacacaceSeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldDdDdldDdldldldlcNcNcNcNcNcNcNcNcNcNdldqdldldDdDdDdDdDdldldldleveFeFeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdydldldDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafafafafdpdpdpaUaUacacacacacacacacacaaaaeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDcNcNcNdleqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNdydydydldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacaWacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafafafafafafafafafafafdpdpdpdpaUaUacacacacacacacacacaaaaeSeSeSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdldldqdldlcNcNcNcNcNcNcNcNcNcNdmdldDdDdDdDdDdlcNcNcNcNdldleqeheheheheweheqeqcNcNcNcNdldldlcNcNcNcNdldydydydldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafacacacacacaVdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafdpdpdpdpdpacacacacacacacaLacacacaaaaaaeReSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNdldldldDeUdDdDdDdldlcNcNcNeqeqeqeqeqeheheheheheheqcNcNcNcNdleVdlcNcNcNcNcNdydydycNdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafdpdpdpdpdpafacacacacacacacacacacafaaaaaaeReSeSeTeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdldlcNcNcNcNcNdmdldldlcNcNcNcNcNcNcNcNdldldldDdDcNcNcNcNcNcNcNcNeqeqeWeqeqeqeqeheheheheqeqcNcNcNdldldldldlcNcNcNdydxcNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacafaaaaaaeReTeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqeheheheheheheheheheheheheGeqcNcNcNcNcNdldlcNcNdydydycNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacacdzdzdzdzdzacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafacacacafafaaaaaaeReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehehehehehehezeheheqcNcNcNcNcNdldlcNcNdydydycNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacacdzdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaceXaaaaaaaaaaaaaaaaaaaaaaaaacacaLacacacacacacacafafafdpdpdpdpdpafafafafafafafafafafafafafafafaaaaaaeReReReSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNeqeqeheheheheweheheheqeheheqcNcNcNcNcNcNdldmdldldydycNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaaaaaaaeYacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafafdpdpdpdpdpafafafafafafafafafafafafafafafafaaaaaaeReReReSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheqeheheheqdlcNcNcNcNcNcNdldFdldxcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldqdldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacdzdzdzacacacacacacacacaLacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNdldldldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacaWacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacdzacdzdzdzacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqcNdldldydydydydycNcNcNcNcNcNdldldldldldDdDdldldldldlcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacacacacaLacacacaWacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacdzdzdzacacacaLacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeOeNePeqeheqeqeqeqdldydydydycNcNcNcNcNcNdmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLaLaLaLacacacacacdzdzdzdzdzdzafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheheheqeFdldldydxdycNcNdydldldldldldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLacacacacacacdzdzdzdzdzdzdzafafafafafafafafafafafafafafafafacaLacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeFeqeqdlexeheFeFdldldydydydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacafafafafafafdzdzdzdzdzafafafafafafafafafafafafacacacacacacacacacacacacacacacaWacacacacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqehdodleqdldleqeqeqdldldldldydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafafafacacacacacacaaaaaaaaaaaaacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqdldoeqeheheheheqcNcNcNcNdldldqdldDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafdpdpdpdpdpafafafafafacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacacafafafafafafafafafafafafafacacacacdzdzdzdzacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNeqehdldldleheqeqcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLacafafafafafafafafafafafafafacacacacdzdzdzdzacacacacacacacacacacaceSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNeqeqexdleheqeqeqcNcNcNcNcNdldldDeUdDdDdldldDdldleqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacdzdzdzdzacacacacacacacacacaLaceSeSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNeqeqeqcNcNcNcNdldldldldDdDdDdDdDdldldldldleFeFeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzdzacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacacdzdzdzdzacacacacacacacacacaceSeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldDdDdldDdldldldlcNcNcNcNcNcNcNcNcNcNdldqdldldDdDdDdDdDdldldldleveFeFeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdydldldDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafafafafdpdpdpdzdzacacacacacacacacacaaaaeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDcNcNcNdleqeqehdldleheheqeqcNcNcNcNcNcNcNcNcNcNcNcNdydydydldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacaWacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafafafafafafafafafafafdpdpdpdpdzdzacacacacacacacacacaaaaeSeSeSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdldldqdldlcNcNcNcNcNcNcNcNcNcNdmdldDdDdDdDdDdlcNcNcNcNdldleqehehehdldodleqeqcNcNcNcNdldldlcNcNcNcNdldydydydldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafacacacacacaVdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafdpdpdpdpdpacacacacacacacaLacacacaaaaaaeReSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNdldldldDeUdDdDdDdldlcNcNcNeqeqeqeqeqehehehdldleheqcNcNcNcNdleVdlcNcNcNcNcNdydydycNdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafdpdpdpdpdpafacacacacacacacacacacafaaaaaaeReSeSeTeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdldlcNcNcNcNcNdmdldldlcNcNcNcNcNcNcNcNdldldldDdDcNcNcNcNcNcNcNcNeqeqeWeqeqeqeqehdldleheqeqcNcNcNdldldldldlcNcNcNdydxcNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacafaaaaaaeReTeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehehehehdldleheheGeqcNcNcNcNcNdldlcNcNdydydycNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacacdzdzdzdzdzacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafacacacafafaaaaaaeReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehdldldldldldFdleheqcNcNcNcNcNdldlcNcNdydydycNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacacdzdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaceXaaaaaaaaaaaaaaaaaaaaaaaaacacaLacacacacacacacafafafdpdpdpdpdpafafafafafafafafafafafafafafafaaaaaaeReReReSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNeqeqehehehehdodleheheqdldleqcNcNcNcNcNcNdldmdldldydycNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaaaaaaaeYacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafafdpdpdpdpdpafafafafafafafafafafafafafafafafaaaaaaeReReReSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheqehehdleqdlcNcNcNcNcNcNdldFdldxcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafdpdpdpdpdpafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeZcNcNcNcNdldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqfaeheheheheqeFeFeFeqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUdpdpdpdpafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNdqdldlcNcNcNcNdldldldldldldldlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehfbeqeqeveveqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacdzdzdzdzdzdzacacacacacacacaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUdpdpdpafafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNdldldDdDdlcNcNdldldldldqdldmdlcNcNcNcNcNdqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqcNdldldldlcNcNcNcNcNcNcNcNdldldldldqdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacaLacadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaUaUaUaUaUaUacafafafafafafafafafafafafafafafafafafaaaaaaeReReReReTfceReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdDdDdDcNcNdldldldldldldldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacacaceffdfffefhfgfhcZfjfifladacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaUaUaUaUaUaUacacacacacafafafafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldlcNcNcNadfmfmadadadadadfnadfodldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzdzacacacacefdSfpcZfqfhfsfraoftfuadacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUaUaUaUaUacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdlcNcNcNcZfmfmfmfvfvfvfwfvfwdldlfxcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacadadcZadfyadadcZfAfzfBadaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacaUaUaUaUaUaUacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdldlcNcNcZfvfmfmfvfvfvadfnadfodldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacacfCadfDajfEajadadadadadaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacafafafafafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleFcNfFfvfvfvfvfvfvaddldldldldldlcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacfGacfDfDfDajfHadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaUacaUaUaUacaUacacacacacacacacacacacacacacacafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFeFfFadfIadadadadadfFfvdldDdldlcNcNcNcNcNcNdldldldldldldqdldldlcNcNcNcNcNdldldlfxdldldldDdDdldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzdzacacacfJfKfDfMfLfNadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaUacaUaUaUacaUacacacacacacacacacacacacacacacafafaaaaaaaaaaeReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFfOdQdQfvfmfmfvfvfvfmdldldldldlcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNeqeqeqeqeqeqeqdldldldDdDdldldldldqdldldmdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbMacacacacacacacdzdzdzdzdzdzdzfPadeffQcZfDdfdffRadacacacaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaUacaUacaUacacacacacacacacacacacacacacacacacacafaaaaaaaaaaeReReSeSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNadfSdQfvfFfvfmfvfvfFdldldldldlcNcNcNcNcNcNcNcNcNdldldlfxdldlcNcNeqeqeqeqdydxdydyeqdldldDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzecdfdfecajajajfTadacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacaUacaUacaUacacacacacacacacacacacacaLacacacafafaaaaaaaaeReReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZdQfvdQadfvfvfvfvadadadaddldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqeqeqeIehdydydyezeheqdDdDdDdDdDdDdDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdpdpdpdpafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNdqdldlcNcNcNcNdldldldldldldldlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehfbeqeqeveveqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacdzdzdzdzdzdzacacacacacacacaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdpdpdpafafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNdldldDdDdlcNcNdldldldldqdldmdlcNcNcNcNcNdqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqcNdldldldlcNcNcNcNcNcNcNcNdldldldldqdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacaLacadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacdzdzdzdzdzdzacafafafafafafafafafafafafafafafafafafaaaaaaeReReReReTfceReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdDdDdDcNcNdldldldldldldldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacacaceffdfffefhfgfhcZfjfifladacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldlcNcNcNadfmfmadadadadadfnadfodldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzdzacacacacefdSfpcZfqfhfsfraoftfuadacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdlcNcNcNcZfmfmfmfvfvfvfwfvfwdldlfxcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacadadcZadfyadadcZfAfzfBadaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacdzdzdzdzdzdzacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdldlcNcNcZfvfmfmfvfvfvadfnadfodldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacacfCadfDajfEajadadadadadaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacafafafafafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleFcNfFfvfvfvfvfvfvaddldldldldldlcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacfGacfDfDfDajfHadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzacdzdzdzacdzacacacacacacacacacacacacacacacafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFeFfFadfIadadadadadfFfvdldDdldlcNcNcNcNcNcNdldldldldldldqdldldlcNcNcNcNcNdldldlfxdldldldDdDdldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzdzacacacfJfKfDfMfLfNadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzacdzdzdzacdzacacacacacacacacacacacacacacacafafaaaaaaaaaaeReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFfOdQdQfvfmfmfvfvfvfmdldldldldlcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNeqeqeqeqeqeqeqdldldldDdDdldldldldqdldldmdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbMacacacacacacacdzdzdzdzdzdzdzfPadeffQcZfDdfdffRadacacacaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacdzacdzacdzacacacacacacacacacacacacacacacacacacafaaaaaaaaaaeReReSeSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNadfSdQfvfFfvfmfvfvfFdldldldldlcNcNcNcNcNcNcNcNcNdldldlfxdldlcNcNeqeqeqeqdydxdydyeqdldldDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzecdfdfecajajajfTadacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacdzacdzacdzacacacacacacacacacacacacaLacacacafafaaaaaaaaeReReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZdQfvdQadfvfvfvfvadadadaddldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqeqeqeIehdydydydFeheqdDdDdDdDdDdDdDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzfPadefefadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaWacacacaLacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfvfmfvfIfUfUfUfUfUfWfVfndldqdldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehdyeheheheqdDdDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacaaaaaaeReReReReRaaaaaaaaacacacacacacacaWacacacacacacacaUacacacacacacacacacacacacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfXfZfYadfUfUfvfvfvfUgafndldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacdzdzdzdzdzdzdzcMacacacacgbadadadacacacaaaaaaeReReReSeRaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacaaaaaaaaeReSeTeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZcZcZcZadadadfvfFfvadadaddldldldDcNcNcNcNcNcNcNcNcNcNdldlcNcNeqdydyehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacgcaiadacacacaaaaaaeReReSgdeRaaaaaaacacacacacacacacacacacaWacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldqdldldldldldldldlcNcNeqdxdydyezehehehehdDeqdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacacdzdzdzdzdzdzacacacacacacgeadadadacacaaaaaaaaeReReTeSeRaaaaaaacacacacacacacacacacacacacacacaUacacacacacacacacacacacacacacacacacacacacacacacacacacacafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldmdldldldldldldldldldlcNcNcNcNeqdxdyehehehehehdDdDdDdDdDdDdDeqdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacaaaaaaeReReReReRaaaaaaaaacacacacacacacaWacacacacacacacdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfXfZfYadfUfUfvfvfvfUgafndldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacdzdzdzdzdzdzdzcMacacacacgbadadadacacacaaaaaaeReReReSeRaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacaaaaaaaaeReSeTeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZcZcZcZadadadfvfFfvadadaddldldldDcNcNcNcNcNcNcNcNcNcNdldlcNcNeqdydyehdldlehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacgcaiadacacacaaaaaaeReReSgdeRaaaaaaacacacacacacacacacacacaWacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldqdldldldldldldldlcNcNeqdxdydydFdlehehehdDeqdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacacdzdzdzdzdzdzacacacacacacgeadadadacacaaaaaaaaeReReTeSeRaaaaaaacacacacacacacacacacacacacacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldmdldldldldldldldldldlcNcNcNcNeqdxdyehehehehehdDdDdDdDdDdDdDeqdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacdzdzdzdzdzacacacacacacacggacacacacacaaaaaaaaeRgheSeSeRaaaaaaacacaWacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeWeqdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacaaaaaaaaeReSeSeSeRaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNeqeqeqeqeheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeqeqeqdDdDdDeqdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacaaaaaaeReSeSeSgfeReRaaaaaaacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNeqeheIeqeheheheheqeqeqeqeqeqeqeqeqcNcNcNcNcNdldldldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaLaLacacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReSeSeSeTeReRaaaaaaacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldmdldldldleqehgieqehdxehehehdxdxdDeheheheheheqeqeqcNcNdldldldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaLaLaLacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReTeTeSeTeReRaaaaaaaaaaacaLacacacaWacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldqdlcNcNdldldDdldleqeheheqdxdxdxehdxdDdDdDdDdDdDeheheheheheFevdldqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacdzacdzacacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReRaaaaaaaaaaacacacacacacacacacaWacacacacacacacacbMacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldydldldldldlcNcNdldldldldleqeheheqdxdxdxdxdxdxdDehdDdDdDeheheheheheFevdldldldldldDdDdDdldldldDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacdzdzacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReReRaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNcNcNdldldldldqevehehehehehehdxdDdDehehehdDeheweheheheqeqcNdldldldldldDdDdldldldldldldldldldDdDdDdldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaLaLaLacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReTeTeSeTeReRaaaaaaaaaaacaLacacacaWacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldqdlcNcNdldldDdldleqeheheqdxdxdxehdxdDdDdDdDdDdDehdldldldlevevdldqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacdzacdzacacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReRaaaaaaaaaaacacacacacacacacacaWacacacacacacacacbMacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldydldldldldlcNcNdldldldldleqeheheqdxdxdxdxdxdxdDehdDdDdDdldldldldlevevdldldldldldDdDdDdldldldDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacdzdzacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReReRaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNcNcNdldldldldqevehehehehehehdxdDdDehehehdDdldodleheheqeqcNdldldldldldDdDdldldldldldldldldldDdDdDdldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacacacacacacacacbMacacacacacacacaaaaaaaaeReReSeSeSeReReRaaaaaaaaaaacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNdlevehdydxeheheheheqeqeqeqeqeqeqehehehgjeqcNcNcNdldldldldDdDdldldldldldldldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzacdzacacacacacacacacacacacacacacaaaaaaaaaaeReSeSeSeSeSeRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqdydydyehehehehglehehehehgmeqeqeqeqeqcNcNcNcNcNdldldldldldldldqdldldldlfxdldldldldDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeSeSeRaaaaaaaaaaaaaaaaacacacacacacaWacacacacaLacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdycNcNcNcNcNcNcNcNcNcNcNcNcNeqgkgkeqeqeheheheheqeqeqeqeqeqcNcNcNcNcNcNcNcNcNdldqdldldDdldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzacdzacacacacacacacacacacacacacacaaaaaaaaaaeReSeSeSeSeSeRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqdydydyehehdldlfxehehehehgmeqeqeqeqeqcNcNcNcNcNdldldldldldldldqdldldldlfxdldldldldDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeSeSeRaaaaaaaaaaaaaaaaacacacacacacaWacacacacaLacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdycNcNcNcNcNcNcNcNcNcNcNcNcNeqgkgkeqeqehdldleheqeqeqeqeqeqcNcNcNcNcNcNcNcNcNdldqdldldDdldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaacacacacacacdWacacacaLaLacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydycNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaeReSeTeSeReRaaaaaaaaaaaaaaaaacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaWacacacacacacacacacacacacacacacaWacacacaWacacaaaaaaaaaaaaaaaaaaeReSeSeSeReRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldqdldycNcNcNcNcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNdldldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab @@ -855,27 +851,27 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLacacacacacacacac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLacacacacacacacacacacacacaLacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReReReSeTeReReReSeSeRaaaaaaaaaaacacacacacdzacacacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaLaLaLacacacacacacacacacacacacaLaLacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReTeSeSeSeReReSeSeSeRaaaaaaaaaaacacacacacdzacacacacdzacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLaLacacbMacacacacacacacacacaLaLaLacacacacbMacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReTeSeSeReReSeSeSeReRaaaaaaaaaaacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNdldldldqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLacacacacacacacacacacacacacacaLaLaLacacacacacacacacacacaaaaaaaaaacZcZcZcZcZcZaddfgrgrgrgsaddfdfcZcZaaaaaaaaaaaaacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacbMacacbMacacacaaaaaaaaaacZfjgugtgwgvadgrgrgxfkgrgrdfgzgycZaaaaaaaaaaacacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeheheheqevdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldldqdldldlcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacaaaaaaaaaacZgAaoguaoaoadgrgrdfgrdfgzdfgCgBcZaaaaaaaaaaacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeteheheheFeFevdDdDdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaoaoaoaofrgrgrgzgzgzgzgEgzgFcZaaaaaaacacacacacdzdzdzdzdzacdzacacacacacacacacacdWacacacacacacacacacacacaWacacacacdWacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeteheheheFeFeqdDdDdDdDdDdDdldldqcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaogGaoaoaddfgzdfgzgzgzgzgzgHcZaaacacacaccMacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqehgleheheqdldDdDdDdDdDdldldlcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZaoaoaoaoaoadgIgzgzadadgJadadcZcZcZadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqeheheheheqeqdDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaVacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaacZgKgMgLfufuadgzgzgNaddXajajcZajajajadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqgOeheheheheheqdldldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLacacacacacacacacacacacacacacaLaLaLacacacacacacacacacacaaaaaaaaaacZcZcZcZcZcZadezeCeCeCeKadezezcZcZaaaaaaaaaaaaacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacbMacacbMacacacaaaaaaaaaacZfjgugtgwgvadeCeCeCfkeCeCezgzgycZaaaaaaaaaaacacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeheheheqevdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldldqdldldlcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacaaaaaaaaaacZgAaoguaoaoadeCeCezeCezgzezgCgBcZaaaaaaaaaaacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeteheheheFeFevdDdDdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaoaoaoaoeLeCeCgzeMgzgzgEgzgFcZaaaaaaacacacacacdzdzdzdzdzacdzacacacacacacacacacdWacacacacacacacacacacacaWacacacacdWacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqetehdleheFeFeqdDdDdDdDdDdDdldldqcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaogGaoaoadezgzezgzgzgzgzgzgHcZaaacacacaccMacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqehfxdleheqdldDdDdDdDdDdldldlcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZaoaoaoaoaoadgIgzgzadadgJadadcZcZcZadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqdldleheheqeqdDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaVacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaacZgKgMgLfufuadgzgzezaddXajajcZajajajadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqgOeheheheheheqdldldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZcZcZcZcZcZcZgsgPcZcZgQajajcZajajajadacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldleqehehehehehfaeqeqdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgRgScZgTgSadgUgUgVcZgWajajgXajajajadamadgYdzdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldleqeqeheheheqeheheheqcNcNdldDdDcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdlcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZcZdJgZadgUgUgUadhahchbcZhdajdXhedfhedzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeqeheheheheheqeheheheheqeqeqdDdDcNcNcNcNcNcNcNcNdydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacachfacacacaWacacacacacacacacacacacacacacacacacaaaaaaaacZfecZcZfecZadgrgUhgadhhhjhicZajajajadamadgYdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqeheheheheqeheqdldDdDcNcNcNcNcNcNcNdydydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeWeheFevdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacaaaaaaaacZhkhkhkhkhkhlgUdfgUadhmhhhncZcZadadadacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacaVacacacacacacacacacaWacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqehehgleheheheFeFeqdDdlcNcNcNcNdydydydydydxdxdxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheFevdmcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacdWacacacacdWacacacacacacacacacacaWacacacaaaaaaaacZfecZcZhoadadgUgrdfadhphphphpaaacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqeheheheheqeFeFevdldldldlcNcNdydxdydydycNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqehehehgleheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZadhrhqaddfgrgradaaaaaaaaaaacacacacacacacacacdzdzdzdzdzacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqehehgleheheheheheheheheqeqeqdldldldodldldldydydycNcNcNcNcNcNdldldldldodldlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaacacaLacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZhsgSadhrhrgrgrgrfkfkaaaaaaaaaaacacacacacacacacacdzdzdzdzdzaWacacacaWacacacacacacacbMacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheheqeqeqeqdleqeqdlcNdldldldqdldldydycNcNcNcNcNdldldldqdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNeqeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacachfacacacaWacacacacacacacacacacacacacacacacacaaaaaaaacZfecZcZfecZadgrgUhgadhhhjhicZajajajadamadgYdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqehehdleheqeheqdldDdDcNcNcNcNcNcNcNdydydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeWeheFevdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacaaaaaaaacZhkhkhkhkhkhlgUdfgUadhmhhhncZcZadadadacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacaVacacacacacacacacacaWacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqehehfxeheheheFeFeqdDdlcNcNcNcNdydydydydydxdxdxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheFevdmcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacdWacacacacdWacacacacacacacacacacaWacacacaaaaaaaacZfecZcZhoadadgUgrdfadhphphphpaaacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheheqehdleheheqeFeFevdldldldlcNcNdydxdydydycNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqehehdlfxeheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZadhrhqaddfgrgradaaaaaaaaaaacacacacacacacacacdzdzdzdzdzacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqehdlfxdldldldleheheheheqeqeqdldldldodldldldydydycNcNcNcNcNcNdldldldldodldlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaacacaLacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZhsgSadhrhrgrgrgrfkfkaaaaaaaaaaacacacacacacacacacdzdzdzdzdzaWacacacaWacacacacacacacbMacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehdldleheheheqeqeqeqdleqeqdlcNdldldldqdldldydycNcNcNcNcNdldldldqdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNeqeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaacacacacacaccPcXcRhtcRcRcRcRcWacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacaaaacZcZcZcZadgsgrgrfkfkfkaaaaaaaaaaaaacacacacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheheqeqeqeqdldldldlcNcNcNdldldldmdldldydycNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNdldldqdlcNcNcNcNcNcNcNcNcNcNeqehethueqeqeheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeTeSeReReRaaaaaaacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeEhveheteqeqdldldldldldldldlcNcNcNcNcNcNdldldldldlcNcNcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNeqeheheheqeqeheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacaLacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReReSeSeTeSeReReRaaaaaaaaaaaaacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqeqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheqeqeheheteqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaeReReSeSeTeSeSeReRaaaaaaaaaaaaacacacacacacacdzdzdzdzacacacacacacacacacacacacacdWacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqhxeheheqehehehehehhueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaeReReSeSeTeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldodldlcNcNcNcNcNcNcNcNcNcNcNeqeheheheheheheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaacacaVacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldlcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehehgleheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaeReReSeSeTeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldodldlcNcNcNcNcNcNcNcNcNcNcNeqehehehehehehdldleheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaacacaVacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldlcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehehfxdleheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzacaWacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNdldqcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheqeqeqeqeqeheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaeReReTeSeSeSeSeReRaaaaaaaaaaaaaaaaaaacacdzdzdzdzacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldldldodldlcNcNdldlcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeWeqeqeheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLacacacacacacacacacacacacacacbMacacacacacacacacaLacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaeTeTeSeSeTeReRaaaaaaaaaaaaaaaaaaacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNdldlcNcNcNcNcNcNdldldqdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeFeFeqeqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab @@ -902,15 +898,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacdWacacacacacacacacacacacacacacacacacdzac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzacacacacdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaeReReReReReSeSeSeSeSeReReReRaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldDdDdldlcNcNdldldldldldldldldleqeheFeFdldldldldqdldodldDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWacacacacacacacacaWacacacacacacacacacacacdzdzdzdzacdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaeReReReReReReSeSeSeSeSeSeReReReRaaaaaaaaaaacacacacacacacacbMacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdldldldleqeqeqeqeqeqdldldleqeheheqdleqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdldmdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReSeShCeSeSeSeSeReReRaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzacaWacacacacacacacacacacacacacadadadadadadcZaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldleveveqehehhIeqeqeqeqeqeqeheheqdldldldldldDdDdDdDdDdDdDdDdDdDdDdDdldldlcNcNcNdldldycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacacacacacacacacacaLacacacdzdzdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeSeSeReReRaaacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacachJgMgKaohKhLcZcZaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleveFeFehehglehehehehehehgleheheqdldldldldldDdDdDdDdDdldldldldldldldldldlcNcNcNdldldydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLaLacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeShHeSeSeSeSeSaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacachJaoaoaoaoaoaocZcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFehehehehehehehehehehehehhveqdlcNdldldldDdDdDdDdDdldldqdldldldldldldlcNcNcNcNcNdydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacacacacacacacacacaLacacacdzdzdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeSeSeReReRaaacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacachJgMgKaohKhLcZcZaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleveFeFehehfxdlehehehehehfxdleheqdldldldldldDdDdDdDdDdldldldldldldldldldlcNcNcNdldldydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLaLacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeShHeSeSeSeSeSaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacachJaoaoaoaoaoaocZcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFehehehdlehehehehehehdldlhveqdlcNdldldldDdDdDdDdDdldldqdldldldldldldlcNcNcNcNcNdydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeShDeSacacacacacacacacacaVacacacacaLacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacachJaoaoaoaoaoaohMcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheqeqeqeqeqeqeqcNcNdldldDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReSeSeSachNacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacadaoaoaoaoaoaofucZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheheqeheheheheqcNcNcNcNcNcNcNcNdldldDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReSeSacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacaccMacadcZcZcZcZhOajcZcZcZcZgheSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheqeqeheqeheheheqeqcNcNcNcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRhPacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacadajajajhQdfdfdfgNdfcZeSeShReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqhSeheheheheqeheheheteqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacacacaVacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacachNacdaacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacachJdXajajajdfdfgNgNgNfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeueheheqeheheqeqhTeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacachJdXajajdfhUdfgNfDfDfDeSeReReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeBeheheqehgleheqeqcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacaWacacacdzdzdzdzdzacacacacacachJdXajajajdfdfgNgNfDfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeIeheheheheheheqcNcNdldldldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhWhWhXhXhYhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacachJdXajajdfdfdfgNfDfDfDeSeReReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeBeheheqehfxdleqeqcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacaWacacacdzdzdzdzdzacacacacacachJdXajajajdfdfgNgNfDfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeIehehehdldleheqcNcNdldldldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhWhWhXhXhYhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacadajajajajajhZdfgNgNcZeReSeSeRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeFeqeqeqdlcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVibiaiaiaichVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLacacacacacacacacacacacacaWacacacacacacdzdzdzdzdzacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacaWacacacacacacacacacacacacdzdzdzdzdzdzdzfPadefefcZcZcZcZhOajcZcZcZcZcZeReSgheRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeFeqdldldldliddldldldldlcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlhVhVieiaiaiaifhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacaLaLacaWacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzecdfdfecigigihigigiiigigcZaaeReReSeRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeFdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNdldldlijhVhWiaiaiaiaikhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab @@ -918,22 +914,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdz aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaWacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacaLaLacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacdzacacacacadhhiocZigigigigigcZaaeReReShRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNdldlcNcNhVhWiaipiqiminhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacaWacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzacacacacadirhhisigigitigigcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNdldDdDdldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViuhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacivfJacacfJacacacacacacacacaLaLacacacacacacacacacacacacacacacacbMacacacacacdzdzacacacadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliddlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNdldDdDdldlhViwiwiwiwixhViziyiBiAiDiCizhViEiwiwiEhViFiwiwiwiwiFhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacaciGacacacacfGacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacdzaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdliHdldldldldldlhViwiwiwiwiwhViIiIiIiIiIiIiIhViwiwiwiwhViJiJiJiJiJiJhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacaLacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacdpiLiKiNiMacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacaUaUaUaUaUaUacgbadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldliOdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNehehehiPhViQiQiQhViRiwiwiwiwhViSiIiUiTiViIiIhViWiwiwiwhViXiXiXiXiXiXhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacaciYdzdziZdzacacaLacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacdpjadpdpdpjbiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaUaUaUjcaiadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldodldldldldldldldldlcNcNcNcNcNcNcNcNdxdxdydydydldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNehehehehehehjdjejejejdiwiwiwiwiwjfiIiIjhjgjhiIiIjfiwiwiwiwjiiwiwiwiwiwiwhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaccMacacacacacacjjjkjkjjaUacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjldpdpdpdpjmjmiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjnadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNcNcNcNcNcNdxdydydydydydldldldlcNcNcNcNcNcNcNcNdljoehehehehehehehehehjdjejejejdiwiwiwiwjphVjqiIjsjrjtiIjuhViwiwiwiwhVjviwiwiwiwjvhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLaLacacacacacacacacacacacacacaVacacacaciKjwjwiKaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjljxjyjmjAjzjBiNacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjCacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdldodldlcNcNcNcNcNdydydydydydydxdxcNdliddldlcNcNcNcNcNcNcNcNdlehehehehehehehehehiPhViQiQiQhVjEjDjFjFjGhVjqiIiIiIiIiIjHhViwiwiwiwhVhVhVjIjJhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacaciGacacacacfGacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdliHdldldldldldlhViwiwiwiwiwhViIiIiIiIiIiIiIhViwiwiwiwhViJiJiJiJiJiJhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacaLacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacdpiLiKiNiMacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacdzdzdzdzdzdzacgbadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldliOdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNehehehiPhViQiQiQhViRiwiwiwiwhViSiIiUeQiViIiIhViWiwiwiwhViXiXiXiXiXiXhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacaciYdzdziZdzacacaLacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacdpjadpdpdpjbiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzjcaiadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldodldldldldldldldldlcNcNcNcNcNcNcNcNdxdxdydydydldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNehehehehehehjdjejejejdiwiwiwiwiwjfiIiIjhjgjhiIiIjfiwiwiwiwjiiwiwiwiwiwiwhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaccMacacacacacacjjjkjkjjdzacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjldpdpdpdpjmjmiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjnadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNcNcNcNcNcNdxdydydydydydldldldlcNcNcNcNcNcNcNcNdljoehehehehehehehehehjdjejejejdiwiwiwiwjphVjqiIjsjrjtiIjuhViwiwiwiwhVjviwiwiwiwjvhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLaLacacacacacacacacacacacacacaVacacacaciKjwjwiKdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjljxjyjmjAjzjBiNacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjCacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdldodldlcNcNcNcNcNdydydydydydydxdxcNdliddldlcNcNcNcNcNcNcNcNdlehehehehehehehehehiPhViQiQiQhVjEjDjFjFjGhVjqiIiIiIiIiIjHhViwiwiwiwhVhVhVjIjJhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacaWacacacacacacacacacacacacacacacaciKjwjwiKacacacacacacacacacacacacacacacacacacacacacacacacacacacjKacacacacjLiNiNiNjMiNiNiNjNacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdDdldldlcNcNcNcNcNdydydydycNcNcNcNcNdldldlevcNcNcNcNcNcNcNcNdlehehehehehjodldldldldldldldlhVjPjDjFjFjGhVjQiIiIiIiIiIjRhVjviwiwjvhVhVhVjOjShVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacacacaWacacacacacacacacacacacacacacjjjkjkjjjjjjjTjTjjjjacacacacacacacacacacacacacacacacaWacacacacjUjKacacacacaciNjVjmjWiNacacacacacacacacacbMacacbMacacacacacacachfacacacacacdWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldldydycNcNcNcNcNcNcNcNcNcNcNevevdldldldldldldldlehehehdldldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjXiwhVhVhVhVhVjYiwhVhVhVkajZjZkbhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLaLacacacacacacacacacacacacacacacacacacdpdpdpdpkckckckckckckdacacacacacacacacacacacacacacacacacacacackeackeacacackfdpkhkgkiiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldydydxcNcNcNcNcNcNcNcNcNcNcNevdldldldDdDdldldldldlcNcNcNdldlhVkkkjkmklkkkjkmklkoknkphVkrkqktksiwiwiEiwiwhVkwkvkvkwhVhVkujZjZjSkykxhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLacacacacacacacacacacacacacacacacacfJacacacdpdpdpdpkckzkckckckAacacacacacacacacacacacacacacacacacacacackBacacacacdpdpkhkCkiiNacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldliOdldldldldDdDdDdldldldldldldldydydxcNcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNdldlhVjDkDkEkljDkDkEklkGkFkFhVkHkqkqkJiwiwiwiwiwhVkKkvkvkvhVhVkIjZjZkLhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLacacacacacacacacacacacacacacacacacacacacdpdpdpdpdpkckMkckckckckcdpacacacacacacacacacacacacacacacacacacacacackeacacdpdpkhjmkiiNacacacackNacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldDdldldodldldldldldydxcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNdldlhVkOklklklkOklklklkFkFkFhVhVhVhVhVkPiwhVhVhVhVkRkvkvkKhVhVkSkQkQkThVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacfJackUackUjjjjkckcjjjjjjjjjjjjjjkckzkcjjacaWacacacacacaLaLacacacacacacacacacacacacacackViNkhkWkXiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldodldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdlcNcNcNcNcNcNcNhVkFkFkFkFkFkFkFkFkFkFkFkFkZkYlblakFkFldlckZhVkKkvkvlehVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacfJacacacfCacacdpdpjjkckcjjlflhlglglhjjkckcdpjjacacacaWacacacaLaLacacacacacacacacacacacacdplikViNljjmkgiNdplkacacacacacacacacacacacacacacacacacacaVacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNhVkFllkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFlclnlmkFhVkvkvkvkKhVhVhVhVhVhVlplolrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacacacacacdpdpjjkckcjjlslslslsltjjkcdpacjjacacacacacacacacacacacacacacacacacacfCacacdplukglvjmjmjmlwjmdpdpjTacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNcNcNcNcNhVkOklklklkOklklklkFkFkFkFkFkFkFkFkFkFlylxlchVlzkvkvkvlAiwiwiwhVlplClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacackUacacacdplFlEkckclGlslslslslHjjlIdpacjjacacacacacacacacacacacacacacacacacacacjTlJjmlKjmlLjmjmlNlMjmjmdpiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbMacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNhVjDkDkEkljDkDkEklkGkFkFkFkFkFkFkFkFkFkFkFkFhVlzkvkvlOhViwiwiwhVlplClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacjjdplQdpdplFjjkckcjjlslslslsltjjdpacacjjacacacacacacacacacacacacacacacacacaclRiNiNiNiNiNiNlSkglTiNiNiNiNiNacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNcNcNcNhVkklUlVklkklUlVkllXlWkFkFlXlYmalZkFlXlWlWlZhVmbkvkvmchViRiwjphVmdlClClCmehVcNcNcNcNcNcNcNcNcNcNcNcNababababababab -aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacjjacacacjjlFdpdplFlFjjkckcjjltlhlglglhjjdpacacacacacacaLacacacacacacacacacacacacacaciNjmmfjmmgkViNjmjmkgiNkVkVcQmhacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjYiwhVhViwiwiwhVlClClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacacacaWacacacacacacacacacacacacacacjjjkjkjjjjjjjTjTjjjjacacacacacacacacacacacacacacacacaWacacacacjUjKacacacacaciNjVjmjWiNacacacacacacacacacbMacacbMacacacacacacachfacacacacacdWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldldydycNcNcNcNcNcNcNcNcNcNcNevevdldldldldldldldlehehhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjXiwhVhVhVhVhVjYiwhVhVhVkajZjZkbhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLaLacacacacacacacacacacacacacacacacacacdpdpdpdpkckckckckckckdacacacacacacacacacacacacacacacacacacacackeackeacacackfdpkhkgkiiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldydydxcNcNcNcNcNcNcNcNcNcNcNevdldldldDdDdldldldldlcNhVkkkjkmklkkkjkmklkkkjkmklkoknkphVkrkqktksiwiwiEiwiwhVkwkvkvkwhVhVkujZjZjSkykxhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLacacacacacacacacacacacacacacacacacfJacacacdpdpdpdpkckzkckckckAacacacacacacacacacacacacacacacacacacacackBacacacacdpdpkhkCkiiNacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldliOdldldldldDdDdDdldldldldldldldydydxcNcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdldlcNhVjDkDkEkljDkDkEkljDkDkEklkGkFkFhVkHkqkqkJiwiwiwiwiwhVkKkvkvkvhVhVkIjZjZkLhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLacacacacacacacacacacacacacacacacacacacacdpdpdpdpdpkckMkckckckckcdpacacacacacacacacacacacacacacacacacacacacackeacacdpdpkhjmkiiNacacacackNacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldDdldldodldldldldldydxcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNhVkOklklklkOklklklkOklklklkFkFkFhVhVhVhVhVkPiwhVhVhVhVkRkvkvkKhVhVkSkQkQkThVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacfJackUackUjjjjkckcjjjjjjjjjjjjjjkckzkcjjacaWacacacacacaLaLacacacacacacacacacacacacacackViNkhkWkXiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldodldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdlcNcNcNhVkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkZkYlblakFkFldlckZhVkKkvkvlehVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacfJacacacfCacacdpdpjjkckcjjlflhlglglhjjkckcdpjjacacacaWacacacaLaLacacacacacacacacacacacacdplikViNljjmkgiNdplkacacacacacacacacacacacacacacacacacacaVacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNhVkFllkFkFkFllkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFlclnlmkFhVkvkvkvkKhVhVhVhVhVhVlplolrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacacacacacdpdpjjkckcjjlslslslsltjjkcdpacjjacacacacacacacacacacacacacacacacacacfCacacdplukglvjmjmjmlwjmdpdpjTacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNhVkOklklklkOklklklkOklklklkFkFkFkFkFkFkFkFkFkFlylxlchVlzkvkvkvlAiwiwiwhVlplClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacackUacacacdplFlEkckclGlslslslslHjjlIdpacjjacacacacacacacacacacacacacacacacacacacjTlJjmlKjmlLjmjmlNlMjmjmdpiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbMacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNhVjDkDkEkljDkDkEkljDkDkEklkGkFkFkFkFkFkFkFkFkFkFkFkFhVlzkvkvlOhViwiwiwhVlplClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacjjdplQdpdplFjjkckcjjlslslslsltjjdpacacjjacacacacacacacacacacacacacacacacacaclRiNiNiNiNiNiNlSkglTiNiNiNiNiNacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNhVkklUlVklkklUlVklkklUlVkllXlWkFkFlXlYmalZkFlXlWlWlZhVmbkvkvmchViRiwjphVmdlClClCmehVcNcNcNcNcNcNcNcNcNcNcNcNababababababab +aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacjjacacacjjlFdpdplFlFjjkckcjjltlhlglglhjjdpacacacacacacaLacacacacacacacacacacacacacaciNjmmfjmmgkViNjmjmkgiNkVkVcQmhacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjYiwhVhViwiwiwhVlClClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacmijjiKiKjjacacdpjjjjjjjjjjjjjjkckcjjjjjjjjjjjjjjdpacacacacacacacacacacacacacacaVacacacacacaciNjmmjjmmkjmmljmjmjmmmmnmkdpacfCacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNdldldldldlhVmoiwiwiwmpiwmrmqmtmsiwmumwmvmxiJiwiwiwiEhViwiwiwlAlClClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacjkjwjwjkacacdpdpdpdpmydpkckckckckcdpdpmzdpacacacacacacacacacacacacacacacacacacacacacacacacjTdpmAjmjmmjmBjmjmjmmCjmmDlQdpmEiNacacacacacacacacacacacacacacacacacacaLacacacacacaWacacacacacacacacacacacaLaLaLacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliOdldldldldliOdldldldlcNcNcNcNcNcNcNcNcNcNcNdldldldldldlmFdlhViwmGiwiwiwiwiJmHmIiwiwiwiwiwiwiwiwiwiwiwhViwiwiwhVlClClolrmJhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab aaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacdWacacacacjkjwjwjkacacacacacdpmKdpdpdpkckcmLkcdpdpdpackeacacacjkacacacacacacaLaLacacacacacacacacacacdpdpmMjmkVkViNmOmNmOiNdpdpdpmPdpiNacacacacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacaLmQmQmQaLaLacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldliddldldldliOdlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlhViRiwiwiwmGiwiJmRmIiwmSiwiwiwiwiwiwiwiwiwhVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 1ebc45e44da..b717407bddd 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -314,7 +314,7 @@ "agb" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/apmaint) "agc" = (/obj/machinery/conveyor_switch{id = "Recycler2"},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint) "agd" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 4},/turf/simulated/wall,/area/maintenance/apmaint) -"age" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"age" = (/obj/machinery/mineral/stacking_machine{input_dir = 2; output_dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint) "agf" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/transport) "agg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "agh" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -374,8 +374,8 @@ "ahj" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "13"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/apmaint) "ahk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "ahl" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"ahm" = (/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/turret_protected/ai) -"ahn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/turf/simulated/floor/plating,/area/turret_protected/ai) +"ahm" = (/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/ai) +"ahn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/turf/simulated/floor/plating,/area/turret_protected/ai) "aho" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "ahp" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) "ahq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/auxstarboard) @@ -478,12 +478,12 @@ "ajj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ajk" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ajl" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"ajm" = (/obj/structure/cable/orange{d2 = 4; icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva) +"ajm" = (/obj/structure/cable/orange{d2 = 4; icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva) "ajn" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters{id = "evashutter"; name = "E.V.A. Storage Shutter"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva) "ajo" = (/obj/structure/cable/orange{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/orange{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/poddoor/shutters{id = "evashutter"; name = "E.V.A. Storage Shutter"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva) -"ajp" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva) +"ajp" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva) "ajq" = (/obj/machinery/door/airlock/glass_command{desc = "Storage area for the station's general-purpose space suits and other critical materials. Can be opened via bridge controls in an emergency."; name = "Standard E.V.A. Suits"; req_access_txt = "18"},/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva) -"ajr" = (/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva) +"ajr" = (/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva) "ajs" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/orange{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ajt" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aju" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{name = "Tech Storage Maintenance"; req_access_txt = "23"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -552,7 +552,7 @@ "akF" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint) "akG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/power/apc{name = "Cargo Bay APC"; pixel_y = -24},/obj/structure/cable/orange,/turf/simulated/floor/plating,/area/quartermaster/office) "akH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"akI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office) +"akI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office) "akJ" = (/turf/simulated/floor/plating,/area/quartermaster/office) "akK" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/quartermaster/office) "akL" = (/obj/item/clothing/under/color/rainbow,/obj/item/clothing/shoes/sneakers/rainbow,/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -700,7 +700,7 @@ "anx" = (/turf/simulated/floor/plasteel,/area/quartermaster/qm) "any" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/qm) "anz" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/qm) -"anA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) +"anA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm) "anB" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office) "anC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/quartermaster/office) "anD" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/quartermaster/office) @@ -710,7 +710,7 @@ "anH" = (/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/quartermaster/office) "anI" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/quartermaster/office) "anJ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint) -"anK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/tcommsat/server) +"anK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/tcommsat/server) "anL" = (/obj/machinery/door/airlock/glass_engineering{desc = "The main server room. Dangerously cold to protect the sensitive machinery."; name = "Telecommunications Server Room"; req_access_txt = "61"},/turf/simulated/floor/plasteel,/area/tcommsat/server) "anM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "anN" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) @@ -727,7 +727,7 @@ "anY" = (/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "anZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aoa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock) -"aob" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"aob" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock) "aoc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock) "aod" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aoe" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) @@ -840,11 +840,11 @@ "aqh" = (/obj/structure/table/glass,/obj/item/device/taperecorder/empty,/obj/item/device/tape/random,/turf/simulated/floor/plasteel,/area/quartermaster/office) "aqi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "aqj" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer) -"aqk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/tcommsat/computer) -"aql" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/tcommsat/computer) +"aqk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/tcommsat/computer) +"aql" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/tcommsat/computer) "aqm" = (/obj/machinery/door/airlock/glass_engineering{desc = "The main server room. Dangerously cold to protect the sensitive machinery."; name = "Telecommunications Server Room"; req_access_txt = "61"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/tcommsat/computer) -"aqn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 1},/area/tcommsat/computer) -"aqo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/tcommsat/computer) +"aqn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 1},/area/tcommsat/computer) +"aqo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/tcommsat/computer) "aqp" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer) "aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "aqr" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) @@ -853,7 +853,7 @@ "aqu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aqv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aqw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock) -"aqx" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"aqx" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock) "aqy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock) "aqz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aqA" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock) @@ -880,7 +880,7 @@ "aqV" = (/obj/machinery/door/airlock/glass_security{desc = "The guardpost for the Cargo Bay. High turnover rate due to allegations of corruption, bribery, and weapons trafficking."; name = "Security Post"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/quartermaster/office) "aqW" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{name = "Quartermaster Desk"; req_access_txt = "41"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/quartermaster/qm) "aqX" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) -"aqY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) +"aqY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm) "aqZ" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office) "ara" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office) "arb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office) @@ -895,7 +895,7 @@ "ark" = (/obj/structure/table,/obj/item/weapon/paper/monitorkey,/obj/item/device/multitool,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/tcommsat/computer) "arl" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/computer) "arm" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/tcommsat/computer) -"arn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/tcommsat/computer) +"arn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/tcommsat/computer) "aro" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/computer) "arp" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/computer) "arq" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/tcommsat/computer) @@ -980,7 +980,7 @@ "asR" = (/obj/machinery/door/airlock/glass_mining{desc = "Storage of the Company's specialized mining gear."; name = "Mining Equipment Room"; req_access_txt = "54"},/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/miningdock) "asS" = (/obj/machinery/mineral/equipment_vendor,/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock) "asT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) -"asU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"asU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock) "asV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"}) "asW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"}) "asX" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"}) @@ -1206,7 +1206,7 @@ "axj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"}) "axk" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"}) "axl" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"}) -"axm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) +"axm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) "axn" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/analyzer,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"}) "axo" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"}) "axp" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"}) @@ -1215,7 +1215,7 @@ "axs" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"}) "axt" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"}) "axu" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary{name = "Tool Storage"}) -"axv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) +"axv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) "axw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/junction,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/construction{name = "Fore Central Hallway"}) "axx" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "browncorner"; dir = 4},/area/hallway/secondary/construction{name = "Fore Central Hallway"}) "axy" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Cargo Lobby"; dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office) @@ -1278,13 +1278,13 @@ "ayD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"}) "ayE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"}) "ayF" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"}) -"ayG" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) -"ayH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) +"ayG" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) +"ayH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"}) "ayI" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/secondary/construction{name = "Fore Central Hallway"}) "ayJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/office) "ayK" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/office) "ayL" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/office) -"ayM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office) +"ayM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office) "ayN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/newscaster{dir = 8; pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayO" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayP" = (/turf/simulated/wall,/area/crew_quarters/sleep_female{name = "Fore Dormitory"}) @@ -1303,7 +1303,7 @@ "azc" = (/obj/machinery/conveyor_switch/oneway{id = "Mininginput"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "azd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aze" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock) -"azf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"azf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock) "azg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"}) "azh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"}) "azi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"}) @@ -1492,9 +1492,9 @@ "aCJ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 10},/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"}) "aCK" = (/obj/structure/closet/crate,/turf/simulated/floor/plasteel,/area/construction/Storage{name = "Construction Site"}) "aCL" = (/turf/simulated/wall/r_wall,/area/security/detectives_office) -"aCM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office) -"aCN" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office) -"aCO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office) +"aCM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office) +"aCN" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office) +"aCO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office) "aCP" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/quartermaster/miningdock) "aCQ" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/quartermaster/miningdock) "aCR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "Fore Central Hallway"}) @@ -1643,7 +1643,7 @@ "aFE" = (/obj/machinery/computer/secure_data,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/security/detectives_office) "aFF" = (/obj/effect/landmark/start{name = "Detective"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/security/detectives_office) "aFG" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office) -"aFH" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office) +"aFH" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office) "aFI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/security/main) "aFJ" = (/turf/simulated/floor/plasteel,/area/security/main) "aFK" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/security/main) @@ -1720,7 +1720,7 @@ "aHd" = (/obj/machinery/shower{dir = 4},/obj/machinery/door/window/westright{dir = 4},/obj/item/weapon/soap/deluxe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain) "aHe" = (/obj/structure/toilet{pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "white"; temperature = 273.15},/area/crew_quarters/captain) "aHf" = (/obj/structure/sink{dir = 4; pixel_x = 11},/obj/structure/mirror{pixel_x = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"; temperature = 273.15},/area/crew_quarters/captain) -"aHg" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-2"},/obj/machinery/door/poddoor/shutters/preopen{id = "capffice"; name = "captain's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"aHg" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-2"},/obj/machinery/door/poddoor/shutters/preopen{id = "capffice"; name = "captain's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/captain) "aHh" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/security/detectives_office) "aHi" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/restraints/handcuffs,/obj/machinery/newscaster{hitstaken = 1; pixel_y = -32},/turf/simulated/floor/carpet,/area/security/detectives_office) "aHj" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) @@ -1900,7 +1900,7 @@ "aKB" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "aKC" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aKD" = (/obj/machinery/door/airlock{name = "Unisex Restroom"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/prison) -"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button{id = "lawprivacy"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice) +"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button/door{id = "law"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice) "aKF" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aKG" = (/obj/structure/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aKH" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/security/prison) @@ -1919,12 +1919,12 @@ "aKU" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "Law Office APC"; pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice) "aKV" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/status_display{pixel_y = -32},/obj/machinery/camera{c_tag = "Law Office"; dir = 1},/turf/simulated/floor/wood,/area/lawoffice) "aKW" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/wood,/area/lawoffice) -"aKX" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "lawprivacy"; name = "Privacy Shutter"},/turf/simulated/floor/plating,/area/lawoffice) +"aKX" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "law"; layer = 2.9},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/lawoffice) "aKY" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "aKZ" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless,/area/space/nearstation) "aLa" = (/turf/simulated/wall/r_wall,/area/engine/engineering) "aLb" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office) -"aLc" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aLc" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "aLd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/gravity_generator) "aLe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "Fore Central Hallway"}) "aLf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_engineering{name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/engine/gravity_generator) @@ -1966,7 +1966,7 @@ "aLP" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aLQ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aLR" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) -"aLS" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "interrogation"; name = "interrogation shutters"},/turf/simulated/floor/plating,/area/security/main) +"aLS" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "interrogation"; name = "interrogation shutters"},/turf/simulated/floor/plating,/area/security/main) "aLT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/main) "aLU" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/paper_bin{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main) "aLV" = (/obj/machinery/computer/security,/turf/simulated/floor/plasteel,/area/security/main) @@ -2000,7 +2000,7 @@ "aMx" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aMy" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aMz" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aMA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/green{icon_state = "2-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aMA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/green{icon_state = "2-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aMB" = (/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aMC" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aMD" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/crew_quarters/kitchen) @@ -2043,7 +2043,7 @@ "aNo" = (/turf/simulated/floor/plasteel,/area/security/brig) "aNp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Cell One"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/brig) "aNq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) -"aNr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aNr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aNs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"}) "aNt" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "aNu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) @@ -2058,7 +2058,7 @@ "aND" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel,/area/engine/chiefs_office) "aNE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/chiefs_office) "aNF" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/chiefs_office) -"aNG" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aNG" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "aNH" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/engine/gravity_generator) "aNI" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/gravity_generator) "aNJ" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/engine/gravity_generator) @@ -2118,11 +2118,11 @@ "aOL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig) "aOM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/security/brig) "aON" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/security/brig) -"aOO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aOO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aOP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/engine/gravity_generator) "aOQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/flasher{id = "Cell 1"; pixel_y = -25},/turf/simulated/floor/plasteel,/area/security/brig) "aOR" = (/obj/structure/bed,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) -"aOS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aOS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aOT" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"}) "aOU" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "aOV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hallway/primary/port{name = "Port Hallway"}) @@ -2135,7 +2135,7 @@ "aPc" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel,/area/engine/chiefs_office) "aPd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/chiefs_office) "aPe" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/chiefs_office) -"aPf" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aPf" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "aPg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) "aPh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/gravity_generator) "aPi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) @@ -2207,7 +2207,7 @@ "aQw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hydroponics) "aQx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hydroponics) "aQy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics) -"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_one_access_txt = "30:35"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics) +"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_access_txt = "35"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics) "aQA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "green"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aQB" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aQC" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "19"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) @@ -2219,7 +2219,7 @@ "aQI" = (/turf/simulated/floor/plating,/area/bridge) "aQJ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_3) "aQK" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_3) -"aQL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison) +"aQL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison) "aQM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison) "aQN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison) "aQO" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/security/prison) @@ -2244,7 +2244,7 @@ "aRh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "aRi" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) "aRj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) -"aRk" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aRk" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aRl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"}) "aRm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "aRn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) @@ -2263,10 +2263,10 @@ "aRA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) "aRB" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) "aRC" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) -"aRD" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) -"aRE" = (/obj/structure/grille,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aRD" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aRE" = (/obj/structure/grille,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "aRF" = (/obj/machinery/door/airlock/glass_command{desc = "The office of the Head directly responsible for heat, power, and air pressure concerns aboard SS13."; name = "Chief Engineer's Office"; req_access_txt = "56"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/chiefs_office) -"aRG" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"aRG" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "aRH" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) "aRI" = (/obj/machinery/computer/card/minor/hos,/turf/simulated/floor/wood,/area/security/hos) "aRJ" = (/obj/machinery/door/window/eastleft{name = "Bar Deliveries"; req_access_txt = "25"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar) @@ -2371,12 +2371,12 @@ "aTE" = (/obj/machinery/button/flasher{pixel_x = -26; id = "PCell 2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/machinery/camera{dir = 4; network = list("SS13","Prison"); c_tag = "Prison Hallway Fore"},/turf/simulated/floor/plasteel,/area/security/prison) "aTF" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/prison) "aTG" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/security/prison) -"aTH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) +"aTH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) "aTI" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/security/prison) "aTJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Prison Gate"; name = "Prison Blast Door"},/turf/simulated/floor/plasteel,/area/security/prison) "aTK" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/prison) "aTL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison) -"aTM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) +"aTM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) "aTN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) "aTO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aTP" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) @@ -2468,7 +2468,7 @@ "aVx" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"}) "aVy" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Cell Three"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/brig) "aVz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) -"aVA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aVA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aVB" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "aVC" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/engine/engineering) "aVD" = (/obj/structure/lattice,/turf/space,/area/engine/engineering) @@ -2533,12 +2533,12 @@ "aWK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel,/area/security/prison) "aWL" = (/obj/machinery/button/door{name = "Cell 2 Lockdown"; pixel_x = -26; req_access_txt = "2"; id = "permacell2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/security/prison) "aWM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/security/prison) -"aWN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) +"aWN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) "aWO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/security/prison) "aWP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Prison Gate"; name = "Prison Blast Door"},/turf/simulated/floor/plasteel,/area/security/prison) "aWQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/button/door{id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = -24; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/security/prison) "aWR" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison) -"aWS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) +"aWS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) "aWT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig) "aWU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig) "aWV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/security/brig) @@ -2616,7 +2616,7 @@ "aYp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering) "aYq" = (/obj/structure/lattice,/obj/item/clothing/head/hardhat,/turf/space,/area/engine/engineering) "aYr" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering) -"aYs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) +"aYs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "aYt" = (/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering) "aYu" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering) "aYv" = (/obj/machinery/light{dir = 1},/obj/machinery/button/door{id = "singularity"; name = "Shutters Control"; pixel_y = 25; req_access_txt = "11"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering) @@ -2648,7 +2648,7 @@ "aYV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "aYW" = (/obj/structure/table,/obj/item/weapon/storage/fancy/egg_box,/obj/item/weapon/kitchen/knife,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "aYX" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/hallway/primary/starboard{name = "Starboard Hallway"}) -"aYY" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"aYY" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "aYZ" = (/obj/machinery/computer/card,/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/wood,/area/crew_quarters/heads) "aZa" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "aZb" = (/obj/machinery/keycard_auth{pixel_y = 24},/obj/structure/bed/dogbed{anchored = 1; desc = "Ian's bed! Looks comfy."; name = "Ian's bed"},/mob/living/simple_animal/pet/dog/corgi/Ian,/turf/simulated/floor/wood,/area/crew_quarters/heads) @@ -2722,7 +2722,7 @@ "bar" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "bas" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{desc = "The workplace of the diligent station chef, with enough ingredients to work up a masterpiece."; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "bat" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/sortjunction{dir = 2; sortType = 19},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) -"bau" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) +"bau" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bav" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "baw" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 8; name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) @@ -2806,7 +2806,7 @@ "bbX" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; name = "Kitchen Requests Console"; pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "bbY" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bbZ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) -"bca" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/machinery/flasher{id = "hopline"; layer = 3.5; name = "civility enforcement flasher"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) +"bca" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/machinery/flasher{id = "hopline"; layer = 3.5; name = "civility enforcement flasher"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bcb" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bcc" = (/obj/structure/cable/blue{icon_state = "1-8"; d1 = 1; d2 = 2},/obj/machinery/pdapainter,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bcd" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/wood,/area/crew_quarters/heads) @@ -2832,7 +2832,7 @@ "bcx" = (/obj/item/weapon/grenade/barrier,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bcy" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory) "bcz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory) -"bcA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/armory) +"bcA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/armory) "bcB" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden) "bcC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/warden) "bcD" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/security/warden) @@ -2906,7 +2906,7 @@ "bdT" = (/obj/structure/rack,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bdU" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bdV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory) -"bdW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/armory) +"bdW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/armory) "bdX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden) "bdY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden) "bdZ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/security/warden) @@ -2915,7 +2915,7 @@ "bec" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/warden) "bed" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "bee" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel,/area/security/brig) -"bef" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"bef" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "beg" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{layer = 2.9; name = "Brig Desk"; req_access_txt = "1"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig) "beh" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering) "bei" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/engineering) @@ -2928,14 +2928,14 @@ "bep" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/engineering) "beq" = (/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "ber" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering) -"bes" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"bes" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bet" = (/obj/machinery/door/airlock/glass_security{name = "Security Post"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/engine/engineering) -"beu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"beu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bev" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bew" = (/obj/structure/bed/stool,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bex" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/brig) -"bey" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) -"bez" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bey" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bez" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "beA" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "beB" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 15},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "beC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) @@ -2956,7 +2956,7 @@ "beR" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/emitter{anchored = 1; state = 2},/turf/simulated/floor/plating/airless{icon_state = "warnplate"},/area/engine/engineering) "beS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) "beT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig) -"beU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison) +"beU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison) "beV" = (/obj/structure/rack,/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/turf/simulated/floor/plasteel,/area/security/prison) "beW" = (/obj/structure/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel,/area/security/prison) "beX" = (/obj/structure/rack,/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/turf/simulated/floor/plasteel,/area/security/prison) @@ -3022,7 +3022,7 @@ "bgf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/bridge) "bgg" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/bridge) "bgh" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/security/prison) -"bgi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison) +"bgi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison) "bgj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/security/prison) "bgk" = (/obj/machinery/door/airlock/external{name = "Prison Mining External Airlock"; req_access_txt = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/security/prison) "bgl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/prison) @@ -3036,7 +3036,7 @@ "bgt" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/laser{pixel_x = 3; pixel_y = -3},/obj/item/weapon/gun/energy/laser,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bgu" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bgv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory) -"bgw" = (/obj/structure/grille,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/armory) +"bgw" = (/obj/structure/grille,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/armory) "bgx" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden) "bgy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair,/turf/simulated/floor/plasteel,/area/security/warden) "bgz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/warden) @@ -3045,11 +3045,11 @@ "bgC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/warden) "bgD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig) "bgE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/brig) -"bgF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) +"bgF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) "bgG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/security,/turf/simulated/floor/plasteel,/area/security/brig) "bgH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/secure_data,/obj/machinery/button/door{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -6; pixel_y = -26; req_access_txt = "2"},/obj/machinery/button/flasher{id = "brigentry"; pixel_x = 6; pixel_y = -26},/turf/simulated/floor/plasteel,/area/security/brig) "bgI" = (/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "innerbrig"; name = "Brig Interior Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -26; req_access_txt = "63"},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "outerbrig"; name = "Brig Exterior Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -26; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/brig) -"bgJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/turf/simulated/floor/plating,/area/security/brig) +"bgJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/turf/simulated/floor/plating,/area/security/brig) "bgK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "Port Hallway Central"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"}) "bgL" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) "bgM" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering) @@ -3094,7 +3094,7 @@ "bhz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/security/prison) "bhA" = (/obj/machinery/door/airlock/external{name = "Prison Mining External Airlock"; req_access_txt = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/security/prison) "bhB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/security/prison) -"bhC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison) +"bhC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison) "bhD" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/security/prison) "bhE" = (/obj/machinery/camera{c_tag = "Prison E.V.A."; dir = 8; network = list("SS13","Prison")},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "browncorner"},/area/security/prison) "bhF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/security/prison) @@ -3163,7 +3163,7 @@ "biQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/obj/machinery/light/small,/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering) "biR" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 8},/area/engine/engineering) "biS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering) -"biT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison) +"biT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison) "biU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "biV" = (/obj/item/device/multitool,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "biW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 4},/area/engine/engineering) @@ -3204,8 +3204,8 @@ "bjF" = (/obj/structure/table,/obj/item/weapon/crowbar/red,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/security/brig) "bjG" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/security/brig) "bjH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/security/brig) -"bjI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) -"bjJ" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"bjI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) +"bjJ" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "bjK" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bjL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bjM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/engine/engineering) @@ -3235,7 +3235,7 @@ "bkk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/flasher{id = "Cell 2"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/security/brig) "bkl" = (/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -1; pixel_y = -2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/security/prison) "bkm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/security/prison) -"bkn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel,/area/security/prison) +"bkn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel,/area/security/prison) "bko" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bkp" = (/obj/structure/rack,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bkq" = (/turf/simulated/floor/wood,/area/security/hos) @@ -3246,10 +3246,10 @@ "bkv" = (/obj/machinery/power/apc{dir = 1; name = "Head of Security's Office APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/mob/living/simple_animal/hostile/bear{desc = "Enemies of the law are unbearable to him!"; faction = list("neutral"); name = "Security Bear"},/turf/simulated/floor/wood,/area/security/hos) "bkw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "bkx" = (/obj/machinery/door_timer{dir = 4; id = "Cell 5"; name = "Cell Five Timer"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/security/brig) -"bky" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) -"bkz" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"bky" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) +"bkz" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bkA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_engineering{desc = "A place for the Engineering staff to slack off (hopefully) after completing the Engine."; name = "Engineering Break Room"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/engineering) -"bkB" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"bkB" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bkC" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_4) "bkD" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_4) "bkE" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_4) @@ -3278,7 +3278,7 @@ "blb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/security/hos) "blc" = (/turf/simulated/floor/carpet,/area/security/hos) "bld" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/wood,/area/security/hos) -"ble" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/hos) +"ble" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/hos) "blf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/security/brig) "blg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/security/brig) "blh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/security/brig) @@ -3324,7 +3324,7 @@ "blV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/security/brig) "blW" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/security/brig) "blX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/flasher{id = "Cell 5"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/security/brig) -"blY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"blY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "blZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bma" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"}) "bmb" = (/obj/machinery/door/airlock/maintenance{name = "Port Interior Maintenance Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -3363,7 +3363,7 @@ "bmI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/security/hos) "bmJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/security/hos) "bmK" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/wood,/area/security/hos) -"bmL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"bmL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos) "bmM" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/security/brig) "bmN" = (/obj/machinery/door_timer{dir = 4; id = "Cell 3"; name = "Cell Three Timer"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/security/brig) "bmO" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel,/area/security/brig) @@ -3424,7 +3424,7 @@ "bnR" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/engine/engineering) "bnS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/engine/engineering) "bnT" = (/obj/machinery/status_display{layer = 4; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) -"bnU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) +"bnU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bnV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Med"; location = "StAF1"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bnW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bnX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) @@ -3508,7 +3508,7 @@ "bpx" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space/nearstation) "bpy" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/transit_tube{icon_state = "D-SW"},/turf/space,/area/space/nearstation) "bpz" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space/nearstation) -"bpA" = (/obj/structure/grille,/obj/structure/cable/yellow,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"bpA" = (/obj/structure/grille,/obj/structure/cable/yellow,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bpB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/button/door{id = "bridgeshut"; name = "Bridge Shutters Control"; pixel_y = -34; req_access_txt = "19"},/obj/machinery/button/door{id = "bridge blast"; name = "Bridge Blast Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/bridge) "bpC" = (/turf/simulated/wall,/area/crew_quarters/sleep_male{name = "Aft Dormitory"}) "bpD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/crew_quarters/sleep_male{name = "Aft Dormitory"}) @@ -3541,11 +3541,11 @@ "bqe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bqf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bqg" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"},/area/crew_quarters/courtroom) -"bqh" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"bqh" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "bqi" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/port{name = "Port Hallway"}) "bqj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"}) -"bql" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"}) +"bql" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"}) "bqm" = (/obj/machinery/camera{c_tag = "Aft Port Transit"},/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bqn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bqo" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) @@ -3621,7 +3621,7 @@ "brG" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "redcorner"},/area/crew_quarters/courtroom) "brH" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "brI" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/port{name = "Port Hallway"}) -"brJ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"}) +"brJ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"}) "brK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"}) "brL" = (/obj/structure/transit_tube{icon_state = "Block"; dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"}) "brM" = (/obj/structure/transit_tube/station/reverse{dir = 1},/obj/structure/transit_tube_pod{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"}) @@ -4003,19 +4003,19 @@ "byY" = (/turf/simulated/wall/r_wall,/area/medical/chemistry) "byZ" = (/turf/simulated/wall,/area/medical/medbay) "bza" = (/obj/structure/sign/bluecross,/turf/simulated/wall,/area/medical/medbay) -"bzb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bzb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "bzc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bzd" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bze" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bzf" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) -"bzg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bzg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "bzh" = (/turf/simulated/wall,/area/medical/surgery) "bzi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/medical/surgery) "bzj" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access_txt = "5; 6; 9; 12; 22; 26; 28; 33; 37; 40"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bzk" = (/turf/simulated/wall,/area/library) "bzl" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/library) "bzm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass{desc = "The station's book depository, a place to hang out, aquire porn, and play tabletop games."; name = "Library"},/turf/simulated/floor/wood,/area/library) -"bzn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library) +"bzn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library) "bzo" = (/turf/simulated/floor/wood,/area/library) "bzp" = (/obj/machinery/door/window/northright{dir = 8; name = "Library Desk Door"; req_access_txt = "37"},/obj/machinery/status_display{layer = 4; pixel_y = 32},/turf/simulated/floor/wood,/area/library) "bzq" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/wood,/area/library) @@ -4040,14 +4040,14 @@ "bzJ" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/crew_quarters/courtroom) "bzK" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/door/poddoor/shutters{id = "Mechbay"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bzL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters{id = "Mechbay"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) -"bzM" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) +"bzM" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "bzN" = (/turf/simulated/wall,/area/assembly/robotics) -"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_one_access = "29"},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics) +"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_access_txt = "29"; req_one_access = null},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics) "bzP" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) -"bzQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/assembly/robotics) +"bzQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/assembly/robotics) "bzR" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/toxins/lab) "bzS" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/assembly/robotics) -"bzT" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) +"bzT" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "bzU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Robotics"},/obj/machinery/door/firedoor,/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/assembly/robotics) "bzV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) "bzW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "greencorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) @@ -4062,7 +4062,7 @@ "bAf" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bAg" = (/obj/structure/sink{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bAh" = (/obj/machinery/button/door{id = "chemTesting"; name = "Containment Blast Doors"; pixel_y = 25; req_access_txt = "5; 33"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/medical/chemistry) -"bAi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/medical/chemistry) +"bAi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/medical/chemistry) "bAj" = (/turf/simulated/floor/engine,/area/medical/chemistry) "bAk" = (/mob/living/carbon/monkey,/turf/simulated/floor/engine,/area/medical/chemistry) "bAl" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4166,7 +4166,7 @@ "bCf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Mech Bay Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bCg" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/wall,/area/assembly/chargebay) "bCh" = (/obj/machinery/door/airlock/research{id_tag = ""; name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) -"bCi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay) +"bCi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay) "bCj" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target/clown,/turf/simulated/floor/plasteel{icon_state = "warningcorner"},/area/toxins/misc_lab) "bCk" = (/turf/simulated/floor/plating,/area/toxins/misc_lab) "bCl" = (/obj/machinery/camera{c_tag = "Shooting Range"; dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/toxins/misc_lab) @@ -4190,7 +4190,7 @@ "bCD" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bCE" = (/obj/structure/table/glass,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bCF" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"bCG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/turf/simulated/floor/engine,/area/medical/chemistry) +"bCG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/turf/simulated/floor/engine,/area/medical/chemistry) "bCH" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bCI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "whitebluecorner"},/area/medical/medbay) "bCJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay) @@ -4199,9 +4199,9 @@ "bCM" = (/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay) "bCN" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay) "bCO" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitehall"},/area/medical/medbay) -"bCP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/surgery) +"bCP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/surgery) "bCQ" = (/obj/machinery/door/airlock/glass_medical{desc = "A storage area for important medical supplies. Leads to the front desk."; name = "Patient Room"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"bCR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/surgery) +"bCR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/surgery) "bCS" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) "bCT" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) "bCU" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery) @@ -4325,7 +4325,7 @@ "bFi" = (/obj/structure/bookcase{name = "bookcase (Non-Fiction)"},/turf/simulated/floor/wood,/area/library) "bFj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/library) "bFk" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/wood,/area/library) -"bFl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library) +"bFl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library) "bFm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall,/area/maintenance/asmaint2) "bFn" = (/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bFo" = (/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4373,7 +4373,7 @@ "bGe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library) "bGf" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bGg" = (/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"bGh" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bGh" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bGi" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGj" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/wall,/area/maintenance/asmaint2) "bGk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) @@ -4433,7 +4433,7 @@ "bHm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bHn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "bHo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) -"bHp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) +"bHp" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) "bHq" = (/obj/machinery/light{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "bHr" = (/turf/simulated/wall,/area/hallway/primary/aft{name = "Aft Hallway"}) "bHs" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -4446,7 +4446,7 @@ "bHz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bHA" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/medical/chemistry) "bHB" = (/obj/structure/bed/roller,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay) -"bHC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bHC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "bHD" = (/obj/structure/table/reinforced,/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "FoyerLeft"; name = "Medbay Doors Control"; normaldoorcontrol = 1; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/medical/medbay) "bHE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/medbay) "bHF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/medbay) @@ -4537,7 +4537,7 @@ "bJm" = (/obj/structure/table/glass,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel,/area/assembly/robotics) "bJn" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bJo" = (/turf/simulated/wall/r_wall,/area/crew_quarters/hor) -"bJp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bJp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bJq" = (/obj/structure/table/glass,/obj/item/device/assembly/flash/handheld,/obj/item/stack/cable_coil,/obj/item/borg/upgrade/rename,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/assembly/robotics) "bJr" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table/glass,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel,/area/assembly/robotics) "bJs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) @@ -4668,7 +4668,7 @@ "bLN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bLO" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bLP" = (/obj/structure/disposalpipe/segment,/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/medbay2) -"bLQ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bLQ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "bLR" = (/obj/machinery/door/airlock/glass_security{name = "Security Post"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/medical/medbay) "bLS" = (/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "FoyerRight"; name = "Medbay Exit Button"; normaldoorcontrol = 1; pixel_y = 26},/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/medbay2) "bLT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) @@ -4694,7 +4694,7 @@ "bMn" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bMp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) +"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bMr" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMs" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMt" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4764,7 +4764,7 @@ "bNF" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/janitor) "bNG" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bNH" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics) +"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics) "bNJ" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) "bNK" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "bNL" = (/obj/machinery/door/airlock/glass_research{name = "Testing Lab"; req_access_txt = "47"; req_one_access = null},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -4886,9 +4886,9 @@ "bPX" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2) "bPY" = (/obj/machinery/door/airlock/glass_medical{desc = "A storage area for important medical supplies, including a medical hardsuit for SAR operations."; name = "Medbay Storage"; req_access_txt = "45"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/medbay2) "bPZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/medical/medbay2) -"bQa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2) +"bQa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay2) "bQb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_medical{desc = "The breakroom for the station's diligent Medical staff, suitably insulated from the screams of the injured."; name = "Medbay Break Room"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/medbay2) -"bQc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2) +"bQc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay2) "bQd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2) "bQe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bQf" = (/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) @@ -4930,7 +4930,7 @@ "bQP" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bQQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bQR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) -"bQS" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) +"bQS" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics) "bQT" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/rxglasses,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/genetics) "bQU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bQV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) @@ -4967,7 +4967,7 @@ "bRA" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing) "bRB" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing) "bRC" = (/turf/simulated/wall/r_wall,/area/toxins/server) -"bRD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/pink{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bRD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/pink{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/hor) "bRE" = (/obj/machinery/door/airlock/glass_command{name = "Research Director's Office"; req_access_txt = "30"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "bRF" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/toxins/lab) "bRG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 0; pixel_y = 40},/obj/structure/sign/directions/science{dir = 4; icon_state = "direction_sci"; pixel_x = 0; pixel_y = 32},/obj/structure/sign/directions/security{dir = 1; icon_state = "direction_sec"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central{name = "Aft Central Hallway"}) @@ -5021,7 +5021,7 @@ "bSC" = (/obj/machinery/computer/aifixer,/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -24; req_access_txt = "47"},/obj/machinery/button{id = "research"; name = "Research and Development Shutters"; pixel_x = -37},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSD" = (/obj/structure/closet/secure_closet/RD,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSE" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{icon_state = "whitepurple"; dir = 5},/area/toxins/mixing) -"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor) +"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSG" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSH" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSI" = (/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Research Lab APC"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/toxins/lab) @@ -5033,7 +5033,7 @@ "bSO" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) -"bSR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) +"bSR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics) "bSS" = (/obj/structure/bed/roller,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/genetics) "bST" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) @@ -5043,8 +5043,8 @@ "bSY" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2) "bSZ" = (/obj/machinery/light{dir = 4},/obj/machinery/requests_console{department = "Medbay"; departmentType = 1; name = "Medbay Requests Console"; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay2) "bTa" = (/turf/simulated/wall/r_wall,/area/medical/cmo) -"bTb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo) -"bTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo) +"bTb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) +"bTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) "bTd" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/cmo) "bTe" = (/obj/machinery/light_switch{dir = 8; pixel_x = -22},/turf/simulated/wall/r_wall,/area/medical/virology) "bTf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = -32},/obj/structure/closet/l3closet/virology,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology) @@ -5082,7 +5082,7 @@ "bTL" = (/obj/machinery/door/window/eastright{name = "Monkey Pen"; req_access_txt = "9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bTM" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bTN" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) -"bTO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) +"bTO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics) "bTP" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/genetics) "bTQ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bTR" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/genetics) @@ -5102,7 +5102,7 @@ "bUf" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology) "bUg" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology) "bUh" = (/obj/structure/table/glass,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology) -"bUi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology) +"bUi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bUj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology) "bUk" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bUl" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/camera{c_tag = "Virology"; dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology) @@ -5113,7 +5113,7 @@ "bUq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Server Room"; dir = 4},/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/toxins/server) "bUr" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/assembly/robotics) "bUs" = (/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume{frequency = 1449; id = "tox_airlock_pump"},/turf/simulated/floor/engine,/area/toxins/mixing) -"bUt" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) +"bUt" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) "bUu" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/mixing) "bUv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "bUw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) @@ -5141,8 +5141,8 @@ "bUS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/genetics) "bUT" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/genetics) "bUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/medbay2) -"bUV" = (/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) -"bUW" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) +"bUV" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) +"bUW" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; sortType = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bUX" = (/obj/structure/table/glass,/obj/item/weapon/airlock_painter,/obj/machinery/camera{c_tag = "Art Storage"; dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/art) "bUY" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/medbay2) "bUZ" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera{c_tag = "Medbay Break Room"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2) @@ -5159,7 +5159,7 @@ "bVk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/glass_virology{name = "Isolation Room"; req_access_txt = "39"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology) "bVl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bVm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bVn" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology) +"bVn" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bVo" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology) "bVp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology) "bVq" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology) @@ -5186,7 +5186,7 @@ "bVL" = (/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bVM" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bVN" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "whitebluecorner"},/area/medical/medbay2) -"bVO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo) +"bVO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) "bVP" = (/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bVQ" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bVR" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) @@ -5202,7 +5202,7 @@ "bWb" = (/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bWc" = (/obj/machinery/camera{c_tag = "Toxins Test Chamber Fore"; network = list("SS13","Toxins")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bWd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE"},/turf/simulated/wall,/area/mine/explored) -"bWe" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) +"bWe" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab) "bWf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/lab) "bWg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/lab) "bWh" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/toxins/lab) @@ -5235,7 +5235,7 @@ "bWI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bWJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bWK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay2) -"bWL" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo) +"bWL" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) "bWM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "1-4"},/obj/structure/cable/cyan{icon_state = "2-4"},/obj/structure/cable/cyan{icon_state = "4-8"},/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bWN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bWO" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/item/weapon/stamp/cmo,/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) @@ -5247,7 +5247,7 @@ "bWU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bWV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bWW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bWX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology) +"bWX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bWY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology) "bWZ" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/virology) "bXa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology) @@ -5354,7 +5354,7 @@ "bYX" = (/obj/structure/table,/obj/item/toy/minimeteor,/obj/item/weapon/poster/contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bYY" = (/obj/structure/rack,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bYZ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "whitepurple"; dir = 5},/area/medical/research{name = "Research Division"}) -"bZa" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"bZa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "bZb" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bZc" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bZd" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5413,7 +5413,7 @@ "cae" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "caf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cag" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) -"cah" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"cah" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "cai" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "caj" = (/turf/simulated/floor/plasteel{icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "cak" = (/obj/machinery/light,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/medical/research{name = "Research Division"}) @@ -5466,8 +5466,8 @@ "cbf" = (/obj/machinery/door/airlock/glass_research{name = "Research Division Break Room"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "whitepurplefull"},/area/medical/research{name = "Research Division"}) "cbg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cbh" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/research{name = "Research Division"}) -"cbi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) -"cbj" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"cbi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"cbj" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "cbk" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"}) "cbl" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cbm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) @@ -5508,7 +5508,7 @@ "cbV" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching various laboratories."; name = "Research Monitor"; network = list("RD"); pixel_y = 28},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/camera{c_tag = "Research Security Post"; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/research{name = "Research Division"}) "cbW" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/research{name = "Research Division"}) "cbX" = (/obj/structure/table/glass,/obj/machinery/recharger{pixel_y = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/medical/research{name = "Research Division"}) -"cbY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"cbY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "cbZ" = (/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"}) "cca" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"}) "ccb" = (/obj/structure/closet/firecloset,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/medical/research{name = "Research Division"}) @@ -5533,7 +5533,7 @@ "ccu" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccv" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/obj/machinery/camera{c_tag = "Incinerator"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccw" = (/turf/simulated/floor/plating,/area/maintenance/incinerator) -"ccx" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) +"ccx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab) "ccy" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 24; pixel_y = -8; req_access_txt = "12"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Gas Pump"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/maintenance/incinerator) "ccz" = (/obj/machinery/doorButtons/access_button{idDoor = "incinerator_airlock_exterior"; layer = 3.1; idSelf = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -24; pixel_y = -8},/obj/structure/sign/fire{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/incinerator) @@ -5553,10 +5553,10 @@ "ccO" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 0},/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "ccP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "ccQ" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) -"ccR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"ccR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "ccS" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "ccT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/research{name = "Research Division"}) -"ccU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"ccU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "ccV" = (/obj/structure/filingcabinet,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/medical/research{name = "Research Division"}) "ccW" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/medical/research{name = "Research Division"}) "ccX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/medical/research{name = "Research Division"}) @@ -5577,7 +5577,7 @@ "cdm" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cdn" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cdo" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_y = 26},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cdp" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cdp" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cdq" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_y = 26},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cdr" = (/obj/structure/cable/cyan,/obj/machinery/power/apc{name = "Atmospherics APC"; pixel_y = -24},/turf/simulated/floor/plating,/area/atmos) "cds" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5602,7 +5602,7 @@ "cdL" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 1},/area/toxins/test_area) "cdM" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"},/area/toxins/test_area) "cdN" = (/turf/simulated/wall/r_wall,/area/toxins/storage) -"cdO" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/stock_parts/manipulator,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab) +"cdO" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay2) "cdP" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/medical/research{name = "Research Division"}) "cdQ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"}) "cdR" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"}) @@ -5646,7 +5646,7 @@ "ceD" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "ceE" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "ceF" = (/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) -"ceG" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab) +"ceG" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "ceH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/lab) "ceI" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "research"},/turf/simulated/floor/plating,/area/toxins/lab) "ceJ" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"}) @@ -5721,7 +5721,7 @@ "cga" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warningcorner"},/area/toxins/test_area) "cgb" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/storage) "cgc" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/storage) -"cgd" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"cgd" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cge" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cgf" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel,/area/toxins/storage) "cgg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5786,7 +5786,7 @@ "chn" = (/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "cho" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) "chp" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"chq" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"chq" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "chr" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "chs" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) "cht" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -5794,7 +5794,7 @@ "chv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "chw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/glass,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab) "chx" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio3"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"chy" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"chy" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "chz" = (/turf/simulated/floor/engine,/area/toxins/xenobiology) "chA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "chB" = (/turf/simulated/wall/r_wall,/area/toxins/explab) @@ -5870,13 +5870,13 @@ "ciT" = (/obj/machinery/seed_extractor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2) "ciU" = (/obj/item/weapon/storage/backpack,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2) "ciV" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2) -"ciW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"ciW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "ciX" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio2"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "ciY" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "ciZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cja" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology) "cjb" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cjc" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cjc" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cjd" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cje" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cjf" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) @@ -5935,10 +5935,10 @@ "ckg" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "ckh" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cki" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2) -"ckj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"ckj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "ckk" = (/obj/machinery/disposal/bin,/obj/structure/sign/electricshock{pixel_y = 32},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "ckl" = (/obj/structure/table/reinforced,/obj/structure/sign/electricshock{pixel_y = 32},/obj/machinery/button/door{id = "xenobio4"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"ckm" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"ckm" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "ckn" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cko" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "ckp" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) @@ -5949,8 +5949,8 @@ "cku" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/hallway/primary/aft{name = "Aft Hallway"}) "ckv" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/aft{name = "Aft Hallway"}) "ckw" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) -"ckx" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) -"cky" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ckx" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) +"cky" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "ckz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos) "ckA" = (/obj/structure/sign/atmosplaque{desc = "This plaque commemorates the rise of the LINDA administration at CentCom, and the advent of a new era."; name = "\improper LINDA plaque"; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "ckB" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"},/area/medical/genetics) @@ -6006,11 +6006,11 @@ "clz" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/poster/contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "clA" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "clB" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"clC" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"clC" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "clD" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio1"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "clE" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract."; name = "Slime Processor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"clF" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"clG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/explab) +"clF" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"clG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/explab) "clH" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/explab) "clI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/teleporter) "clJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/teleporter) @@ -6090,7 +6090,7 @@ "cnf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cng" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 5; pixel_y = -5},/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/toxins/lab) "cnh" = (/obj/structure/table/reinforced,/obj/structure/sign/electricshock{pixel_y = 32},/obj/machinery/button/door{id = "xenobio5"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cni" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cni" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cnj" = (/obj/machinery/r_n_d/experimentor,/turf/simulated/floor/engine,/area/toxins/explab) "cnk" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/engine,/area/toxins/explab) "cnl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Escape Hallway Central"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit) @@ -6109,7 +6109,7 @@ "cny" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cnz" = (/obj/item/clothing/shoes/sneakers/black{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cnA" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/clothing/under/rank/clown/sexy,/obj/item/clothing/under/sexymime,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cnB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology) +"cnB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology) "cnC" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen{dir = 4; name = "Test Chamber Monitor"; network = list("Xeno"); pixel_y = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "cnD" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cnE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -6141,14 +6141,14 @@ "coe" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 6},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cof" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cog" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"coh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology) +"coh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology) "coi" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/button/ignition{id = "Xenobio"; pixel_x = -6; pixel_y = -2},/obj/machinery/button/door{id = "Xenolab"; name = "Test Chamber Blast Doors"; pixel_x = 4; pixel_y = -2; req_access_txt = "55"},/obj/item/weapon/wrench,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "coj" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cok" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "col" = (/obj/machinery/smartfridge/extract,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "com" = (/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "con" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"coo" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"coo" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cop" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/light/small{dir = 4},/obj/effect/landmark/costume,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "coq" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 1; on = 1; tag = ""},/obj/machinery/camera{c_tag = "Atmospherics Mix"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "cor" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "scimaintroom"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6157,7 +6157,7 @@ "cou" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/atmos) "cov" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cow" = (/obj/machinery/camera{c_tag = "Atmospherics Central East"; dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cox" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology) +"cox" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "coy" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "coz" = (/obj/structure/toilet{cistern = 1; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one has a heart drawn on the cistern."; dir = 4},/obj/machinery/button/door{id = "barbath"; name = "Bolts Control"; normaldoorcontrol = 1; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "coA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing) @@ -6196,20 +6196,20 @@ "cph" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "cpi" = (/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos) "cpj" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 3; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cpl" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cpm" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "To Mix"; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cpn" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/toxins/mixing) "cpo" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/turf/simulated/floor/plasteel,/area/atmos) "cpp" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Air to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 4; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "co2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cps" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) "cpt" = (/obj/machinery/door/airlock/external{name = "Atmosphereics External Access"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos) "cpu" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cpv" = (/mob/living/simple_animal/crab/Coffee,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cpw" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cpx" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology) +"cpx" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology) "cpy" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "cpz" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Gas Pump"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cpA" = (/turf/simulated/wall,/area/mine/explored) @@ -6221,7 +6221,7 @@ "cpG" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/bed/chair,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) -"cpJ" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/wall,/area/toxins/misc_lab) +"cpJ" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "cpK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Atmospherics Front Desk"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "cpL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) @@ -6243,7 +6243,7 @@ "cqc" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos) "cqd" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cqe" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cqf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/xenobiology) +"cqf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/xenobiology) "cqg" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "cqh" = (/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/xenobiology) "cqi" = (/obj/machinery/power/apc{name = "Xenobiology APC"; pixel_y = -25},/obj/structure/cable/pink,/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -6304,7 +6304,7 @@ "crl" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) "crm" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) "crn" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) -"cro" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) +"cro" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) "crp" = (/obj/machinery/door/airlock/external{name = "Shuttle Brig Airlock"; req_access_txt = "63; 42"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) "crq" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/space,/area/space/nearstation) "crr" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6337,7 +6337,7 @@ "crS" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/transport) "crT" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "crU" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) -"crV" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"crV" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "crW" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "crX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) @@ -6385,7 +6385,7 @@ "csO" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/supply) "csP" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) "csQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) -"csR" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/space,/area/shuttle/escape) +"csR" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "csS" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "csT" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape) "csU" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating/airless,/area/shuttle/escape) @@ -6394,7 +6394,7 @@ "csX" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) "csY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) "csZ" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/escape) -"cta" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/escape) +"cta" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "ctb" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "ctc" = (/turf/simulated/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) "ctd" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) @@ -6470,7 +6470,7 @@ "cuv" = (/turf/simulated/wall/shuttle,/area/shuttle/escape) "cuw" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "cux" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) -"cuy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"cuy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "cuz" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "cuA" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cuB" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -6504,7 +6504,7 @@ "cvd" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cve" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cvf" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"cvg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"cvg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "cvh" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cvi" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cvj" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -6561,11 +6561,11 @@ "cwi" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cwj" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) "cwk" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "plasma"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cwm" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos) "cwn" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cwo" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 0; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2o"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cwq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) "cwr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) "cws" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) @@ -6622,22 +6622,22 @@ "cxr" = (/obj/machinery/atmospherics/components/binary/valve{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "cxs" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "cxt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) -"cxu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/toxins/mixing) +"cxu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/toxins/mixing) "cxv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cxw" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/medical/cmo) "cxx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/space) "cxy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "cxz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) -"cxA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) +"cxA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) "cxB" = (/obj/item/device/assembly/prox_sensor{pixel_x = -4; pixel_y = 1},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = 9},/obj/item/device/assembly/prox_sensor{pixel_x = 9; pixel_y = -2},/obj/item/device/assembly/prox_sensor{pixel_y = 2},/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing) "cxC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cxD" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cxE" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/machinery/light_switch{dir = 1; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/art) "cxF" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/genetics) "cxG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) -"cxH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/mixing) +"cxH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/mixing) "cxI" = (/obj/item/device/assembly/signaler{pixel_y = 8},/obj/item/device/assembly/signaler{pixel_x = -8; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = 6; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = -2; pixel_y = -2},/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing) -"cxJ" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) +"cxJ" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/deathsposal{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cxK" = (/obj/machinery/power/apc{dir = 8; name = "Toxins Launch Room APC"; pixel_x = -25},/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cxL" = (/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing) "cxM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing) @@ -6646,7 +6646,7 @@ "cxP" = (/obj/structure/table/glass,/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel{icon_state = "whitepurplecorner"},/area/toxins/mixing) "cxQ" = (/obj/item/device/assembly/timer{pixel_x = 5; pixel_y = 4},/obj/item/device/assembly/timer{pixel_x = -4; pixel_y = 2},/obj/item/device/assembly/timer{pixel_x = 6; pixel_y = -4},/obj/item/device/assembly/timer,/obj/structure/table/glass,/obj/machinery/firealarm{dir = 1; pixel_x = -3; pixel_y = -24},/obj/machinery/light_switch{name = "light switch "; pixel_x = 11; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/mixing) "cxR" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cxS" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) +"cxS" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cxT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cxU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cxV" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/mixing) @@ -6663,7 +6663,7 @@ "cyg" = (/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) "cyh" = (/obj/structure/table/glass,/obj/machinery/button/massdriver{id = "toxinsdriver"; pixel_x = 25},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cyi" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/research{name = "Research Division"}) -"cyj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cyj" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera{c_tag = "Xenobiology Center"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology) "cyk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cyl" = (/obj/machinery/light{dir = 8},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cym" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Research Divison Access"; dir = 1; network = list("SS13","RD")},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"}) @@ -6672,7 +6672,7 @@ "cyp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyq" = (/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteredcorner"; dir = 4},/area/medical/research{name = "Research Division"}) -"cys" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cys" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/escape) "cyt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/toxins/xenobiology) "cyv" = (/obj/machinery/camera{c_tag = "Xenobiology North"; dir = 6; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology) @@ -6885,8 +6885,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaaeaVcaVdaVeaQMaVfaQMaQMaVgaVhaViaViaVjaVkaVlaVmaVnaVoaQMaVpaQMaVqaVraVsaNoaNoaNoaVtaNoaNoaVuaVvaVwaTSblOaNoaVyaVzaVAaNsaNtaNuaJKaCdaDeaFZaSzaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsbhRaVCaVDaVDaVDaVDaVCaVDaVDaVCaTZaVEaVFaSIaVGaVHaSLaVIaVJaVKaVLaVMaVNaVOaVPaVQaVRaUqaVSaVTaVUaCdaVVaVWaVXaCdaVYaVZaWaaWbaWcaWdblRaWfaPoaWgaWhaQtaWiaLqaWjaWkaWlaWmaWmaWmaWnaLqaWoaFzaWpaWqaWraWsaWtaWuaWvaWwaWxaWsaWyaWzaWAaWBaWCaWDaTtaWEaVbaaaaaaaaaboHaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaWFaaeaQLaQMaWGaOpaOpaOpaWHaJjaWIaWJaWKaJjaWLaQQaWMaWNaWOaQQaWPaWQaWRaWSaWTaRhaRhaRhaRhaRhaRhaRhaWUaWVaONaOObmGaWWaORaOSaWXaWYaHBaHCaCdaWZaXaaCdaeHbmSaeHbmSbnQaeHaaiaaiaXbaXcaXdaXebhUaVDaXgaXgaXgaVDaXgaXgaXgaVDaTZaXhaSIaSIaSIaSIaXiaSIaSIaSIaXjaXkaXlaXmaXnaXoaXpaUqaXqaXraXsaCdaXtaXuaXuaXvaXwaXxaXyaQpaQpaXzaQpaQpaPoaPoaPoaXAaPoaLqaLqaXBaLqaXCaXDaLqaLqaLqayRaFzaXEaXFaXFaRZaRZaXGaRXaRXaRXaRXaRXaRXaSaaXHaXIaWDaXJaXKaVbaVbaVbaeGboHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaXLaaeaQLaXMaXNaXOaXPaXQaXRaJjaJjaJjaJjaJjaXSaOpaXTaXUaXVaXWaJjaXXaXYaJjaXZaYaaYbaYcaYdaYeaYfaYfaYgaYhaQabmNaMcaMcaMcaQcaMaaYjaYkaYlaCdaDcaDeaCdaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaYqaTZaYraYsaNzaNzaYtaYuaYvaYwaSIaSIaYxaSLaYyaYzaYAaYBaUqaYCaCdaCdaCdaYDaPraCdaCdaYFaYGaYHaYIaYJaYKaYLbqObvHaYOaPoaYPaYQaYRaYSaYTaYUaYQaYQaYVaYWaPoayRaFzaWpaYXaFzaYYaYZaZaaZbaZcaZdaZeaZfaZgaSaaZhaZiaWDaQDaZjaZkaZlaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVDaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVCaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVCaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVDaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIibcpbcqbcrbcsbctaJjaWIaWJaWKaJjbcubcvbcwaZwbcxbcybczbcybcybcybcybcAbcBbcCbcDbcEbcFbcGbcHbcIbcJbeTbcLbcMbcMbcNbcObcPaNuaJKaCdaDeaFZaSzaeHbmSaeHboGbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDbcQcztbcRaVDaXgaVDaTZaYraYsaNzbcSbcTaSLaSLbcUbcVaSIbcWbcXbcYbcZbdabdbbdcbddbdebdfbdgbdhbdibdjbdkbdlayebbObajbakbdmbdnbakbdmbyGaPobdpbdqbdrbdsbdtbdubdvbaqbdwbdxbdybdzaEBbbZbaubdAaRZbdBbdCbazbazbdDbdEbaCbdFaSabdGbdHbdIbdJbdKbdLbdMaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIiaIiaIiaIiaIiaJjaJjaJjaJjaJjbdOaOpbdPaZwbdQbcybdSbdRbdTbdUbdVbdWbdXbdYbdZbeabebbecaPYbedbeeaMabefbegbefaQcaMabbkaHBaHCaCdaDeaFZaSzaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaVDaTZaYraYsaNzaNzbehbeibejbekaSIaSIbelbembenbeobepbeqaLaberaSIaSIbesbetbeuaSIaSIbevayebbObanbanbajbewbajbajbyHaPoaPoaPobeybeybezaPoaPoaYQbyIbeAaPobeBaUKbeCbeDbeEbeFbeGbdCbazbeHbeIbeJbyJbeLaSabeMbeNbpBbePaQDbcnbeQaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHbiGbiGbiGbgibghbgjbeUbeVbeWbeXaJjaSlaOpbeYaZwbeZbcybfabfbbfbbfbbfbbfcbfdbfebffbfgbfhbfibfjbfkbflbfmaNobfnaNobfobfpbfqaHBaHCaCdaDeaFZaSzaeHbmSaeHbmSbnQaeHaaiaaiaXbbfrbfsbftaYpaVDaXgaXgaXgaVDaXgaXgbfuaVDaTZaXhaSIaSIaSIaSIbfvaSIaSIaSIbfwbfxbembfybfzbfAbfBaSIbfCaSIbfDbfEbfFbfGbfHbfIbfJayebbObanbfKbfLbfMbfNbfNbfNbfNbfObfPbfQbfRbfSbfTaPobfUbfVbfWaPobfXaHbbfYaXFaXFaRZaRZbfZaRXaRXaRXaRXaRXaRXaSabgabgbbgcbgdbgebgfbggaVbaeGboHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6905,47 +6905,47 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaMaaMaaMaaMaaMaaMabnGbnKbqKbqLbqMbqNbzJbqPbqMbqQbqRbqSaNubqTbqUbqVbqWbqWbqXbqYaJPcwMaeGaeHaeHaeHaeHaeHaeGaHHaeHaeHaeHaeHaeHaeHaeGaeHaeHaeHaTwcrqaKYaMeaMeaKZaKYaMeaMeaKZaNwaMeaMeaMeaNwaMecseaIFbrabrabrabraaCdaUqbrbaCFbrcaUxbrdbpCbrebrfbrgbrhbpCbribrjbrkbrlbrmbqzbqxbpCbrnbrobpCbrpbpCbrqaHbbrrbkQaeHaeHaeHaeHaeHaeHaeHbkRbqJapjbrsbrtbrubrubrubrubrubrtaeGaeGbnQaeHaeHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrwbrxbrybrzbnIbrAbrBbrCbrDbqfbqfbrEbrFbnKbrGbrHbfqaHBbrIbrJbrKbrLbrMbrNbrOcwQcwNaeGaeHaIyaIyaIyaeHaeGaeGaeHaeHaIyaIyaeHaeGaeGaeHaeHaeHaeHaeHaeGaHHaeGaeGaeGaeHaeHaeGaeHaeHaeHaeHaeHaeHaTwcrqbrRbrSbrTbrUaCdaCdbqraCFboOaPlbrVbpCbrWbrXbpDbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbrYbpCbpCbpCbrZaFzbsabrsbrsbrsbrsbrsbrsbrsbrsbrsbsbbrsbrsbrtbrubrubrubrubscbrtaeGbnQbnQaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsdbsebsebsfbnIbsgboxbshbsibsjbskbslbskbskbnIbnIbsmaHBbsnaCdbsoaCdaCdaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdaCdbsqbsqbsqbsqbsrbssbstbsuaCdbsvbswaCFbkFayebrVbpCbsxbsybszbsybsAbsBbsCbsDbQKbsFbsGbsHbsybsIbsybsJbsKbpCbpGaFzbsLbsMbsNbsObsPbsQbsRbsSbsTbsTbsUbsTbsVbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeGaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbvsbvtbvubvvbvwbvxbvybvzbvzbvAbvBbvCbvDbvEbvFbvGbzKbvIbvJbvKbvLbRGbvMbvMbvNbvObvObvPbvQbvMbvMbvMbvMbvRbvSbvMbvMbvMbvTbvUbvVbvWbvXbvMbvMbvTbvMbvRbvLbvYbvZbwabwbbvMbvRbwcbwdbvMbvMbwebvObvObwfbvMbwgbwhbwibwjbwkbwlbvMbwmbwnbuNbwobpCbwpbrWbpCbwqbrWbpCbwrbrWbpCbwsbrWbpCbwtbwubwvbwwbwvbpCbwxbnYbwybrsbwzbsTbsTbsTbwAbwBbwCbwDbsTbsTbwEbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbwFbwGbrvbwHbwIbwJbwKbwKbwKbwKbwLbwMbwNbwObwPbwPbzLbwRbwSbwTbwUbwTbwTbwTbwTbwTbwVbwWbwTbwTbwTbwTbwTbwTbwUbwTbwTbwTbwXbwTbwYbwZbxabxbbxcbwXbwTbwTbwUbxdbwTbxebwTbwTbwTbxfbxgbxbbxbbxbbxbbxbbxhbxbbxibxjbwTbwTbxdbxebwTbxebwTbxkbxlbpCbxmbxnbpCbxobxnbpCbxpbxnbpCbxqbxnbpCbwvbwubwvbwwbxrbpCbxsbiobxtbxubxvbxwbxxbxxbxybxzbxxbxAbxBbsTbwEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbxCbxDbrvbrvbrvbsebvBbxEbxFbxGbxHbxIbvBbxJbxKbxLbxLbxLbxLbxLbxMbxLbxNbxLbxLbxObxLbxPbxQbxQbxQbxQbxRbxSbxTbSkbxUbxVbxWbSybxYbxZbxXbxXbxXbyabxXbybbxXbxXbycbxXbydbxXbxXbxXbxXbxXbSJbyebyfbygbyhbyhbyibyfbyhbyfbyhbyjbykbpCbylbymbpCbylbynbpCbylbyobpCbylbypbpCbyqbyrbyqbwwbysbpCbytbyubyvbrsbrsbrsbrsbrsbrsbrsbrsbrsbrsbywbwEbrtbrubrubrubrubscbrtaeHbnQaeHaeGaeGaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebyxbyybrvbyzbrvbsebvBbyAbyBbyCbxHbyDbzNbzMbzQbzObzTbzSbzNbzUbzNbzNbAPbzNbzNbzNbAQbAQbAVbAVbAQbAQbAQbAQbAQbAQbyQbyRbySbyTbyUbyTbyTbyTbyTbyVbyTbyWbyXbyYbyYbyYbyYbyYbyYbyYbyYbyYbyZbzabzbbzcbzdbzdbzebzfbzdbzfbzgbzabyZbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzibpCbzjbzkbzkbzlbzmbznbzkbzobzpbzqaRYbzkbzsbztbzubzkbAXbzwbrtbrubrubrubrubrubrtaeGbnQaeHaeHaHHaeGaHHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabaabaabaabaabaabaaeaeGaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaebnQbnQbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaeaeHaeGaeGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbUtbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeHaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrubrubrubrubrubrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaeaeGaeGbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaecxebnQbnQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbMwbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeGaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbFmbvAbFnbFobDgbzNbImbIjbInbFvbEobIobJqbJmbKnbJrbKqbKobKubKtbKvbzNbLBbLAbLDbLCbMqbMobMxbMwbNDbMybNEbBmbFLbyTbFMbFNbFObFPbFQbFRbNFbCCbCDbyYbFTbCFbBwbFUbFVbFWbFXbEMbAqbApbDGbENbApbApbApbArbApbFYbDMbETbFZbyZbyZbyZbyZbyZbyZbyZbGabzhbzhbGbbzhbzhbzhbzhbGcbAebzkbGdbBZbCabGebBZbBZbBZbBZbzobzobGdbGdbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNcpJbFCcpJbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNbFCbFCbFCbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGTbGUbGVaabaabaabaabaabaabaacaacaacaacaacaacaacaadaadaabaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbGWbGXbGYbrvbGibGjbGZbHabsdbrvbsebsebsebOCbsdcqjbOEbOFbrvbOHbOGbOJbOIbOKbTDbPwbTDbPxbIpbVCbIpbPybIqbGobBmbHqbHrbHsbHtbHubHvbHwbHxbHubCCbAebyYbHybBwbBwbBwbHzbHAbELbEMbAqbApbHBbHCbHDbHEbHFbHGbHHbzgbHIbETbApbHJbHKbHLbHMbHNbHObHPbHQbBLbHRbBLbBLbHSbHTbzhbHUbAebzkbHVbBZbHWbHXbHYbHYbHYbHYbHZbGRbzrbIabGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIbbIcbIdbGhbIebIebIebIebIeaabaabaabaadaadaadaadaadaadaabaabaabaaebIfaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbIgbsebGibIhbGibGjbIibsebsebrvbPzbRybRybPAbRybRybRybRybPBbPRbPQbQzbQwbQCbQAbPRbPRbQDbUBcghcarbQEbHnbHobQFbIsbItbIubIvbIwbIxbIybIzbHubCCbAebIAbBwbBwbBwbBwbHzbHAbELbEMbAqbApbIBbzgbICbIDbIEbIFbIGbzgbHIbIHbApbHJbIIbIJbIKbILbIMbINbIObIPbIQbIRbBTbBTbISbzhbHUbAebzkbITbBZbIUbIVbIWbzobIWbzobzobGRbIXbIYbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIZbJabGUbJbbJcbIebJdbJebJfbIeaabaabaabaabaabaabaabaabaabaabaabaaebJgaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbJhbIkbJibJjbJkbJlbsebsebRzbrvbJncobbRCbRCbRCbRCbRCbJobJobJobJpbREbRDbJobGnbGnbRFbYUbYTbRFbGnbGnbGnbJsbBmbGpbHrbJtbJubJvbJwbJxbJybHubCCbAebyYbJzbBwbJAbJBbJCbJDbJEbJFbJGbJHbJIbyZbJJbJKbJLbJMbJNbyZbHIbETbApbJObyZbJPbIKbApbHJbJQbJRbJSbIQbBTbBTbBTbBTbJTbHUbAebzkbJUbzrbGSbJVbJWbJWbJXbzobzobzobDYbDYbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbTobTobTwbTvbzPbzPbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbUtbTobTwbTvbzPbUVbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbLhbLibLjbIebLkbLlbLmbLnavbaaeaaeaaeaaebKfaaeaaeaaeaaeaaeaaebLobLpaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbLqbLrbuGbLsbLtbLubLvbLtbLtbLtbLtbLwbsebRCbUqbTBbUxbJobLybLzbUzbUybUFbUAbJobUIbCtbVybVBbVAbWgbWfbWhbGnbGobBmbLEbHrbHUbKxbHubLFbLGbLHbHubLIbAebyYbLJbLKbBwbBwbHzbLLbyYbLMbLNbLObLPbyZbyZbLQbLRbzbbyZbyZbLSbLTbLUbLVbyZbyZbLWbLXbJQbJQbLYbLZbMabzhbzhbzhbzhbzhbHUbAebzkbzkbzkbzkbMbbzkbzkbzkbzkbzkbzkbzkbzkbzkbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebIebIebMcbIebMdbMebMfbMgbMhbMiaaebKfaaeaaeaabaabaabaabaabaaeaaeaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbLqbMjbvtbMkbMlbMmbMnbIkbIkbIkbIkbWkbsebRCbWmbWlbWmbJobMubMvbWpbWobWqbMzbJobWrbCtbDvbCpbWsbCrbWubDzbXkbMAbBmbGpbHrbMBbMCbMDbMEbMFbMGbHubLIbAebMHbMIbMJbMKbMKbMLbMMbMNbMObMPbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbNcbNlbNmbNnbNobNpbMBbNqbNqbNqbNrbNqbNqbNqbNqbBXbNsbNtbNubNubNubNubNubNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvcwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbLUbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJocdObCtbEvceGcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbOZbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYbPXbNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabNlbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbMKbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbMKbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbMKbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUbUVbUWbWebUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbUWbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJobWebCtbEvccxcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbPcbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYcdObNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabRdbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbRTbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbRTbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbRTbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUcoxceGcpJbUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbVtbVtbVsaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaecpAcpBcpBbVubVubVubVubVubNBcpucxqbTpbTqbVvbTsbVwbTsbVxcxrcxsbTybTybTybVzcxGcxIcxHbIpbVCbVDbIqbGobVEbHqbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbOSbOSbOSbVFbOSbOSbOSbOSbOSbOSbVGbOSbOSbVHbVIbNnbNnbNnbNnbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbTabUebPlbVUbVUbVUbVUbVVbVWbVmbVXbRlbVYbVZbPlbWabUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcxJbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNcxSbXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcsRbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNctabXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtbYdbYebVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybQybVubYfbYgbVubVubYhbYhbYhbYhbYhbYhbYhcxZbIqbIqbIqbIqbIqbIqbYjbYkcyabYlbYkbYkbYmbYnbYobYpbYqbYrbHrbHrbHrbYsbYsbYsbYtbYsbYsbYscembYsbYsbYsbYsbYsbYsbYsbPmbVIbWzbWAbXJbWzbXJbXJbVIbYvbYwbNnbYxbRZbYybYzbYAbTabYBbYCbYDbYEbYFbTabTabPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbYabCCbYGbYHbYIbYJbYcbYcbYcaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbYLbYMbWbbYLbYMbWbbWbbVtbYNbVtbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybYObYPbYQbYRbYScqmcqNcybcydcycbYZbZabZbbTDbZcbZdbZebTDbTDbTDbTDcxvbZfbTDbTDbTCbZgbIqbGobBmbGpbHrbZhbZibYsbZjbZkbZlbYsbZmbZnbZobZpbZnbYsbZnbZqbZrbYsbPmbVIbWzbZsbXJbWzbXJbZtbVIbZubZvbNnbNnbNnbJTbNnbNnbTabTabTabZwbTabTabTacvUbZybZzbZAbZBbZCbOrbOrbOrbOrbOrbOrbOrbOrbZDbZEbZFbZGbZHbZIbZJbZKbZJbZLbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZNbZObZObZPaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbZVbZWbZXbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebZYbQybZZcaacabcaccadcaebIpbIpbIpcafcagcahcaibIpcajcakcalcyecancaocapcyfcarcarcarcasbIpbIqcatbBmcaubHrbHrbHrbYscavcawcaxbYscaycazcygcaBbZncaCbZnbZrbZrbYsbPmbVIbWzcaDcaEbWzbXJcaFbVIbVIbVIbVIbAecaGbAebAebAecaHbAebAebLIbAebAebAebAebLIbAebAebAecaIcaJcaKcaLcaMcaMcaMcaMcaMcaNcaObYbcaPcaQcaRbYcbYcbYcaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbYLcaTcaUbZRbZSbZTcaVcaTcaTcaTcaTcaWbVsaaeaaeaaeaaebWdaaeaaeaaeaaebWdaaeaaebQycyhcaacaYcaZbVucaecbacbbcbccbdcbecbfcbgbIpcbhbYhcbibYhcbjbYhbYhcbkcblbYhbYhbYhbYhbIqcbmbBmcbnbHrcbocbpbYscbqbZncbrbYscbscbtcbucbvcbwbYsbZncbxbZrbYsbPmbVIbVIbVIbVIbVIbVIbVIbVIcbycbzbOrbOrcbAbOrbOrbOrbOrbOrbOrcbAbOrbOrbOrbOrcbBcbCcbCcbCcbCcbDcbEcbFcbGcbGcbGcbGcbGcbGcbGbYbbYbbYbbYbbYcaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmagmagnaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwccxccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcyjcarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwcxJccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcxScarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbYLcdKcdKcdLbZScdMcdKcdKcdKcdKcdKcdKbVtaaeaaeaaeaaeaaeaaeaaeaaecdNcdNcdNcdNbQybVubVubVubVubVubYhbYhcahcahcbfcahbYhcylbIpcbTbYhcdPcdQcdRcdScbYcdTcdUcdVcdWcdXcymbIqcdZbBmbTGbYsbYsbYsbYsbYsbYsbYsbYsbYsceacebceccedbYsceebYscefccrccrcegcehccrccrccrccrccrccrccrccrccrccrceiceYcljcelcfTcelcgxcfSceoccrcdvbNocepcbCcctceqcercescescetceucevceucewcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbZVbZWbZXbZRbZSbZTcexbZWbZWbZWbZWceybVsaaeaaeaaeaaebWdaaeaaeaaecdNcezcezceAcezcezceBceCceCceCceBbSHbIpceDceEceFcyncyobIpcbTbYhcbicwBcbibYhbYhceJceKbYhbYhceLbYhbIqceMbBmbUDbYsceNceOcePceQbYsbZnbZnceRceSbZobZnceTceUbZnbZnbZnccrceVceWcelcdxceXcfUceZceZceZcelcelcdxcelcelcfdcelcelchccelcelcfebIrccrcfgcfgcfgcbGcbGcbCcbCcbCcbCcbCcbGcbGcbGcbGcbGcbGcbGcbGcbGaaeaaeaaeaaeaaeagmaaebUncfhbUpaaebUncfhbUpaaebUncfhbUpaaeagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbYLcaTcaUbVtaabaaeaaeaaeaaeaaeaaeaaecdNcficfjcfjcfkcflcfmcflcflcflcfncfocfocfpcfqcfrcfqcypcfqcftcfucfvcyqcyrcfycfzcfAbVCbYhcfBcfCcfDbIqbGobBmcfEbYscfFcawcckcfGcfHcfIcckcckcfJcfKcfLcfMcfNcfOcfOcfOccrcfPcfQcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfVcfRcfRcencfRcfWcenchgchdcelcfXcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicyscarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicghcarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabbrvbrvcdNcdNcdNcdNcyIcdNcdNcdNcdNcdNcdNcgEcbiczccbjcgEbIqbIqbIqbIqbIqbIqcggbIpbIpbVCcgIcgJbYhcfBcgKcfDbIqcgLbBmcgMcgNcgOcgPcgQcgPcgRcgPcgPcgPcgScgPcgPcgTcfOcfOcgUcgVccrcgWcgXcgYcgZcgZcgZcgZcffcgZcgZcejchaciHciLcejcgZcgZcgZcgZchbcgZciOcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeavbaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabaabbrvchkchlchlchlbrvchmchnchochpchpchqchrcyuchschuckHcyvchxchychzchzchzchncywchBchBchCchBchBchDchDchDchDchDbGochEchFchGbZncfOchHcfOchIcfOcfOcfOchJchKcfOcfOcfOcfOchLchMccrcelcgwcgzchNchOchOchOchOchOchOchOcgzcjCchOchOchOchOchOchOchQchOciRcjCcelcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbchWbWbbVtbVtaabaabaabaabaabaabaabaabaabaabaabbrvchXchYchYchYbrvbsechnchZciachzcibciccidciecifcigcihciicijchzchzcikchncyxchBcilcimcinchBciocipciqciqchDbCxcirciscitcgOcgOciucgOcitcivbZnbZnciwcfNbZncixcfNcfOcgtcguccrcelcgwcgzciychOcizciAciBciCciCchOcgzcjCchOcjAcjDcjBciIciJciKchOckccjIcgZckgchechfcyychfclpcllclqccraaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6954,11 +6954,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabbrvbrvbrvbrvbLxckDbLxbsebsebrvckichlchlchlbrvbsechnchochpchpckjckkciYchtciZchvcjacklckmchzchzchzchncyxchBcknckocjgckpchBckqckrckschDcktckuckvbYsbYsbYsbYsbYsbYsbYsbYsbYsbYtbYsbYsccrccrccrccrccrccrcelcgwcgzcgwcelcjvckwckwckwcjycmVcnucmWchTclmclncelcelcelclochOcnWcjCcelcgBcfYccraaeccrccrccrccrccrchScjEaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabbrvckCclzbrvbsebsebsebsebsebrvbrvbrvbrvbrvbrvbsechnchZciachzckFcicckGchtcjJchvckIciickJchzchzcikchncyAcyBckLcyCckNckOchBckrckrckPchDckQckRckSckTckUckUckUckVckWckXckYckZclaclbclccldcleclfclgclhclicnYchbcljcgwchOclkclkcoqclkclkchOchPcelchTcmbcmccelcelcmdcmechOcnWcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcvVclxbsebsebLxckDclyclAcxaclBbrvbsebsebsechnchzchzchzclCclDciYcyDcnfchvcjacjbclFchpchpcjdchnbGichBclGclGclGclHchBckrclIclJclKclLclMclNclOclOclOclOclOclOclOclOclPclQclRclSclTclUclVclWclXclYclVclZcmacgwchOchOchOchOchOchOchOcnZclVcmKcmLcmMcmNcmOcmOcmPchOcowcjCcelcgBcrhccraaeccrccrccrccrccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcoxcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcyjcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcmXcmYbsebsebLxckhbsecmZcnacxbbrvbsechnchzchzcnbchzchncnccndcnecmmcnGclEcjacnhcnichzchzchzchnbGichBcnjcmncnkcmnchBcmocmpcmqchDcnlcnmcnncmvaabaaeaaeaaeaaeaaeaabcmvcmwcnocnpcnpcnqcnrcnscntchOcnvclZcnwcnwcnxcnwcnwcnwcnwcnwcnxcnwcnycelcelcelcelcelcelcelcpocpscppcqccqacfYchTaaechTchUchjchjccraaecjEaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcnzcnAbrvbsebsebsebsebsebLxbLxbLxbrvbsechnchzchzchzchzchncnBcnCcnDcnHcolcnHckIciicnIchzchzcikchnbGichBchBchBchBchBchBchDchDchDcqocyFckRcmtcmvaabaabaaeaaeaaeaaeaaecmvcnOcnPcnQcnRcnScnTcnUcnVchOcelcfQcqxcelcmhcmDcmDcmDcricmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcuUcnXcvEcwacvTcmTcmUcyGcmUcwdchjchjccraaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebsebsebsecvXcobbsebQvbsechncodchzcoecofcogcohcoicokcojchtcojcjacjbcoochpchpcjdchnbGibsebsecyHbsebsebsecnJbsecyJczdcnMcyKcmtcotcmvcmvcmvcmvcmvcmvcmvcmucnOcnPcoucovcelcelcelcpKcwccfRcgXcelcelcwecwfciMciMcwgciNciMciMciNciMciMciMciNciMciMciMciNcmWcelcwhcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicprcwkcwjcwmcwlcwkcwjcwncpkcwkcwocwmcwpcwkcwocwmcpqcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicpkcwkcwjcwmcpqcwkcwjcwncprcwkcwocwmcwlcwkcwocwmcwpcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbrvbrvbrvcpucpubrvbrvbrvbrvbsechnchzcpvchzchzcpwcpxcpycoKchtcnDchtcyPcoLcoNcoNcoNcoNchnbsecmucmucmucmucmucmucmucmucmucoOcrgckRcpPcpPcnPcpPcpPcpPcpQcnPcpRcpRcpScpTccrchTchTccrccrccrccrcfYcfYcpUcpZcwtcfYcwucwwcwvcwxcpUcpVcpWcfYcpUcpXcpWcfYcpUcpYcpWcfYcfYcfYcfYcfYccraaeagmagncgCagmagmcjEagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaecqdcqecqecqecqebsechnchzchzchzchzchncqfcqgcpzchtcnDchtcyRcyQcoNcoNcoNcpCchnbsecmucpFcpGcpHcpIcyScqycpLcpMcyTcpOcyUcqqcqrcqrcqrcqrcqrcqscqrcqrcqrcqtcqucmuaeHaeHaeHaeHaeHccrcqvcqzcqwcfYcwCcqvcqwcfYcwDczfcqwcfYcwEcqvcqwcfYcwFcqvcqwcfYcwGczgcfYcqvcfYcfYccraaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaaeaaeaaecqdcqdcqdcqCcqDcqEcqFbsechnchzchzcqGchzchncqHcqIcqhcpDcqichtcyVcqJcoNcoNcoNcoNchnbEicqlcyWcyYcyXcyZcyZcyYcyYczaczaczaczbcqOcpPcnPcpPcpPcpPcqMcnPcpRcpRcnPczhcmuaeHaeHaeHaeHaeHccrccrccrcqPchTcqQccrcwHcwJcwIccrcqPchTcqQccrcqPchTcqQccrcqPchTcqQccrccrccrccrcptccrccraeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6967,17 +6967,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeagmagmagmagnagmaaecqRaaeaaeaaeaaeaaecqdcqecqecqecqecrrbsebsebrvbrvbrvbrvbrvcxkcxlbsecxncxmcqZbsecxlbKicqjbrvbrvbrvbrvcrscrtcruaeHaeHaeHcrscrtcruaeGaeGaeGcrscrtcruaeHaeHaeHcrscrtcruaaaaaaaeHaeGaHHaeGaeGaeGaeGaeGcwPcrEcrFcrGcwPcwScwUcwTcwPcrvcrwcrxcwPcrycrzcrAcwPcrBcrCcrDcwPaeHaeHccrccrccrccraeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaebrvbrvbrvbrvbrvaaaaaaaaabrvbrvbrvcpucpucpucpucpubrvbrvbrvbrvaaaaaacxocrHcrmcrIaeHaeHaeHcrHcrmcrIaeGaeGaeGcrHcrmcrIaeHaeHaeHcrHcrmcrIaaaaaaaeHaeHaeGaHHaHHaeGbnQaeGcwPcrPcrWcrQcwPclvcmjcwVcwPcrJcrTcrKcwPcrLcrUcrMcwPcrNcrVcrOcwPaeHaeHaeGaeHaeHaeHaeHaeHcxfcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsPcsPczecsSczecsTaeHaeHcsUcsVcsUaeHaeHaeHcsUcsWcsUaeHaeHcsQcsXcsYcsXcsTaaaaeHaeHaeGaeHaeGaeHaHHaeGcwPcrPcrPcrPcwPclvclvclvcwPcrJcrJcrJcwPcrLcrLcrLcwPcrNcrNcrNcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeagmaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsXctlctmctectectectfctncsXctoctgctpctqctqctqctoctgctpcsXcsXctcctrctkctjctfcsTaeHaeHaeHaeHaeHaeHcxhaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGcxhaeGaeGaeGaeGaeGaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXctncsXcsXcsXcsXctBctgctgctgctgctgctgctgctgctgctgctgctgctgctCctkctkctkczectDctiaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectFctEctHctGctJctIctKctgctMctLctLctLctLctgctLctLctLctLctNctgczectOctkctkctCctkczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXcsRcsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXczecsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectWctEctYctXcuactZcubctgctMctxctxctxctxctgctxctxctxctxctNctgczecucctgctgcudctgczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgcsRcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgctqcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecsccsccsccsccscaaecsfaaecsccsccsccsccscaaeagmaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXctlcsPcuhcsPcuhctlcsPcsXcsXcsXcsXctqctqctqcsXcsXcsXcsXcsXctccupctgcuqctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnagmagmaaeagmaaecsgaaeaaeagmagnagmagmagmagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuoctnctnczecuvczecunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXczecsXcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecshaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index b1ccc5a4938..4abe1355952 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -276,7 +276,7 @@ "afp" = (/obj/structure/cable/cyan{icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai{name = "\improper AI Core"}) "afq" = (/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 4},/area/engine/engineering) "afr" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine/n20,/area/engine/engineering) -"afs" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/engine/engineering) +"afs" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/engine/engineering) "aft" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/n20,/area/engine/engineering) "afu" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/general/visible{icon_state = "intact"; dir = 10},/turf/space,/area/space) "afv" = (/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -2338,7 +2338,7 @@ "aSY" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/magnetic_controller{autolink = 1},/turf/simulated/floor/plating,/area/toxins/misc_lab) "aSZ" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 9},/area/toxins/misc_lab) "aTa" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 5},/area/toxins/misc_lab) -"aTb" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) +"aTb" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) "aTc" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) "aTd" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel/white,/area/toxins/xenobiology) "aTe" = (/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/simulated/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2656,7 +2656,7 @@ "aZe" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aZf" = (/obj/structure/closet/crate/secure/hydrosec{req_access_txt = "35"},/obj/item/seeds/kudzuseed{potency = 0; production = 8},/obj/item/seeds/chilighost,/obj/item/seeds/deathberryseed,/obj/item/device/gps,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aZg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 5},/turf/simulated/floor/wood,/area/security/brig) -"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/wood,/area/security/brig) +"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera/detective,/turf/simulated/floor/wood,/area/security/brig) "aZi" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/security/brig) "aZj" = (/obj/machinery/computer/pandemic{layer = 2.5; pixel_x = -4},/turf/simulated/floor/plasteel/white,/area/medical/virology) "aZk" = (/obj/structure/reagent_dispensers/virusfood{density = 0; pixel_y = -32},/turf/simulated/floor/plasteel/white,/area/medical/virology) diff --git a/_maps/map_files/DiscStation/DiscStation.dmm b/_maps/map_files/DiscStation/DiscStation.dmm index eb32f869b40..ee4fba18088 100644 --- a/_maps/map_files/DiscStation/DiscStation.dmm +++ b/_maps/map_files/DiscStation/DiscStation.dmm @@ -1,7 +1,7 @@ "aaa" = (/turf/space,/area/space) "aab" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aac" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) -"aad" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"aad" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "aae" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "aaf" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aag" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -35,7 +35,7 @@ "aaI" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaJ" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaK" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"aaL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"aaL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "aaM" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaN" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaO" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -133,14 +133,14 @@ "acC" = (/turf/space,/turf/simulated/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/shuttle/pod_1) "acD" = (/turf/simulated/wall/r_wall,/area/gateway) "acE" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"acF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"acF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "acG" = (/turf/simulated/wall,/area/maintenance/auxsolarstarboard) -"acH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"acH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "acI" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "acJ" = (/turf/simulated/wall,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "acK" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "acL" = (/turf/simulated/wall,/area/ai_monitored/storage/satellite) -"acM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) +"acM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "acN" = (/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/turret_protected/ai) "acO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"},/area/turret_protected/ai) "acP" = (/obj/machinery/door/window{dir = 1; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) @@ -197,7 +197,7 @@ "adO" = (/obj/machinery/atmospherics/components/binary/pump/on{tag = "icon-pump_map (NORTH)"; icon_state = "pump_map"; dir = 1},/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite) "adP" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite) "adQ" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard) -"adR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"adR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) "adS" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_1) "adT" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "adU" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_1) @@ -238,9 +238,9 @@ "aeD" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aeE" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aeF" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aeG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aeH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aeI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"aeG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"aeH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"aeI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aeJ" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aeK" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aeL" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite) @@ -307,7 +307,7 @@ "afU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "afV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "afW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"afX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) +"afX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "afY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "afZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "aga" = (/obj/machinery/door/firedoor,/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) @@ -334,7 +334,7 @@ "agv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "agw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "agx" = (/obj/structure/bed/stool,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"agy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) +"agy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "agz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/orange{tag = "icon-1-4"; icon_state = "1-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "agA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "agB" = (/obj/machinery/door/airlock/maintenance_hatch{name = "turret maintenance hatch"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/satellite) @@ -345,7 +345,7 @@ "agG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "MiniSat Ante Turrets"},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/turret_protected/ai) "agH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "agI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) -"agJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) +"agJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "agK" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/turf/space,/area/space) "agL" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "agM" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless,/area/space/nearstation) @@ -404,8 +404,8 @@ "ahN" = (/turf/simulated/floor/plating/airless{dir = 9; icon_state = "warnplate"},/area/toxins/test_area) "ahO" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "ahP" = (/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 5},/area/toxins/test_area) -"ahQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"ahR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) +"ahQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) +"ahR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "ahS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/orange{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "ahT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-1-8"; icon_state = "1-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite) "ahU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (SOUTHWEST)"; icon_state = "darkpurple"; dir = 10},/area/turret_protected/ai) @@ -454,10 +454,10 @@ "aiL" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation) "aiM" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation) "aiN" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/hallway/primary/starboard) -"aiO" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) -"aiP" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) -"aiQ" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) -"aiR" = (/obj/structure/transit_tube{icon_state = "W-SE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aiO" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aiP" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aiQ" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"aiR" = (/obj/structure/transit_tube{icon_state = "W-SE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) "aiS" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/flora/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "aiT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.1; on = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "aiU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel/darkpurple/side{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/hallway/primary/starboard) @@ -468,7 +468,7 @@ "aiZ" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/toxins/mixing) "aja" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/mixing) "ajb" = (/obj/machinery/atmospherics/components/binary/volume_pump{tag = "icon-volpump_map (WEST)"; icon_state = "volpump_map"; dir = 8},/turf/simulated/floor/plasteel,/area/toxins/mixing) -"ajc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) +"ajc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) "ajd" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing) "aje" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; name = "mixing vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine,/area/toxins/mixing) "ajf" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) @@ -493,7 +493,7 @@ "ajy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTH)"; icon_state = "darkpurple"; dir = 1},/area/turret_protected/aisat_interior) "ajz" = (/obj/machinery/computer/station_alert,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTH)"; icon_state = "darkpurple"; dir = 1},/area/turret_protected/aisat_interior) "ajA" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/turret_protected/aisat_interior) -"ajB" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"ajB" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) "ajC" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/sign/directions/security,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "ajD" = (/turf/simulated/floor/plasteel{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/area/hallway/primary/starboard) "ajE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkpurple/corner{tag = "icon-darkpurplecorners (EAST)"; icon_state = "darkpurplecorners"; dir = 4},/area/hallway/primary/starboard) @@ -502,7 +502,7 @@ "ajH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "ajI" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "ajJ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; name = "server vent"; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) -"ajK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server) +"ajK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server) "ajL" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/camera{c_tag = "Research Server"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "ajM" = (/obj/machinery/power/apc{dir = 1; name = "Server Room APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "ajN" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) @@ -518,7 +518,7 @@ "ajX" = (/obj/structure/closet/firecloset,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "ajY" = (/obj/structure/closet/emcloset,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "ajZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aka" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"aka" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "akb" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "akc" = (/obj/machinery/power/smes,/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "akd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -546,7 +546,7 @@ "akz" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Lobby East"; dir = 8; network = list("MINE")},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/turret_protected/aisat_interior) "akA" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/satellite) "akB" = (/obj/structure/transit_tube{tag = "icon-W-NE-SE"; icon_state = "W-NE-SE"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation) -"akC" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"akC" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/starboard) "akD" = (/turf/simulated/floor/plasteel{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/hallway/primary/starboard) "akE" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "akF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) @@ -605,7 +605,7 @@ "alG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "alH" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "alI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; name = "server vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) -"alJ" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server) +"alJ" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server) "alK" = (/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "alL" = (/obj/machinery/computer/rdservercontrol,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "alM" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) @@ -641,7 +641,7 @@ "amq" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/lattice,/turf/space,/area/space) "amr" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/lattice,/turf/space,/area/space) "ams" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/simulated/floor/plating/airless,/area/space/nearstation) -"amt" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"amt" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) "amu" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/flora/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "amv" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/vending/cola,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "amw" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/toxins/storage) @@ -691,7 +691,7 @@ "ano" = (/obj/machinery/power/apc{dir = 4; name = "Research Lab APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/toxins/lab) "anp" = (/turf/simulated/wall,/area/toxins/mixing) "anq" = (/obj/machinery/door/airlock/research{name = "Testing Lab"; req_access_txt = "47"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/toxins/mixing) -"anr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/toxins/mixing) +"anr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/toxins/mixing) "ans" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/toxins/mixing) "ant" = (/obj/machinery/light_switch{pixel_x = -23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "anu" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/mixing) @@ -703,8 +703,8 @@ "anA" = (/obj/effect/decal/cleanable/oil/streak,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/mouse/white,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "anB" = (/turf/simulated/wall,/area/hallway/primary/port) "anC" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) -"anD" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port) -"anE" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port) +"anD" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port) +"anE" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port) "anF" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation) "anG" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/space/nearstation) "anH" = (/obj/structure/lattice/catwalk,/turf/space,/area/space) @@ -742,7 +742,7 @@ "aon" = (/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "aoo" = (/obj/structure/sign/pods{pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/hallway/primary/port) "aop" = (/obj/structure/transit_tube{icon_state = "S-NE"},/obj/structure/sign/directions/science,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) -"aoq" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aoq" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "aor" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "aos" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation) "aot" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/space,/area/space) @@ -771,7 +771,7 @@ "aoQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aoR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aoS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) -"aoT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/mixing) +"aoT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/mixing) "aoU" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "aoV" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "aoW" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) @@ -781,11 +781,11 @@ "apa" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/toxins/test_area) "apb" = (/obj/machinery/button/massdriver{dir = 2; id = "toxinsdriver"; pixel_y = 24},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area) "apc" = (/obj/machinery/doppler_array{dir = 4},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area) -"apd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/test_area) +"apd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/test_area) "ape" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "apf" = (/turf/simulated/floor/plasteel{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/hallway/primary/port) "apg" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; reverse_launch = 1; tag = "icon-closed (EAST)"},/obj/structure/transit_tube_pod,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) -"aph" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/port) +"aph" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/port) "api" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation) "apj" = (/obj/structure/transit_tube{tag = "icon-E-SW-NW"; icon_state = "E-SW-NW"},/turf/space,/area/space) "apk" = (/obj/structure/transit_tube{tag = "icon-E-W-Pass"; icon_state = "E-W-Pass"},/turf/simulated/floor/plating/airless,/area/space/nearstation) @@ -803,7 +803,7 @@ "apw" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/hallway/primary/starboard) "apx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "apy" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) -"apz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"apz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "apA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "apB" = (/obj/machinery/computer/area_atmos,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "apC" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/toxins/lab) @@ -828,7 +828,7 @@ "apV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "apW" = (/turf/simulated/floor/plasteel{tag = "icon-darkpurple (SOUTHEAST)"; icon_state = "darkpurple"; dir = 6},/area/hallway/primary/port) "apX" = (/obj/structure/transit_tube{icon_state = "N-SE"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) -"apY" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"apY" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "apZ" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation) "aqa" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/turf/space,/area/space) "aqb" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space) @@ -845,7 +845,7 @@ "aqm" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab) "aqn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aqo" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) -"aqp" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) +"aqp" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing) "aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "aqr" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "aqs" = (/obj/machinery/portable_atmospherics/canister,/obj/item/device/radio/intercom{pixel_x = 30; pixel_y = 0},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) @@ -865,7 +865,7 @@ "aqG" = (/obj/machinery/power/apc{dir = 8; name = "Port Primary Hall APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "aqH" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "aqI" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/structure/flora/kirbyplants{icon_state = "plant-08"; layer = 4.1; tag = "icon-plant-08"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) -"aqJ" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aqJ" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "aqK" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "aqL" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation) "aqM" = (/obj/structure/transit_tube{dir = 2; icon_state = "N-S-Pass"; tag = "icon-E-W-Pass"},/turf/space,/area/space) @@ -880,7 +880,7 @@ "aqV" = (/obj/item/weapon/folder/white,/obj/structure/table,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aqW" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aqX" = (/obj/structure/flora/kirbyplants{icon_state = "plant-07"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-07"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) -"aqY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab) +"aqY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab) "aqZ" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab) "ara" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "arb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) @@ -912,7 +912,7 @@ "arB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/tools) "arC" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) "arD" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-darkpurple"; icon_state = "darkpurple"},/area/turret_protected/aisat_interior) -"arE" = (/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/hallway/primary/port) +"arE" = (/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/hallway/primary/port) "arF" = (/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/space/nearstation) "arG" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "arH" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/space,/area/space) @@ -970,7 +970,7 @@ "asH" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport) "asI" = (/obj/machinery/computer/shuttle/ferry/request,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport) "asJ" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport) -"asK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"asK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard) "asL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard) "asM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "asN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard) @@ -1078,7 +1078,7 @@ "auL" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/science) "auM" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of your own office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/machinery/camera{c_tag = "Research Security Post"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/science) "auN" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/light_switch{pixel_y = 23},/obj/item/weapon/screwdriver{pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/science) -"auO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/science) +"auO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/science) "auP" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "auQ" = (/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "auR" = (/obj/structure/closet/crate,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/alien,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -1099,9 +1099,9 @@ "avg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "avh" = (/obj/structure/table/glass,/obj/item/weapon/storage/bag/trash,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "avi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) -"avj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/storage/tools) +"avj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/storage/tools) "avk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/tools) -"avl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tools) +"avl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tools) "avm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/port) "avn" = (/turf/simulated/floor/plasteel,/area/hallway/primary/port) "avo" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/port) @@ -1109,8 +1109,8 @@ "avq" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/starboard) "avr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard) "avs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/toxins/lab) -"avt" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/lab) -"avu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab) +"avt" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/lab) +"avu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab) "avv" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{dir = 1; name = "Research and Development Desk"; req_access_txt = "7"},/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/turf/simulated/floor/plating,/area/toxins/lab) "avw" = (/obj/structure/flora/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab) "avx" = (/obj/structure/flora/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) @@ -1192,14 +1192,14 @@ "awV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab) "awW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) "awX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) -"awY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/science) +"awY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/science) "awZ" = (/obj/structure/filingcabinet,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/security/checkpoint/science) "axa" = (/obj/machinery/computer/secure_data,/obj/machinery/power/apc{dir = 2; name = "Science Security APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint/science) "axb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/checkpoint/science) "axc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/security/checkpoint/science) "axd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "axe" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/paper/range,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) -"axf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) +"axf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) "axg" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/misc_lab) "axh" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "axi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/misc_lab) @@ -1213,10 +1213,10 @@ "axq" = (/obj/item/weapon/bedsheet,/obj/structure/bed,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHEAST)"; icon_state = "whitegreen"; dir = 5},/area/medical/virology) "axr" = (/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/virology) "axs" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/grass,/area/medical/virology) -"axt" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology) +"axt" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "axu" = (/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/genetics_cloning) "axv" = (/obj/machinery/light/small{dir = 1},/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/genetics_cloning) -"axw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics_cloning) +"axw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics_cloning) "axx" = (/turf/simulated/floor/plasteel/blue/side{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/hallway/primary/port) "axy" = (/turf/simulated/floor/plasteel/neutral/corner,/area/hallway/primary/port) "axz" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/neutral/side,/area/hallway/primary/port) @@ -1293,7 +1293,7 @@ "ayS" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "ayT" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "ayU" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) -"ayV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) +"ayV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "ayW" = (/obj/structure/lattice,/turf/space,/area/construction) "ayX" = (/turf/space,/area/construction) "ayY" = (/turf/simulated/floor/plasteel,/area/construction) @@ -1308,7 +1308,7 @@ "azh" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "azi" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/obj/machinery/power/apc{dir = 1; name = "RD Office APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "azj" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"azk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"azk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) "azl" = (/turf/simulated/wall,/area/toxins/misc_lab) "azm" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "azn" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) @@ -1335,14 +1335,14 @@ "azI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.1; on = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "azJ" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "azK" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"azL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"azM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/explab) +"azL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"azM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/explab) "azN" = (/obj/structure/closet/emcloset{pixel_x = -2},/turf/simulated/floor/plasteel,/area/toxins/explab) "azO" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/item/device/radio/off,/turf/simulated/floor/plasteel,/area/toxins/explab) "azP" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 0; pixel_y = 6},/turf/simulated/floor/plasteel,/area/toxins/explab) "azQ" = (/obj/structure/table,/obj/item/weapon/pen,/obj/machinery/camera{c_tag = "Experimentor Lab"; dir = 2; network = list("SS13","RD")},/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel,/area/toxins/explab) "azR" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/book/manual/experimentor,/turf/simulated/floor/plasteel,/area/toxins/explab) -"azS" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) +"azS" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) "azT" = (/turf/simulated/floor/engine,/area/toxins/explab) "azU" = (/turf/simulated/wall/r_wall,/area/toxins/explab) "azV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) @@ -1374,7 +1374,7 @@ "aAv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "aAw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "aAx" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"aAy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"aAy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) "aAz" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) "aAA" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{name = "Experimentation Lab"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "aAB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/explab) @@ -1418,7 +1418,7 @@ "aBn" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab) "aBo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "aBp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab) -"aBq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating,/area/toxins/explab) +"aBq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating,/area/toxins/explab) "aBr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab) "aBs" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; layer = 2.1; on = 1},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab) "aBt" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab) @@ -1464,7 +1464,7 @@ "aCh" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/port) "aCi" = (/obj/item/stack/rods,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "aCj" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/space/nearstation) -"aCk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/construction) +"aCk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/construction) "aCl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/caution{tag = "icon-caution (WEST)"; icon_state = "caution"; dir = 8},/area/hallway/primary/starboard) "aCm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/hor) "aCn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/hor) @@ -1512,7 +1512,7 @@ "aDd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/toxins/lab) "aDe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) "aDf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/lab) -"aDg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"aDg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "aDh" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "aDi" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "aDj" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -1591,7 +1591,7 @@ "aEE" = (/obj/machinery/light,/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab) "aEF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab) "aEG" = (/obj/machinery/firealarm{pixel_y = -28},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab) -"aEH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/xenobio,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"aEH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/xenobio,/turf/simulated/floor/plating,/area/toxins/xenobiology) "aEI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "aEJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "aEK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -1726,10 +1726,10 @@ "aHj" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/warnwhite,/area/toxins/xenobiology) "aHk" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology) "aHl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"aHm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"aHm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "aHn" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) "aHo" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"aHp" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"aHp" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "aHq" = (/turf/simulated/floor/engine,/area/toxins/xenobiology) "aHr" = (/obj/machinery/mineral/stacking_unit_console{dir = 2; machinedir = 8},/turf/simulated/wall,/area/maintenance/disposal) "aHs" = (/obj/machinery/conveyor{dir = 6; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) @@ -1780,7 +1780,7 @@ "aIl" = (/obj/structure/bed/stool,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) "aIm" = (/obj/item/conveyor_switch_construct{tag = "garbage"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/maintenance/disposal) "aIn" = (/obj/structure/window/reinforced,/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/disposal) -"aIo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal) +"aIo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/disposal) "aIp" = (/obj/machinery/light_construct/small{tag = "icon-bulb-construct-stage1 (NORTH)"; icon_state = "bulb-construct-stage1"; dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "aIq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "CM Office APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) "aIr" = (/obj/structure/table/glass,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) @@ -1788,7 +1788,7 @@ "aIt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "aIu" = (/obj/machinery/doorButtons/access_button{dir = 8; idDoor = "virology_airlock_exterior"; idSelf = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 26; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{autoclose = 0; frequency = 1449; icon_state = "closed"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "aIv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics"; req_access_txt = "5; 9"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"aIw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/genetics_cloning) +"aIw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/genetics_cloning) "aIx" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "aIy" = (/obj/structure/rack,/obj/item/weapon/tank/internals/oxygen/red,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"}) "aIz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space) @@ -1812,7 +1812,7 @@ "aIR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/construction) "aIS" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard) "aIT" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "purple"},/area/hallway/primary/starboard) -"aIU" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/assembly/robotics) +"aIU" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/assembly/robotics) "aIV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/assembly/robotics) "aIW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/assembly/robotics) "aIX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/assembly/robotics) @@ -1820,10 +1820,10 @@ "aIZ" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) "aJa" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/assembly/robotics) "aJb" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"aJc" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"aJc" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology) "aJd" = (/obj/machinery/door/window/southleft{dir = 1; name = "Test Chamber"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"aJe" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"aJf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"aJe" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"aJf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology) "aJg" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) "aJh" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) "aJi" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -1848,7 +1848,7 @@ "aJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "aJC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "aJD" = (/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel/warnwhite{tag = "icon-warnwhite (WEST)"; icon_state = "warnwhite"; dir = 8},/area/medical/cmo) -"aJE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) +"aJE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo) "aJF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay) "aJG" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) "aJH" = (/obj/machinery/vending/medical,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) @@ -1917,7 +1917,7 @@ "aKS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "aKT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "aKU" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port) -"aKV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/medical/cmo) +"aKV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/medical/cmo) "aKW" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay) "aKX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "aKY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -1942,7 +1942,7 @@ "aLr" = (/obj/machinery/disposal/bin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard) "aLs" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 14},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "aLt" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "purple"},/area/hallway/primary/starboard) -"aLu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) +"aLu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) "aLv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/assembly/robotics) "aLw" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/assembly/robotics) "aLx" = (/turf/simulated/floor/plasteel,/area/assembly/robotics) @@ -1959,9 +1959,9 @@ "aLI" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "aLJ" = (/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/abandoned) "aLK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHWEST)"; icon_state = "camera"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) -"aLL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) +"aLL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo) "aLM" = (/obj/machinery/door/airlock/glass_command{name = "Chief Medical Officer"; req_access_txt = "40"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) -"aLN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/cmo) +"aLN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/cmo) "aLO" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay) "aLP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "aLQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel/whiteblue/corner,/area/medical/medbay) @@ -2051,10 +2051,10 @@ "aNw" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/space,/area/hallway/primary/starboard) "aNx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "aNy" = (/turf/simulated/wall/r_wall,/area/assembly/chargebay) -"aNz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/assembly/chargebay) -"aNA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay) +"aNz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/assembly/chargebay) +"aNA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay) "aNB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/assembly/chargebay) -"aNC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/chargebay) +"aNC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/chargebay) "aND" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "aNE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "aNF" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) @@ -2146,7 +2146,7 @@ "aPn" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aPo" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "aPp" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"aPq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/abandoned) +"aPq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/abandoned) "aPr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "aPs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "aPt" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay) @@ -2200,17 +2200,17 @@ "aQp" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server) "aQq" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server) "aQr" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server) -"aQs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"aQs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator) "aQt" = (/obj/machinery/door/airlock/glass_command{name = "Gravity Generator Area"; req_access_txt = "19; 61"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) -"aQu" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator) -"aQv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"aQu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"aQv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator) "aQw" = (/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aQx" = (/obj/structure/disposalpipe/sortjunction{sortdir = 8; sortType = 7},/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aQy" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aQz" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) "aQA" = (/turf/simulated/floor/plasteel/black,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aQB" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/black,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aQC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) +"aQC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "aQD" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned) "aQE" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned) "aQF" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) @@ -2235,7 +2235,7 @@ "aQY" = (/turf/simulated/floor/plasteel{tag = "icon-darkyellowcorners (NORTH)"; icon_state = "darkyellowcorners"; dir = 1},/area/tcommsat/server) "aQZ" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/tcommsat/server) "aRa" = (/obj/machinery/telecomms/receiver/preset_right,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/tcommsat/server) -"aRb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aRb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) "aRc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "aRd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "aRe" = (/obj/machinery/power/apc{dir = 8; name = "Gravity Generator APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/gravity_generator) @@ -2352,7 +2352,7 @@ "aTl" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/area/tcommsat/lounge) "aTm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"},/area/tcommsat/lounge) "aTn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/tcommsat/lounge) -"aTo" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/lounge) +"aTo" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/lounge) "aTp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-darkyellowcorners"; icon_state = "darkyellowcorners"},/area/tcommsat/server) "aTq" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "darkblue"},/area/tcommsat/server) "aTr" = (/obj/machinery/telecomms/receiver/preset_left,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/tcommsat/server) @@ -2443,7 +2443,7 @@ "aUY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aUZ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aVa" = (/obj/machinery/iv_drip{density = 0},/obj/item/roller,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) -"aVb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) +"aVb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"}) "aVc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation) "aVd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation) "aVe" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{tag = "icon-warnplatecorner"; icon_state = "warnplatecorner"; dir = 2},/area/space/nearstation) @@ -2485,7 +2485,7 @@ "aVO" = (/obj/item/clothing/glasses/science{pixel_x = 2; pixel_y = 4},/obj/item/clothing/glasses/science,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/obj/machinery/camera{c_tag = "Medical Research Chemistry"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{tag = "icon-whiteyellow (NORTHWEST)"; icon_state = "whiteyellow"; dir = 9},/area/medical/research) "aVP" = (/obj/machinery/chem_heater{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/medical/research) "aVQ" = (/obj/machinery/chem_dispenser/constructable,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteyellow"},/area/medical/research) -"aVR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/turf/simulated/floor/plating,/area/medical/research) +"aVR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/turf/simulated/floor/plating,/area/medical/research) "aVS" = (/obj/machinery/vending/wallmed{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) "aVT" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel{tag = "icon-whitebot"; icon_state = "whitebot"},/area/medical/research) "aVU" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/fire{pixel_x = 6; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) @@ -2628,7 +2628,7 @@ "aYB" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/pillbottles,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/research) "aYC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) "aYD" = (/obj/machinery/chem_master{pixel_x = -2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/medical/research) -"aYE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research) +"aYE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research) "aYF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) "aYG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) "aYH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) @@ -2646,8 +2646,8 @@ "aYT" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/quartermaster/miningdock) "aYU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "aYV" = (/obj/structure/closet/secure_closet/miner,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/quartermaster/miningdock) -"aYW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock) -"aYX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/mining) +"aYW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"aYX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/mining) "aYY" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/mining) "aYZ" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/mining) "aZa" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/mining) @@ -2700,7 +2700,7 @@ "aZV" = (/obj/machinery/camera/autoname{dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/machinery/power/apc{dir = 1; name = "Quartermaster's Office APC"; pixel_x = 0; pixel_y = 30},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTH)"; icon_state = "brown"; dir = 1},/area/quartermaster/qm) "aZW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTH)"; icon_state = "brown"; dir = 1},/area/quartermaster/qm) "aZX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTHEAST)"; icon_state = "brown"; dir = 5},/area/quartermaster/qm) -"aZY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/qm) +"aZY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/qm) "aZZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "baa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bab" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/mining{name = "Mining Office"; req_access_txt = "48"},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/quartermaster/miningdock) @@ -2739,10 +2739,10 @@ "baI" = (/obj/machinery/vending/engivend,/turf/simulated/floor/plating,/area/storage/secure) "baJ" = (/obj/machinery/door/airlock/external{req_access_txt = "0"; req_one_access_txt = "12,13,8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port) "baK" = (/turf/simulated/wall/r_wall,/area/bridge) -"baL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge) +"baL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge) "baM" = (/turf/simulated/floor/plasteel{tag = "icon-stairs-old"; icon_state = "stairs-old"},/area/bridge) "baN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-stairs-old"; icon_state = "stairs-old"},/area/bridge) -"baO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/bridge) +"baO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/bridge) "baP" = (/turf/simulated/wall,/area/medical/research) "baQ" = (/obj/structure/bed/roller,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/button/door{id = "MedResShutters"; name = "Chemistry Shutters"; pixel_x = -26; pixel_y = 0; req_access_txt = "5, 47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research) "baR" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/research) @@ -2790,7 +2790,7 @@ "bbH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) "bbI" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) "bbJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay) -"bbK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/medical) +"bbK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/medical) "bbL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/medical) "bbM" = (/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Post RC"; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/medical) "bbN" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/medical) @@ -2847,7 +2847,7 @@ "bcM" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay) "bcN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bcO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) -"bcP" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical) +"bcP" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical) "bcQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start/depsec/medical,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/medical) "bcR" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/checkpoint/medical) "bcS" = (/obj/machinery/computer/secure_data,/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/medical) @@ -2888,7 +2888,7 @@ "bdB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/brown,/area/quartermaster/qm) "bdC" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel/brown,/area/quartermaster/qm) "bdD" = (/turf/simulated/floor/plasteel/brown{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/quartermaster/qm) -"bdE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) +"bdE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm) "bdF" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bdG" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Mining"; departmentType = 0; name = "Mining RC"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (SOUTHWEST)"; icon_state = "brown"; dir = 10},/area/quartermaster/miningdock) "bdH" = (/turf/simulated/floor/plasteel/brown,/area/quartermaster/miningdock) @@ -2907,7 +2907,7 @@ "bdU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bdV" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bdW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay) -"bdX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical) +"bdX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical) "bdY" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/medical) "bdZ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; frequency = 1439; id_tag = null; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/medical) "bea" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/medical) @@ -2927,7 +2927,7 @@ "beo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge) "bep" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge) "beq" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel/neutral,/area/bridge) -"ber" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) +"ber" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bes" = (/obj/structure/rack,/obj/item/stack/sheet/glass{amount = 50},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bet" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "beu" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) @@ -2937,8 +2937,8 @@ "bey" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard) "bez" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard) "beA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHWEST)"; icon_state = "camera"; dir = 9},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard) -"beB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/qm) -"beC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/qm) +"beB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/qm) +"beC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/qm) "beD" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/qm) "beE" = (/turf/simulated/wall,/area/quartermaster/office) "beF" = (/obj/machinery/camera{c_tag = "Cargo Bay North"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -2983,7 +2983,7 @@ "bfs" = (/obj/machinery/camera{c_tag = "Cargo Bay MULES"},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bft" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bfu" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/quartermaster/storage) -"bfv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) +"bfv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "bfw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "bfx" = (/obj/structure/table_frame,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) "bfy" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) @@ -3019,7 +3019,7 @@ "bgc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel/neutral,/area/bridge) "bgd" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge) "bge" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel/neutral,/area/bridge) -"bgf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge) +"bgf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge) "bgg" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; frequency = 1439; id_tag = null; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHWEST)"; icon_state = "warndark"; dir = 9},/area/bridge) "bgh" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Command EVA"},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/bridge) "bgi" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/bridge) @@ -3090,7 +3090,7 @@ "bhv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning,/area/ai_monitored/nuke_storage) "bhw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/ai_monitored/nuke_storage) "bhx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/ai_monitored/nuke_storage) -"bhy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage) +"bhy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage) "bhz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bhA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bhB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) @@ -3122,7 +3122,7 @@ "bib" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) "bic" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay) "bid" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay) -"bie" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bie" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "bif" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "big" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/port) "bih" = (/turf/simulated/floor/wood,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/light/small{dir = 8},/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/plasteel/sandeffect,/area/crew_quarters/cafeteria) @@ -3132,7 +3132,7 @@ "bil" = (/obj/structure/rack,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "bim" = (/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "bin" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) -"bio" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria) +"bio" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria) "bip" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "biq" = (/obj/machinery/power/apc{cell_type = 10000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload) "bir" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Captain's Office APC"; pixel_y = 24},/obj/structure/cable{tag = "icon-0-2"; icon_state = "0-2"},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3144,7 +3144,7 @@ "bix" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "Command North"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore) "biy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore) "biz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore) -"biA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge) +"biA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge) "biB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHWEST)"; icon_state = "warndark"; dir = 10},/area/bridge) "biC" = (/turf/simulated/floor/plasteel/darkwarning,/area/bridge) "biD" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHEAST)"; icon_state = "warndark"; dir = 6},/area/bridge) @@ -3173,7 +3173,7 @@ "bja" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bjb" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bjc" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) -"bjd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office) +"bjd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office) "bje" = (/obj/machinery/autolathe,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bjf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bjg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/mob/living/simple_animal/bot/mulebot,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage) @@ -3206,7 +3206,7 @@ "bjH" = (/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "bjI" = (/obj/machinery/chem_dispenser/drinks,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "bjJ" = (/turf/simulated/wall,/area/maintenance/port) -"bjK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/maintenance/port) +"bjK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/maintenance/port) "bjL" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port) "bjM" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 1; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/reset/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/antimov,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/protectStation,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bjN" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) @@ -3230,7 +3230,7 @@ "bkf" = (/obj/structure/closet/crate{name = "Gold Crate"},/obj/item/stack/sheet/mineral/gold{pixel_x = -1; pixel_y = 5},/obj/item/stack/sheet/mineral/gold{pixel_y = 2},/obj/item/stack/sheet/mineral/gold{pixel_x = 1; pixel_y = -2},/obj/item/weapon/storage/belt/champion,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/ai_monitored/nuke_storage) "bkg" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/structure/closet/crate{name = "Silver Crate"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/ai_monitored/nuke_storage) "bkh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/ai_monitored/nuke_storage) -"bki" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage) +"bki" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage) "bkj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bkk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bkl" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) @@ -3247,9 +3247,9 @@ "bkw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/quartermaster/office) "bkx" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bky" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad"},/turf/simulated/floor/plasteel,/area/quartermaster/storage) -"bkz" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) +"bkz" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "bkA" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/supply) -"bkB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/main) +"bkB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/main) "bkC" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "bkD" = (/obj/machinery/button/crematorium{pixel_x = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "bkE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"}) @@ -3261,7 +3261,7 @@ "bkK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bkL" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/wall,/area/medical/chemistry) "bkM" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastright{dir = 2; name = "Chemistry Desk"; req_access_txt = "5; 33"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) -"bkN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/chemistry) +"bkN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/chemistry) "bkO" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay) "bkP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay) "bkQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay) @@ -3344,7 +3344,7 @@ "bmp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bmq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/hallway/primary/starboard) "bmr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/hallway/primary/starboard) -"bms" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) +"bms" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) "bmt" = (/obj/structure/filingcabinet/filingcabinet,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bmu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/quartermaster/office) "bmv" = (/obj/structure/table,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/office) @@ -3380,8 +3380,8 @@ "bmZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/badrecipe,/turf/simulated/floor/wood,/area/maintenance/port) "bna" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/maintenance/port) "bnb" = (/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/port) -"bnc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/captain) -"bnd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bnc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bnd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/captain) "bne" = (/obj/machinery/door/airlock/command{name = "Captain's Office"; req_access = null; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bnf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore) "bng" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore) @@ -3410,8 +3410,8 @@ "bnD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bnE" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/status_display{density = 0; pixel_x = 32; pixel_y = 0; supply_display = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/quartermaster/storage) "bnF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/quartermaster/storage) -"bnG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage) -"bnH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/storage) +"bnG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage) +"bnH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/storage) "bnI" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = -24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = -24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) "bnJ" = (/turf/simulated/floor/carpet,/area/chapel/main) "bnK" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) @@ -3446,7 +3446,7 @@ "bon" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "boo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bop" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/hallway/primary/starboard) -"boq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) +"boq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) "bor" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMDeliver"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office) "bos" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office) "bot" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office) @@ -3475,7 +3475,7 @@ "boQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/port) "boR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "boS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/port) -"boT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) +"boT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "boU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/wall,/area/maintenance/port) "boV" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Captain's Desk"; departmentType = 5; name = "Captain RC"; pixel_x = -30; pixel_y = 0},/obj/structure/filingcabinet,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/camera{c_tag = "Captain's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/captain) "boW" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3548,10 +3548,10 @@ "bql" = (/turf/simulated/floor/plasteel/black,/area/teleporter) "bqm" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel/black,/area/teleporter) "bqn" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/black,/area/teleporter) -"bqo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) +"bqo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bqp" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bqq" = (/turf/simulated/wall,/area/library) -"bqr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library) +"bqr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library) "bqs" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/library) "bqt" = (/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8},/obj/item/clothing/mask/breath{pixel_x = 4},/obj/item/clothing/mask/breath{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bqu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) @@ -3569,7 +3569,7 @@ "bqG" = (/obj/machinery/camera{c_tag = "Cargo Bay South"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bqH" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -35},/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "bqI" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel,/area/quartermaster/storage) -"bqJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/office) +"bqJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/office) "bqK" = (/turf/simulated/floor/carpet{tag = "icon-carpetsymbol (EAST)"; icon_state = "carpetsymbol"; dir = 4},/area/chapel/main) "bqL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) "bqM" = (/obj/machinery/door/morgue{name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) @@ -3588,7 +3588,7 @@ "bqZ" = (/turf/simulated/wall,/area/crew_quarters/courtroom) "bra" = (/turf/simulated/wall/r_wall,/area/crew_quarters/courtroom) "brb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port) -"brc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port) +"brc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port) "brd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bre" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain) "brf" = (/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3634,7 +3634,7 @@ "brT" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "brU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) "brV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/chapel/main) -"brW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"brW" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "brX" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "brY" = (/obj/structure/table,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/medical/chemistry) "brZ" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/medical/chemistry) @@ -3812,7 +3812,7 @@ "bvp" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard) "bvq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard) "bvr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard) -"bvs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/sorting) +"bvs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/sorting) "bvt" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort1"},/turf/simulated/floor/plasteel/blue,/area/quartermaster/sorting) "bvu" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort2"},/turf/simulated/floor/plasteel/red,/area/quartermaster/sorting) "bvv" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort3"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel/purple,/area/quartermaster/sorting) @@ -3835,7 +3835,7 @@ "bvM" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/chapel/main) "bvN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bvO" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;5"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"bvP" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "fumehood"; name = "fume hood shutter"},/turf/simulated/floor/plating,/area/medical/chemistry) +"bvP" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "fumehood"; name = "fume hood shutter"},/turf/simulated/floor/plating,/area/medical/chemistry) "bvQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "bvR" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) "bvS" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) @@ -3891,9 +3891,9 @@ "bwQ" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort3"},/turf/simulated/floor/plasteel/purple,/area/quartermaster/sorting) "bwR" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "bwS" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/entry) -"bwT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/pods,/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"bwU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"bwV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bwT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/pods,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bwU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bwV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bwW" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_3) "bwX" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/pod_3) "bwY" = (/turf/space,/turf/simulated/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/shuttle/pod_3) @@ -3922,7 +3922,7 @@ "bxv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "bxw" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/filingcabinet,/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 25},/obj/machinery/camera{c_tag = "Detective's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxx" = (/obj/structure/closet/secure_closet/detective,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxz" = (/obj/structure/table/wood,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/item/device/taperecorder{pixel_x = 3; pixel_y = 0},/obj/item/weapon/storage/box/evidence,/obj/item/device/flashlight/seclite,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxA" = (/obj/structure/transit_tube{dir = 2; icon_state = "N-SW-SE"; tag = "icon-E-SW-NW"},/turf/space,/area/space) "bxB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/port) @@ -4056,7 +4056,7 @@ "bzZ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "bAa" = (/obj/machinery/vending/cola,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "bAb" = (/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) -"bAc" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bAc" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bAd" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_3) "bAe" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_3) "bAf" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) @@ -4070,8 +4070,8 @@ "bAn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bAo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bAp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"bAq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) -"bAr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) +"bAq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) +"bAr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) "bAs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "EVA Storage"; req_access_txt = "18"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) "bAt" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/port) "bAu" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/port) @@ -4156,11 +4156,11 @@ "bBV" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office) "bBW" = (/obj/effect/landmark/start{name = "Detective"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/security/detectives_office) "bBX" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/secure_data,/turf/simulated/floor/carpet,/area/security/detectives_office) -"bBY" = (/obj/structure/transit_tube{icon_state = "N-SE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central) -"bBZ" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central) -"bCa" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/central) -"bCb" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central) -"bCc" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central) +"bBY" = (/obj/structure/transit_tube{icon_state = "N-SE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) +"bBZ" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) +"bCa" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/central) +"bCb" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) +"bCc" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) "bCd" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/lawoffice) "bCe" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/clothing/glasses/sunglasses/big,/turf/simulated/floor/wood,/area/lawoffice) "bCf" = (/obj/structure/bed/chair{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/wood,/area/lawoffice) @@ -4252,9 +4252,9 @@ "bDN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bDO" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bDP" = (/obj/machinery/power/apc{dir = 8; name = "Head of Personnel APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/crew_quarters/heads) -"bDQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) -"bDR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) -"bDS" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bDQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bDR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bDS" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bDT" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{dir = 2; icon_state = "left"; name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "hop"; layer = 3.1; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bDU" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bDV" = (/obj/item/weapon/bedsheet/hop,/obj/structure/bed,/turf/simulated/floor/carpet,/area/crew_quarters/heads) @@ -4371,14 +4371,14 @@ "bGc" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape) "bGd" = (/turf/space,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/escape) "bGe" = (/turf/space,/area/shuttle/escape) -"bGf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"bGf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "bGg" = (/obj/structure/table,/obj/machinery/door/poddoor/shutters{id = "EscapeBarShutters"; name = "Escape Bar Shutters"},/turf/simulated/floor/plasteel/bar,/area/hallway/secondary/exit) "bGh" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "evaescape"; name = "E.V.A. Escape Shutter"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/ai_monitored/storage/eva) "bGi" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "evaescape"; name = "E.V.A. Escape Shutter"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/ai_monitored/storage/eva) "bGj" = (/obj/structure/sign/directions/evac{tag = "icon-direction_evac (NORTH)"; icon_state = "direction_evac"; dir = 1},/obj/structure/sign/directions/security{pixel_y = -8},/obj/structure/sign/directions/medical{dir = 1; icon_state = "direction_med"; pixel_x = 0; pixel_y = 8; tag = "icon-direction_med (NORTH)"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva) "bGk" = (/obj/structure/sign/directions{tag = "icon-direction_bridge (EAST)"; icon_state = "direction_bridge"; dir = 4},/obj/structure/sign/directions/science{desc = "A direction sign, pointing out which way the research department is."; dir = 4; icon_state = "direction_sci"; name = "research department"; pixel_y = -8; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{dir = 4; icon_state = "direction_eng"; pixel_y = 8; tag = "icon-direction_eng (EAST)"},/turf/simulated/wall/r_wall,/area/hallway/primary/port) "bGl" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central) -"bGm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/hallway/primary/central) +"bGm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bGn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Detective's Office"; req_access = null; req_access_txt = "4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bGo" = (/obj/structure/window,/turf/simulated/floor/plasteel/black,/area/hallway/primary/central) "bGp" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/structure/window,/obj/structure/window{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor/plasteel/black,/area/hallway/primary/central) @@ -4387,14 +4387,14 @@ "bGs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window,/turf/simulated/floor/plasteel/black,/area/hallway/primary/central) "bGt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/port) "bGu" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/port) -"bGv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice) +"bGv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice) "bGw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/lawoffice) -"bGx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) +"bGx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bGy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Courtroom"; opacity = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "bGz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port) -"bGA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bGA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bGB" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/crew_quarters/heads) -"bGC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bGC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads) "bGD" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{icon_state = "loadingarea"; tag = "loading"},/area/crew_quarters/heads) "bGE" = (/obj/structure/sign/directions{dir = 1; icon_state = "direction_bridge"; pixel_y = -8; tag = "icon-direction_bridge (NORTH)"},/turf/simulated/wall/r_wall,/area/crew_quarters/heads) "bGF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/central) @@ -4413,9 +4413,9 @@ "bGS" = (/obj/structure/sign/directions/science{tag = "icon-direction_sci (NORTH)"; icon_state = "direction_sci"; dir = 1},/obj/structure/sign/directions{dir = 1; icon_state = "direction_supply"; pixel_y = 8; tag = "icon-direction_supply (NORTH)"},/obj/structure/sign/directions/security{dir = 8; icon_state = "direction_sec"; pixel_y = -8; tag = "icon-direction_sec (WEST)"},/turf/simulated/wall,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"}) "bGT" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel/warning/corner,/area/hallway/primary/starboard) "bGU" = (/turf/simulated/wall,/area/hallway/secondary/entry) -"bGV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bGV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bGW" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/window{name = "Arrivals Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/entry) -"bGX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bGX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bGY" = (/obj/structure/bed/chair/comfy/beige,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "bGZ" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "bHa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) @@ -4605,12 +4605,12 @@ "bKC" = (/obj/structure/disposalpipe/sortjunction{dir = 4; sortType = 18},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bKD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bKE" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/button/door{id = "evaarrival"; name = "E.V.A. Arrival Shutter Control"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel/warning/corner{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/primary/starboard) -"bKF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"bKF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bKG" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/window{dir = 1; name = "Arrivals Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/entry) "bKH" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair"},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "bKI" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel/shuttle{tag = "icon-delivery"; icon_state = "delivery"},/area/shuttle/escape) "bKJ" = (/turf/simulated/wall/shuttle{tag = "icon-swall7"; icon_state = "swall7"},/area/shuttle/escape) -"bKK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"bKK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "bKL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bKM" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "bKN" = (/turf/simulated/floor/plasteel/neutral/corner,/area/hallway/secondary/exit) @@ -4683,13 +4683,13 @@ "bMc" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Escape Central"; dir = 8; network = list("SS13","RD"); pixel_y = -22},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit) "bMd" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "bMe" = (/turf/simulated/wall,/area/storage/auxillary) -"bMf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/auxillary) +"bMf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/auxillary) "bMg" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/auxillary) "bMh" = (/turf/simulated/wall/r_wall,/area/storage/auxillary) "bMi" = (/obj/machinery/door/airlock{name = "Escape Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/airless,/area/hallway/secondary/exit) "bMj" = (/turf/simulated/wall/r_wall,/area/security/brig) "bMk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) -"bMl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) +"bMl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) "bMm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "bMn" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{tag = "icon-blueyellow (WEST)"; icon_state = "blueyellow"; dir = 8},/area/hallway/primary/central) "bMo" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central) @@ -4712,7 +4712,7 @@ "bMF" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/aft) "bMG" = (/obj/structure/sign/directions/science{desc = "A direction sign, pointing out which way the research department is."; dir = 4; icon_state = "direction_sci"; name = "research department"; pixel_y = 0; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{pixel_y = -8},/obj/structure/sign/directions{dir = 4; icon_state = "direction_supply"; pixel_y = 8; tag = "icon-direction_supply (EAST)"},/turf/simulated/wall,/area/hydroponics) "bMH" = (/turf/simulated/wall,/area/hydroponics) -"bMI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hydroponics) +"bMI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hydroponics) "bMJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics) "bMK" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bML" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central) @@ -4736,7 +4736,7 @@ "bNd" = (/obj/machinery/door/poddoor/shutters{name = "Escape Shuttle Cargo Shutters"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "bNe" = (/obj/machinery/door/poddoor/shutters{id = "shuttlecargo"; name = "Escape Shuttle Cargo Shutters"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "bNf" = (/turf/simulated/wall/shuttle{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/escape) -"bNg" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"bNg" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "bNh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit) "bNi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "bNj" = (/obj/machinery/power/apc{dir = 1; name = "Auxiliary Tool Storage APC"; pixel_y = 24},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/storage/auxillary) @@ -4758,7 +4758,7 @@ "bNz" = (/obj/structure/closet/bombcloset,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main) "bNA" = (/obj/structure/closet/wardrobe/red,/obj/machinery/camera{c_tag = "Security Locker Room"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main) "bNB" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main) -"bNC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/security/main) +"bNC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/security/main) "bND" = (/obj/structure/closet/secure_closet/security/sec,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main) "bNE" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main) "bNF" = (/turf/simulated/wall/r_wall,/area/security/main) @@ -4817,7 +4817,7 @@ "bOG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/storage/testroom) "bOH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Terrarium"},/turf/simulated/floor/plasteel,/area/storage/testroom) "bOI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Terrarium"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/testroom) -"bOJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/testroom) +"bOJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/testroom) "bOK" = (/obj/machinery/button/door{id = "shuttlecargo"; name = "Cargo Shutters"; pixel_y = 26; req_access_txt = "50"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "bOL" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 8; dwidth = 9; height = 20; width = 18},/obj/docking_port/stationary{dheight = 0; dir = 8; dwidth = 9; height = 20; id = "emergency_home"; name = "Escape Home"; width = 18},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "bOM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/purple/corner,/area/hallway/secondary/exit) @@ -4928,7 +4928,7 @@ "bQN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/atmos) "bQO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/atmos) "bQP" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/aft) -"bQQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/hydroponics) +"bQQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/hydroponics) "bQR" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/hydroponics) "bQS" = (/turf/simulated/floor/plasteel/green/side{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/hydroponics) "bQT" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel/black,/area/hydroponics) @@ -4974,7 +4974,7 @@ "bRH" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/storage/auxillary) "bRI" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel/darkred,/area/hallway/secondary/exit) "bRJ" = (/obj/machinery/door/firedoor,/obj/machinery/flasher{id = "secentranceflasher"; pixel_x = -25},/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/brig) -"bRK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) +"bRK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) "bRL" = (/obj/machinery/door/firedoor,/obj/machinery/flasher{id = "secentranceflasher"; pixel_x = 25},/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/brig) "bRM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "0"; req_one_access_txt = "1;4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "bRN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/security/brig) @@ -5039,17 +5039,17 @@ "bSU" = (/obj/structure/closet{name = "Evidence Closet 1"},/obj/item/weapon/storage/backpack{name = "Evidence Bag 1"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/main) "bSV" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "blobstart"},/obj/machinery/camera{c_tag = "Evidence Storage"; dir = 2; network = list("SS13")},/obj/item/weapon/storage/secure/safe{name = "evidence safe"; pixel_x = 6; pixel_y = 28},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/main) "bSW" = (/obj/structure/closet/secure_closet{anchored = 1; name = "Secure Evidence Closet"; req_access_txt = "0"; req_one_access_txt = "3,4"},/obj/item/weapon/storage/secure/briefcase{name = "Secure Evidence Briefcase"; pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/security/main) -"bSX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plating,/area/atmos) +"bSX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plating,/area/atmos) "bSY" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos) -"bSZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) +"bSZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) "bTa" = (/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bTb" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTc" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTd" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTf" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) -"bTg" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) -"bTh" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bTg" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) +"bTh" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "bTi" = (/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel,/area/atmos) "bTj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bTk" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Atmos North East"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel,/area/atmos) @@ -5106,7 +5106,7 @@ "bUj" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{amount = 10; layer = 2.9},/turf/simulated/floor/plasteel/black,/area/security/brig) "bUk" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "bUl" = (/obj/machinery/camera{c_tag = "Brig Cell One"; dir = 2; network = list("SS13","RD")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/security/brig) -"bUm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) +"bUm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig) "bUn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig) "bUo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig) "bUp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/security/brig) @@ -5126,14 +5126,14 @@ "bUD" = (/obj/machinery/computer/atmos_alert,/obj/machinery/camera{c_tag = "Atmospherics - Control Room"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTH)"; icon_state = "blueyellow"; dir = 1},/area/atmos) "bUE" = (/obj/machinery/computer/station_alert,/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTH)"; icon_state = "blueyellow"; dir = 1},/area/atmos) "bUF" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = 32},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/obj/structure/table,/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTHEAST)"; icon_state = "blueyellow"; dir = 5},/area/atmos) -"bUG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos) +"bUG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos) "bUH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "bUI" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/turf/simulated/floor/plasteel,/area/atmos) "bUJ" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bUK" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"bUL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bUL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "bUM" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos) -"bUN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bUN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bUO" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "bUP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/atmos) "bUQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/atmos) @@ -5206,7 +5206,7 @@ "bWf" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor/plasteel,/area/atmos) "bWg" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Air to Distro"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bWh" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor/plasteel/green/side{tag = "icon-green (NORTHEAST)"; icon_state = "green"; dir = 5},/area/atmos) -"bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bWj" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space) "bWk" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) "bWl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; name = "mix vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) @@ -5247,12 +5247,12 @@ "bWU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/wall/r_wall,/area/security/brig) "bWV" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "bWW" = (/obj/machinery/light/small,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/brig) -"bWX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig) +"bWX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig) "bWY" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig) "bWZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig) "bXa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/red/corner,/area/security/brig) "bXb" = (/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/security/brig) -"bXc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/security/warden) +"bXc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/security/warden) "bXd" = (/turf/simulated/wall,/area/security/warden) "bXe" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel,/area/security/main) "bXf" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/main) @@ -5276,11 +5276,11 @@ "bXx" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "bXy" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "bXz" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos) -"bXA" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bXA" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "bXB" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Distro"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bXC" = (/obj/machinery/atmospherics/pipe/manifold/supply/visible{tag = "icon-manifold (EAST)"; icon_state = "manifold"; dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bXD" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/atmos) -"bXE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/atmos) +"bXE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/atmos) "bXF" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bXG" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bXH" = (/obj/machinery/vending/assist,/obj/machinery/status_display{density = 0; pixel_x = -32; pixel_y = 0; supply_display = 1},/turf/simulated/floor/plasteel/neutral,/area/atmos) @@ -5290,7 +5290,7 @@ "bXL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel/black,/area/hydroponics) "bXM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/green/side{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/hydroponics) "bXN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hydroponics) -"bXO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) +"bXO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bXP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bXQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bXR" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/chem_dispenser/drinks,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar) @@ -5346,12 +5346,12 @@ "bYP" = (/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bYQ" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) "bYR" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"bYS" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bYS" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "bYT" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "bYU" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Pure to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bYV" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "bYW" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/atmos) -"bYX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bYX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bYY" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/space,/area/space) "bYZ" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bZa" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/neutral,/area/atmos) @@ -5387,7 +5387,7 @@ "bZE" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; on = 1},/turf/simulated/floor/plasteel/black,/area/security/brig) "bZF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/security/brig) "bZG" = (/obj/machinery/camera{c_tag = "Brig Cell two"; dir = 2; network = list("SS13","RD")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/brig) -"bZH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig) +"bZH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig) "bZI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig) "bZJ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig) "bZK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig) @@ -5403,9 +5403,9 @@ "bZU" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Air to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bZV" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Mix to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bZW" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Pure to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"bZX" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) -"bZY" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) -"bZZ" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bZX" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bZY" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) +"bZZ" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "caa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/hydroponics) "cab" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; name = "Kitchen Window"; req_access_txt = "28"; req_one_access_txt = "0"},/obj/machinery/door/firedoor,/obj/item/weapon/paper,/obj/machinery/door/window/eastleft{dir = 1; name = "Hydroponics Window"; req_access_txt = "0"; req_one_access_txt = "30;35"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/crew_quarters/kitchen) "cac" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -5439,12 +5439,12 @@ "caE" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig) "caF" = (/turf/simulated/floor/plasteel,/area/security/brig) "caG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig) -"caH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/space/nearstation) +"caH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/space/nearstation) "caI" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/space/nearstation) "caJ" = (/obj/structure/rack,/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "caK" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "caL" = (/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"caM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/warden) +"caM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/warden) "caN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main) "caO" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/main) "caP" = (/obj/structure/rack{pixel_y = 2},/obj/item/weapon/gun/energy/laser/practice{pixel_x = 2; pixel_y = -2},/obj/item/weapon/gun/energy/laser/practice{pixel_x = -3; pixel_y = 3},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Firing Range"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/security/main) @@ -5501,7 +5501,7 @@ "cbO" = (/mob/living/simple_animal/cow{name = "Betsy"; real_name = "Betsy"},/turf/simulated/floor/grass,/area/storage/testroom) "cbP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/apmaint) "cbQ" = (/turf/simulated/wall,/area/maintenance/apmaint) -"cbR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cbR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cbS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/hallway/secondary/exit) "cbT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cbU" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) @@ -5511,7 +5511,7 @@ "cbY" = (/turf/simulated/floor/plasteel/black{burnt = 1},/area/security/brig) "cbZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/security/brig) "cca" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig) -"ccb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden) +"ccb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden) "ccc" = (/obj/machinery/computer/prisoner,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "ccd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "cce" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) @@ -5529,14 +5529,14 @@ "ccq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 0; frequency = 1443; id_tag = "air_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "ccr" = (/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) "ccs" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/space,/area/space) -"cct" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos) +"cct" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos) "ccu" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/white,/area/atmos) "ccv" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "ccw" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) "ccx" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "ccy" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos) "ccz" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"ccA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos) +"ccA" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos) "ccB" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "ccC" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"},/turf/simulated/floor/plating,/area/hydroponics) "ccD" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Kitchen APC"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) @@ -5587,7 +5587,7 @@ "cdw" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "cdx" = (/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "cdy" = (/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"cdz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"cdz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "cdA" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/radio/off,/turf/simulated/floor/plasteel,/area/security/main) "cdB" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor/plasteel,/area/security/main) "cdC" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/machinery/light_switch{pixel_x = 23},/turf/simulated/floor/plasteel,/area/security/main) @@ -5599,7 +5599,7 @@ "cdI" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos) "cdJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/atmos) "cdK" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos) -"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cdM" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "cdN" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "cdO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille,/turf/simulated/floor/plating,/area/atmos) @@ -5667,7 +5667,7 @@ "ceY" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor/plasteel,/area/atmos) "ceZ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cfa" = (/obj/machinery/camera{c_tag = "South Central Aft Hall"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/aft) -"cfb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/locker) +"cfb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/locker) "cfc" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/carpet,/area/crew_quarters/locker) "cfd" = (/obj/structure/table,/obj/item/weapon/razor,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/locker) "cfe" = (/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/locker) @@ -5713,7 +5713,7 @@ "cfS" = (/turf/simulated/wall/shuttle{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/shuttle/labor) "cfT" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/space,/area/shuttle/labor) "cfU" = (/turf/simulated/wall/shuttle{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/shuttle/labor) -"cfV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/space) +"cfV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/space) "cfW" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/plasteel/black,/area/security/processing) "cfX" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/processing) "cfY" = (/obj/machinery/computer/shuttle/labor,/turf/simulated/floor/plasteel/black,/area/security/processing) @@ -5765,7 +5765,7 @@ "cgS" = (/obj/structure/disposalpipe/sortjunction{sortType = 18},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "cgT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "cgU" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"cgV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"cgV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "cgW" = (/obj/structure/table/glass,/obj/item/weapon/cultivator,/obj/item/weapon/hatchet,/obj/item/weapon/crowbar,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/storage/testroom) "cgX" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange,/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/storage/testroom) "cgY" = (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/pestspray{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh{pixel_x = 2; pixel_y = 1},/obj/structure/table/glass,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/storage/testroom) @@ -5776,7 +5776,7 @@ "chd" = (/obj/machinery/computer/shuttle/labor,/obj/structure/reagent_dispensers/peppertank{pixel_x = -31; pixel_y = 0},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor) "che" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor) "chf" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor) -"chg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/processing) +"chg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/processing) "chh" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel/black,/area/security/processing) "chi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel/black,/area/security/processing) "chj" = (/obj/machinery/computer/security{name = "Labor Camp Monitoring"; network = list("Labor")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/processing) @@ -5852,8 +5852,8 @@ "ciB" = (/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig) "ciC" = (/turf/simulated/wall/r_wall,/area/security/warden) "ciD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Secure Gear Storage"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/warden) -"ciE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main) -"ciF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main) +"ciE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main) +"ciF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main) "ciG" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/command{name = "Head of Security's Office"; req_access = null; req_access_txt = "58"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) "ciH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft{name = "Aft Port Maintenance"}) "ciI" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) @@ -5863,7 +5863,7 @@ "ciM" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "ciN" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos) "ciO" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) -"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "ciQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos) "ciR" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "ciS" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel/neutral,/area/atmos) @@ -5903,7 +5903,7 @@ "cjA" = (/obj/structure/rack,/obj/item/weapon/book/manual/wiki/engineering_guide{pixel_x = 3; pixel_y = 4},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cjB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt{desc = "Can hold quite a lot of stuff."; name = "mutli-belt"},/obj/item/clothing/gloves/color/fyellow,/obj/effect/spawner/lootdrop/maintenance,/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cjC" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"cjD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cjD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cjE" = (/turf/simulated/wall/shuttle{tag = "icon-swall7"; icon_state = "swall7"},/area/shuttle/labor) "cjF" = (/obj/machinery/door/airlock/shuttle{name = "Labor Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor) "cjG" = (/turf/simulated/wall/shuttle{tag = "icon-swall12"; icon_state = "swall12"},/area/shuttle/labor) @@ -5932,7 +5932,7 @@ "ckd" = (/obj/item/weapon/grenade/barrier,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/ai_monitored/security/armory) "cke" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/ai_monitored/security/armory) "ckf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/area/security/hos) -"ckg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/hos) +"ckg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/hos) "ckh" = (/obj/structure/bed/chair,/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos) "cki" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos) "ckj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos) @@ -5943,7 +5943,7 @@ "cko" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 4; frequency = 1441; id = "n2_in"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "ckp" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) "ckq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/atmos) -"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cks" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "ckt" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cku" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) @@ -6020,7 +6020,7 @@ "clN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness) "clO" = (/obj/structure/table,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "clP" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) -"clQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) +"clQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "clR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/apmaint) "clS" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/apmaint) "clT" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) @@ -6070,7 +6070,7 @@ "cmL" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = 26},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/camera{c_tag = "Tech Storage"},/turf/simulated/floor/plating,/area/storage/tech) "cmM" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/healthanalyzer,/obj/machinery/power/apc{dir = 1; name = "Tech Storage APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) "cmN" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech) -"cmO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) +"cmO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) "cmP" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/locker) "cmQ" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/alarm{pixel_y = 23},/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/locker) "cmR" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/locker) @@ -6129,7 +6129,7 @@ "cnS" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/atmos) "cnT" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cnU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cnW" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cnX" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cnY" = (/turf/simulated/wall/r_wall,/area/hallway/primary/aft) @@ -6341,7 +6341,7 @@ "crW" = (/obj/machinery/door/poddoor{density = 1; icon_state = "closed"; id = "SecJusticeChamber"; name = "Justice Vent"; opacity = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer) "crX" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer) "crY" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/security/transfer) -"crZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/transfer) +"crZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/transfer) "csa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/security/transfer) "csb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/power/apc{dir = 4; name = "Justice APC"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/security/transfer) "csc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "permacell3"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/glass{id_tag = "permabolt3"; name = "Cell 3"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -6351,7 +6351,7 @@ "csg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/security/armory) "csh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/security/armory) "csi" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory) -"csj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"}) +"csj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"}) "csk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/atmos) "csl" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "csm" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/atmos) @@ -6459,7 +6459,7 @@ "cuk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cul" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cum" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) -"cun" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cun" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cuo" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cup" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/starboardsolar) "cuq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) @@ -6649,8 +6649,8 @@ "cxS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering) "cxT" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering) "cxU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) -"cxV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) -"cxW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"cxV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) +"cxW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "cxX" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel,/area/engine/engineering) "cxY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering) "cxZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -6665,7 +6665,7 @@ "cyi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cyj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cyk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) -"cyl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cyl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cym" = (/obj/machinery/camera{c_tag = "Aft Starboard Solar"; dir = 2; network = list("SS13")},/turf/space,/area/space) "cyn" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_4) "cyo" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_4) @@ -6806,7 +6806,7 @@ "cAT" = (/obj/structure/rack,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cAU" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -4},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cAV" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) -"cAW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/prison) +"cAW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/prison) "cAX" = (/obj/structure/barricade/wooden,/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"}) "cAY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/aft{name = "Aft Port Maintenance"}) "cAZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"}) @@ -6880,7 +6880,7 @@ "cCp" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) "cCq" = (/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) "cCr" = (/obj/machinery/disposal/bin,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/button/door{id = "Secure Storage"; name = "Secure Storage"; pixel_x = 8; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) -"cCs" = (/obj/structure/grille,/obj/structure/cable/yellow{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/chief) +"cCs" = (/obj/structure/grille,/obj/structure/cable/yellow{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/chief) "cCt" = (/obj/structure/cable{tag = "icon-1-8"; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/engine/engineering) "cCu" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cCv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -6949,7 +6949,7 @@ "cDG" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) "cDH" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) "cDI" = (/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief) -"cDJ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/chief) +"cDJ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/chief) "cDK" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "caution"},/area/engine/engineering) "cDL" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "caution"},/area/engine/engineering) "cDM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "caution"},/area/engine/engineering) @@ -7063,7 +7063,7 @@ "cFQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cFR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"}) "cFS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cFT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) +"cFT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) "cFU" = (/turf/simulated/floor/plasteel/airless,/area/assembly/assembly_line) "cFV" = (/obj/machinery/mecha_part_fabricator{dir = 2; id = "0"; name = "defunct fabricator"; req_access = "0"},/turf/simulated/floor/plasteel/airless,/area/assembly/assembly_line) "cFW" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/storage/box/donkpockets,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) @@ -7151,7 +7151,7 @@ "cHA" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar) "cHB" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHC" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North-West"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cHD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) +"cHD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "cHE" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North East"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHF" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) "cHG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space) @@ -7169,6 +7169,7 @@ "cHS" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cHV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7347,7 +7348,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcdjcdjcdjcjCcdjcdjcbRceqcfRcjDchcckWckWckXchcaaaadpckYckZcdqcdqclaclbclcclcclccldcleclfclcclcclgclhclicljclkckbcllclmclncloclpclqclrclscltcluckmaaaclvciHclwceRabmbUObUObUObUObUOabmbUNclxbXzcktclyclzbTlchIbTlcaWcaXcaYclAbWibWjbWkclBclCclCbUOabmbSZbQNbQObMAbNYckxbSaclDclDclDclDclDclDclDabmabmabmabmcdQcdQcdQcdQcdQcdWckDckEcdWclEclEclEclEclEclFclGclHclEclEclEclIcdWclJckHckIcjcckHcjcckIcjccjccjcckHclKclLclMclNckPckPckQckRcgUcgVcfJcfJcfJcfJcfJcgVclOckTbWLcjxckUcjzclPckVckVckVclQaaaaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQcbQcbQcbQclRclScbQcipclTckWclUchcchgchgcdqclVclWclXclYclZcmacmbcmccmccmdcmecmccmccmfcdscmgcmhcmicmjcmkcmlcmmcmnckmcmocmpcmqcmrcmsckmaaaclvcmtchBceRabmbUOcmucmucmvchEbWjbWicmwcmxcmycmzbTlbTlcmAcmBcmCbXCbXzcmDbUNabmbXEcmEcmFcmGbUOabmbSZbQNbQObMAbRZckxcmHcmIcmJcmKcmLcmMcmNcmIcmOcmOcmOaaacdQcmPcmQcmRcmScmTcmUcmVcmWclEcmXcmYcmZclEcnacnbcnccndcneclEcnfcdWcngcnhcnicdWcnjcdQcnkcnlcnlcnlcnmbWLcnncnocnpcnqcnqcnrckRbYkcjucfJcfJcfJcfJcfJcjubYkbYkbWLcjxckUcjzciickVckVckVclQaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccnsckWckWcntcitciucitcnucnvcnwcnxcnycnzcnAcnzcnBcnCcnAcnDcnEcnFcdscdsckbckbckbcnGcnHcnIcnJckmcnKcnLcnMcnNcnOckmaaaclvcnPchBceRabmbUOcmucnQcnRbXEabmbUNcnSbXzckscnTcnUcnUcnUcnUcmzccxcnVcnWbYXbYYbWkcnXclCclCbUOabmcnYcnZcoacnYbNYcobcoccodcoecofcogcohcohcoicojcokcmOaaacdQcolcomconcoocopcoqckEckyclEcorcorcorclEcoscotcouclEclEcdQchYcovcowcoxchYcoyciacdQcozcoAcoAcoAcoBbWLcoCcoDcoEbYkbYkbYkckRcgUcgVcfJcfJcfJcfJcfJbWLbWLbWLbWLcoFcoGcjzciicoHcoIciiciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpcckrcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpccHVcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQcpPciocbQcpQcpRcpRcpRcpSaaaadpckYcpTcpUcpVcpTcpWcpXcpYcoNcpZcqacqbcoNcqccqdcqecdsckbcqfcqgcqhcqicqjcqkckmckmckmckmckmckmckmaaaclvcnPcqlceRabmbUObUObUObUObUOabmbUNbXucqmcqncqocqocqocqocqocqpcqqcqrcqsbMAabmabmabmabmabmabmabmcnYcqtcqucqvcqvcqwcqxcqycqzcqAcqBcohcqCcmIcojcqDcmOaaacdQcmPcmQcmRcmScqEcmUcmVcqFclEcorcorcorclEcoscorcorclEclEcdQcolcomcqGcdQcolcomcqGcdQcqHcoAcqIcqJcqKbWLbWLbWLbWLbWLbWLcqLbWLbWLbWLcfJcfJcfJcfJcfJbWLckUcqMcqNcqOcpOaaaaaaaaaaaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQceqcfRcbQcdpcdpcdpcdpcdpcpTcpTcpTcpTcqPcqQcpTcqRcpXcqScoNcqTcqacqScoNcqUcqVcqScdsckbcqWcqXclncqiclncqYcqZckbaaaaaaabmabmaaaaaaclvcnPcraceRabmabmabmabmabmabmabmbUNcrbcrccrdcrecrfcrgcrhcricnTcrjcrkcrlcrmcrnabmabmabmabmabmabmcnYcrocrpcrpcrqcrrcrscrtcrucrvcrwcrxcrycmIcmOcmOcmOaaacdQcolcomconcrzcopcrAcrBcdWclEcmXcrCcorcrDcrEcrFcorcrGcrHcdQcdQcdQcdQcdQcdQcdQcdQcdQciicrIciiciiciiciicrJcrKcrLcrMcrNcrOcrPcrQbWLbWLbWLbWLbWLbWLbWLckUcrRciiciiabmabmabmabmabmabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQaaaaaacbQcrScfRcbQcrTcrUcrVcbQaaacrWcrXcrYcrZcsacsbcpTcdscsccoNcoNcoNcsdcoNcoNcoNcsecdscdsckbcsfcsgclncshclnclncsickbaaaclvcsjcsjclvclvclvcnPchBceRceRceRceRceRceRceRceRbMAbMAcskcslbMAbMAbMAcsmcsnbRXcsobMAbMAbMAcspcspcspcspcspcspcspcspcsqcsrcspcsscstcsucsvcsvcsvcsvcsvcsvcsvabmabmabmabmcdQcdQcdQcdQcdQcswcsxcsycszcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsBcsCcsCcsCcsCcsDcsEcsCcsFcsGcsHcsCcsIcsJcsJcsJcsJcsKcsJcsLcsMcsNcsNcsNcsNcsNcsNcsNcsOcsPcjzciiaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/DiscStation/z4.dmm b/_maps/map_files/DiscStation/z4.dmm index e5c0fe25912..3d977692fac 100644 --- a/_maps/map_files/DiscStation/z4.dmm +++ b/_maps/map_files/DiscStation/z4.dmm @@ -847,7 +847,7 @@ "qC" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qE" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) -"qF" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) +"qF" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qG" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/storage/engine_storage) "qH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/storage/equipment) "qI" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/button/door{id = "medpriv1"; name = "Privacy Shutters"; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/derelict/medical) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index c669211013b..db3fa8f62cd 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -934,8 +934,8 @@ "arX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/atmos_control) "arY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/meter,/turf/simulated/wall,/area/maintenance/atmos_control) "arZ" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"asa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/wall,/area/maintenance/atmos_control) -"asb" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"asa" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"asb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "asc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/power/apc{auto_name = 1; dir = 8; name = "Autoname APC West"; pixel_x = -25; pixel_y = 0},/obj/structure/cable/green,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "asd" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ase" = (/obj/machinery/atmospherics/components/binary/valve{dir = 1; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -1004,7 +1004,7 @@ "atp" = (/obj/item/weapon/wirecutters,/turf/space,/area/space/nearstation) "atq" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "atr" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation) -"ats" = (/obj/structure/lattice,/obj/item/stack/tile/plasteel,/turf/space,/area/space/nearstation) +"ats" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "att" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engineering) "atu" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "atv" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"; tag = ""},/area/engine/engineering) @@ -1253,7 +1253,7 @@ "aye" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayg" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"ayh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"ayh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayi" = (/turf/simulated/wall,/area/atmos) "ayj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/light_switch{pixel_x = -24; tag = "w"},/turf/simulated/floor/plasteel,/area/atmos) "ayk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/atmos) @@ -1487,9 +1487,9 @@ "aCE" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos) "aCF" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/atmos) "aCG" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"aCH" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"aCH" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "aCI" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) -"aCJ" = (/obj/item/trash/popcorn,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aCJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aCK" = (/turf/simulated/wall/rust,/area/maintenance/atmos_control) "aCL" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aCM" = (/obj/item/stack/sheet/metal{amount = 2},/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/maintenance/atmos_control) @@ -1559,9 +1559,9 @@ "aDY" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/atmos) "aDZ" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Filling Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aEa" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Temperature Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos) +"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos) "aEc" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) -"aEd" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aEd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aEe" = (/turf/simulated/wall/mineral/wood,/area/maintenance/atmos_control) "aEf" = (/obj/structure/girder/displaced,/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aEg" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/turf/simulated/floor/plating,/area/maintenance/fore) @@ -1627,7 +1627,7 @@ "aFo" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "aFp" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "aFq" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel/warning{dir = 8},/area/atmos) -"aFr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aFr" = (/obj/item/trash/popcorn,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aFs" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"; tag = "icon-wood-broken"},/area/maintenance/atmos_control) "aFt" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/maintenance/atmos_control) "aFu" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/wood,/area/maintenance/atmos_control) @@ -1686,7 +1686,7 @@ "aGv" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aGw" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aGx" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) -"aGy" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aGy" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aGz" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/maintenance/atmos_control) "aGA" = (/obj/structure/table/wood/poker,/turf/simulated/floor/carpet,/area/maintenance/atmos_control) "aGB" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/deck{pixel_x = 2},/turf/simulated/floor/carpet,/area/maintenance/atmos_control) @@ -1850,7 +1850,7 @@ "aJD" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/atmos) "aJE" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aJF" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) -"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos) +"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos) "aJH" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aJI" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"; tag = "icon-wood-broken6"},/area/maintenance/atmos_control) "aJJ" = (/obj/structure/bed/chair/comfy/lime{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/simulated/floor/wood,/area/maintenance/atmos_control) @@ -2140,11 +2140,11 @@ "aPh" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aPi" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos) "aPj" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos) -"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos) +"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos) "aPl" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos) "aPm" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"aPn" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"aPo" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aPn" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aPo" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPp" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPq" = (/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control) @@ -2226,11 +2226,11 @@ "aQP" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office) "aQQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0; tag = "w"},/turf/simulated/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; dir = 1},/area/hallway/secondary/entry) "aQR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/atmos) -"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos) +"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos) "aQT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/atmos) "aQU" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/atmos) "aQV" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 6},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) -"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos) +"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos) "aQX" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/atmos) "aQY" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/atmos) "aQZ" = (/obj/machinery/atmospherics/components/trinary/mixer{node1_concentration = 0.8; node2_concentration = 0.2},/turf/simulated/floor/plasteel/barber,/area/atmos) @@ -2453,7 +2453,7 @@ "aVi" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "aVj" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "aVk" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"aVl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aVl" = (/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aVm" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control) "aVn" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable/green{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech) "aVo" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/obj/structure/cable/green{tag = "icon-6-9"; icon_state = "6-9"},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/storage/tech) @@ -2563,7 +2563,7 @@ "aXo" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "aXp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aXq" = (/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg2"},/area/maintenance/atmos_control) -"aXr" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aXr" = (/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "aXs" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-4-10"; icon_state = "4-10"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) "aXt" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/obj/structure/cable/green{tag = "icon-2-9"; icon_state = "2-9"},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) "aXu" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Secure Technical Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) @@ -3095,9 +3095,9 @@ "bhA" = (/obj/effect/spawner/structure/window,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/break_room) "bhB" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "bhC" = (/turf/simulated/wall,/area/hallway/primary/central) -"bhD" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bhE" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bhF" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central) +"bhD" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"bhE" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"bhF" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) "bhG" = (/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"}) "bhH" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "bhI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"}) @@ -3335,7 +3335,7 @@ "bmg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/fore) "bmh" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "bmi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall/r_wall,/area/security/transfer) -"bmj" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer) +"bmj" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer) "bmk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/darkred/side,/area/security/transfer) "bml" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 2; icon_state = "right"; name = "Additional Transfer Methods"; req_access_txt = "2"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/security/transfer) "bmm" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) @@ -3726,7 +3726,7 @@ "btH" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/requests_console{department = "Detective's Office"; name = "Detective's Office RC"; pixel_x = -30; pixel_y = 0},/obj/effect/landmark/start{name = "Detective"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/light_switch{pixel_y = -24; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office) "btI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/carpet,/area/security/detectives_office) "btJ" = (/obj/structure/closet/secure_closet/detective,/obj/machinery/newscaster{hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office) -"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office) +"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera/detective,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office) "btL" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office) "btM" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) "btN" = (/obj/machinery/door/window/brigdoor{dir = 1; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/security/brig) @@ -6735,7 +6735,7 @@ "czA" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/mining) "czB" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/mining) "czC" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"czD" = (/obj/structure/cable/green{tag = "icon-1-10"; icon_state = "1-10"},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"czD" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "czE" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "czF" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/toy/owl,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "czG" = (/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -6878,7 +6878,7 @@ "cCn" = (/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cCo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cCp" = (/obj/machinery/vending/cigarette,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"cCq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar) +"cCq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/rust,/area/maintenance/atmos_control) "cCr" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/medical/research{name = "Research Division"}) "cCs" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/medical/research{name = "Research Division"}) "cCt" = (/obj/machinery/vending/coffee,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light,/obj/machinery/camera{c_tag = "Science Hallway East"; dir = 1; network = list("SS13","Sci")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -7083,7 +7083,7 @@ "cGk" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cGl" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cGm" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) -"cGn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) +"cGn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) "cGo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) "cGp" = (/obj/machinery/computer/area_atmos,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = 26; pixel_y = -2; tag = "EAST"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "cGq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) @@ -7220,7 +7220,7 @@ "cIR" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad"; tag = "cargoshuttledown"},/turf/simulated/floor/plating,/area/shuttle/supply) "cIS" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply) "cIT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 2; dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply) -"cIU" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/turf/simulated/floor/plating,/area/shuttle/supply) +"cIU" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cIV" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "cIW" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) "cIX" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) @@ -7349,7 +7349,7 @@ "cLq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/apmaint) "cLr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg1"},/area/maintenance/apmaint) "cLs" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/apmaint) -"cLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cLt" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cLu" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cLv" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/closet/wardrobe/cargotech,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cLw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -7627,14 +7627,14 @@ "cQI" = (/obj/machinery/camera{active_power_usage = 0; c_tag = "Bomb Test Site"; desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; dir = 1; invuln = 1; light = null; name = "Hardened Bomb-Test Camera"; network = list("Toxins"); start_active = 1; use_power = 0},/obj/item/target/alien{anchored = 1},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area) "cQJ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area) "cQK" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; icon_state = "riveted"; name = "hyper-reinforced wall"},/area/toxins/test_area) -"cQL" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/carpet,/area/chapel/main) -"cQM" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"}) +"cQL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall,/area/maintenance/atmos_control) +"cQM" = (/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cQN" = (/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQO" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/weapon/wirerod,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQP" = (/obj/structure/cable/yellow{tag = "icon-6-9"; icon_state = "6-9"; d1 = 4; d2 = 8},/obj/structure/grille,/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQQ" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) +"cQP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) +"cQQ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cQR" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQS" = (/obj/structure/cable/yellow{tag = "icon-4-10"; icon_state = "4-10"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cQS" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cQT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cQV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plasteel/warning{dir = 8},/area/engine/engineering) @@ -7643,9 +7643,9 @@ "cQY" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/cable/green{tag = "icon-4-9"; icon_state = "4-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQZ" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cRa" = (/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRb" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRc" = (/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRd" = (/obj/structure/cable/yellow{tag = "icon-5-8"; icon_state = "5-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cRb" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"}) +"cRc" = (/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply) +"cRd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cRe" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit) "cRf" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/hallway/secondary/exit) "cRg" = (/obj/machinery/door/airlock/external{glass = 1; name = "Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit) @@ -7754,40 +7754,40 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbafvafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaeakEakyakyakyakyakyakyakyalgakyakyakyakyakyakyalNalNakyakyakyalOalPakyakyalQalRakyalSalTajTalUalValUalUalUalUalUalUaiualWalXalXalXalXalXalYaiualZalZalZalZalZamaambalcamcamdamealcamfakZalMalJamgamhamiamjalcaaealcalcalHalcalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaeaaeaaaaaaaaeakEakyakyakyamkamlammamnakyakyakyampammaneanbakyakyamqamramsamtamuamvamwamxamyamzakyakyalTajTalUamAamBamCamDamEamEalUamFamGamHamIamJamKamLamMamNamOamPamQamRalZamaamSalcamcamTamdalcalcakZalcamUalIakZakZamValcaaealcamWamXamYalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaiXaaaaaaaaaaaaaaaaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeakEakyakyaouanaanTamZanaancammandanaamZanTanaaowanganfanganhanianjankanlanlamyanlanmakyalTajTalUannanoanpanqanransantanuanvanwanxanyanzanAanBanCanDanEanFanGalZamaanHalcamdameamcalcanIakZalcalbanJanKanLanManNaaealcalbakZanOalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaanPaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameatsameameamcaovawvameameatsameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameatsatsamcamcazsaovazsamcamcatsatsameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXasaasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameasMasNaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcasMasNaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameavMasNaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameavMawYawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameavMayzayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaaaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcavMayzazXazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameavMaBjapRapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameatsatsamcamcaKJaFUaKJamcamcatsatsameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameavMayzaCJazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKatsameameamcaFUamcameameatsameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameavMayzaEdaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcavMayzaFraEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameavMayzaGyaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZczDamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameavMayzaIbaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammcQPamZamZcQQamZcQScQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameavMayzapPaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakycRccRbcRbcRdakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcavMayzapPaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameavMayzazXaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameavMayzaCKazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameaPnaPoaPpaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameasMayzazXazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameasMayzazXameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXasMayzazZamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRaVlaVmazZamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaXraRiazXameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVakZaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameamcameameamcaovawvameameamcameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSasaaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameamcamcamcamcazsaovazsamcamcamcamcameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXarXatsasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameazXasNaYOaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcazXasNaYOaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameazZasNaYOaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameazZawYaCJawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameazZayzaYOayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcazZayzasMazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameazZaBjaEdapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameamcamcamcamcaKJaFUaKJamcamcamcamcameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameazZayzaFrazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKamcameameamcaFUamcameameamcameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameazZayzaGyaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcazZayzaPnaEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameazZayzaPoaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZanaamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameazZayzaVlaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammaXrbhEbhDbhFbhDbhDcQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameazZayzaYOaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakyczDakEakEakEakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcazZayzaYOaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameazZayzasMaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameazZayzcCqazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameazZcLtcIUaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameazXayzasMazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameazXayzasMameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXazXayzavMamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRapRaVmavMamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaPpcQMcQLameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaanRauqaXGaVJanRaXHaFDaBDaXIaXJaXKaXLaXMaLPaXNaXOaXPaXPaXQaXRaXSaXPaXPaXPaXTaXUaXVaXWaXXaXYaXTaXTaIQaXZaYaaIQaYbaYcaYdaYeaYcaYcaYcaYcaYcaYcaYcaKxaRPaRPaRPaSPaUBaRPaYfaYfaYgaYhaYiaYjaYkaYlaYmaRWaYnaWCaYoaYpaYqaYraYsaWGaSZaSZaSZaYtaYuaRXaYvaYwaYxaYyaYzaYAaYxaYwatGakyakyakyakyaYBaYBaYBakyakyakyaShaYCaYDaYEaYFaYGaQPaPaajUawMahvaPbazZameatZaYHaYIaYHatZaYJaYKaYJatZaYLaYMaYNatZameazZaSwaYOayzaYPaYPaYPaYPaYPaYPaYPaYQaYRaYSaYTaYUaYPazXaXfazXaYVaYWapPaFxaYXaYYaTCaYZaZaaZbaZcaSyaVxaZdaZeaVxaZfaXCaZgaZhaVxaSyaTNaZiazYaZjaSzazYaZkaTTaZlazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaanRaoqauqaZmanRaqhaZnaBDaBDaFFaZoaBDaBDaBDaBDaBDaXPaZpaZqaZraZsaZtaZuaZvaZwaZxaZyaZzaZAaZBaZCaXTaZDaZEaZFaZGaZHaYcaZIaZJaZKaZLaZMaZNaZOaZNaYcaKxaRPaWvaZPaSPaZQaRPaZRaYlaZSaZTaZUaZVaZWaYlaZXaRWaZYaZZbaababbacbadbaebafbagbahbaibajbakaRXaYvaYwbalbambanbaobapaYwatGakybaqbaqbaqatwatwatwbarbasbatakybauaQPaQPaQPaQPaQPbavajUbawahvaPbazZameatZaYHbaxaYHatZaYJbayaYJatZaYNbazaYNatZameazZapPaYOayzaYPbaAbaBbaCbaBbaBbaDbaEbaFbaGbaHbaIaYPbaJbaKaRgaRhbaLaRhaRhaRiaTCaTCbaMbaNbaOaTCaSyaVxbaPbaQbaRbaSbaTbaUbaVaVxaSybaWbaXazYaRnbaYazYbaZbbaaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaanRaxmauqausbbbbbcbbdbbearjbbfbbgbbhbbibbjarjbbkbblbbmbbnbbobbpbbpbbqbbrbbsaUybbtbbubbvbbwbbxbbybbzbbAbbBbbyaYcaYcbbCbbDbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPaZRaYlbbFbbGbbHbbIbbJaYlbbKaRWbbLbbMbbNbbObbPbbQbbRbbSaSZbbTaSZbbUbbVaRXaYvaYwbbWbbXbbYbbZbcaaYwatGakyatwatwatwatwatwatwatwatwatwakybcbbccajDbcdbcdahtaPaaJwbceahvaPbazXamcatZatZatZatZatZatZatZatZatZatZatZatZatZamcazXapPaYOayzaYPbcfbcgbchbcibcjbckbclbcmbckbcnbcoaYPbcpbcpbcpbcpaPbazXaCLazXaTCbcqbcraZaaZbbcsaSybctbctbctbctbcubcvbctbctbctaSyaTNaZiazYaRnaSzazYaZkaTTbcwazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaabaaaaaaanRbcxbcyauqanRauqbczbcAaAmbcBbcCbcDbcEaAmaAmbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbbtbcQbcRbcSaIQbbzbcTbcUbcVbbybcWaYcbcXbcYbcZbcZbcZbcZbcZbcZbdabdbaRPaWvbdcbddbdeaRPbdfaYlbdgbdhbdibdjbdkaYlbdlaRWbdmaSTaSTbdnaUHbdoaSTaSTbbSbdpbdqbdrbdsaRXaYvaYwbdtbdubdvbdwbdxbdyatGakybdzbdzbdzbdzbdAbdBbdBbdBbdBakyajDaAGajDalSbdCahvaPaajUbdDahvaPbazXameamcameameameamcameameameamcameameameamcameazXapPaYOayzaYPbdEbaBbaBbdFbaBbdGbdHbdHbdIbaBbdJaYPbdKbdLbdMbcpaPbaCKapPbdNaTCbdObdPbdQbdRbdSaSybdTbdUbdUbdUbdVbdWbdUbdUbdTaSybdXbdYazYaRnaSzaCPaVGbdZaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeanRanSanRanRanRauqbeabebbecbedbeeauqbefauqauuauvaXPbegbehbcHbeibcHbejbekbelbemaKsbenbeobepaIQbbzbeqberbesbbybetaYcbeuaZNbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPbevaYlaYlaRUbewbexbeyaYlbezaRWaSTbeAbeBaUHbeCaUHbeDbeEaSTbdpbeFbeGbeHaRXaYvaYwbeIbeJbeKbalbeLaYwatGakyakyakyakyakyakyakyakyakyakyakyajPbeMbeNbeObePbeQbeRbeSbeTbeUaPbazXazXazXbeVarZarZarZarZarZarZarZarZarZarZarXarXarXbeWbeXbeYaYPbeZbfabfbbfcbfdbfebffbfgbfgbfhbfiaYPbfjbfkbflbcpaPbazXapPbfmaXvaXwbfnbfobfpbfqaSybfrbdUbdUbdUbfsbftbfubfubfvaSybfwaZiazYaRnaSzazYbfxaMFaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaeanRauqbfybefbfzbfAaweauqbfBbfCbfDbfEaXPbfFbfGbfHbfIbfJbfKaZvbfLbfMbfNbfObfPbfQbfRbbzbfSbfTbfUbbybfVaYcbfWbfXbfYbfZbgaaZNbgbaZNaYcaKxaRPaWvbgcaSPaSQaRPaZRaYlbgdaRUaYkbgebgfaYlbggaRWaSTbghbgiaSTbgjaSTbgkbglaSTbgmbgnbeGbgoaRXaYvaYwbgpbgqbgrbgsbgtaYwatGbguajQajQajQakLakKbgvajQajQajQajQajQajQajDajGajSahvbgwbgxbgyahvaReaRhbgzaRhbgAbgBaqJaqJaqJaqJaqJbgCaqJaqJaqJaqJaqJaqJaqJbgDbgEaYPbgFbaBbgGbgHbdHbgIbgJbgKbgLbgMbgNaYPbgObgPbgQbcpaPbazXbgRbgSaTCbgTaXwbgUaZbbgVaSybgWbgXbgYbgZbhabhbbhcbdTbdTaSybfwbdYazYaRnaTQaTRbhdbhebhfazYaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCbhDbhEbhFbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCcQPcQScQQbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaeaaeaaeaaeanRbiaanRbibbfybicbhgbidbiebifbigbigbihbiibigbijbijbijbijbijbijbijbikbilbimbilbinbilbiobipbiobiqbiobiobirbiqbijbimbiobisbitbigbigbigbigbiubiibigbigbivbiwbixbiybigbizbiAbiBbiCbixbigbigbigbigbiDbiEbigbiFbigbigbigbiybiGbiGbiHbiIbiGbiJbiGbiJbiGbiKbiLbiMbiNbiObiLbiLbiLbiPbiLbigbigbigbiibigbihbigbigbigbigbiybiQbiRbiSbiTbiUbiVbiWbiWbiWbiXbiYbiWbiWbiZbjabjbbiWbiWbiWbiWbiWbjcbiWbiWbiWbjdbjebiWbjfbjgbjhbiWbiVbiWbiWbjdbiWbiWbiWbjibjjbjkbiWbjlbiWbjmbiWbjnbiWbjobjpbjqbiWbjrbjsbjtbjubjvbjwbjxbjybjzbjAahvbjBbjCaCPbjDbjEbjFbjFbjFbjFaaaaaaaaeaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvarhauqarhauqbfyaxmbhgbjGbjHbjIbjIbjIbjIbjJbjIbjKbjIbjIbjIbjIbjIbjIbjLbjIbjMbjIbjNbjIbjIbjObjIbjIbjIbjIbjJbjIbjKbjMbjIbjIbjIbjIbjIbjIbjIbjPbjQbjRbjRbjSbjRbjTbjUbjRbjRbjQbjVbjWbjXbjRbjRbjRbjRbjRbjYbjRbjRbjRbjRbjRbjUbjRbjRbjZbjSbjRbkabjXbjQbjRbkbbjIbjMbjIbkcbjIbjIbjIbjIbjIbjIbjIbjIbjLbjIbjIbjIbjIbjIbjIbkdbkebkfbkgbkhbkebkibkjbkjbkjbkkbkjbkjbklbkjbkmbknbkjbkjbkjbkjbkjbkjbkjbkjbkjbkobkjbkjbkjbkpbkqbkjbkrbkjbkmbknbkjbkjbkjbkqbklbkjbkjbkpbkjbkpbkjbkjbkjbkjbkjbkqbksbktbkubkobkjbkjbkjbkqbkjbkjbkvbkwbkxbkybkwbkzbkAbkBbkCbkDbjFaaaaabaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeafvaaeaaeaaaanRanRanRauBbkEbkFbhgbkGbkHbkIbkJbkJbkKbkLbkMbkNbkJbkJbkJbkObkJbkJbkJbkJbkPbkQbkRbkSbkTbkUbkTbkTbkVbkTbkWbkTbkXbkYbkTbkTbkZbkTbkTbkTbkTblablbblcbldbkXbkTblebkUblfblgbkWblhblibljblfbkTblkbkTbkTbllbkTbkTbkTbkTblmbkUbkTblnbkTbkXbkTblobkXblpblqblrblsbkYbkTbkXbkTbkTbkTbkTbkTblhblhblhbkTbltblubkVbkTbkTbkTbkUblvblwblxblyblzblAblBblCblDblEblFblBblGblHblIblJblKblBblBblCblBblBblLblBblBblBblBblBblBblBblMblNblAblOblPblQblBblBblBblMblRblSblOblTblUblBblOblTblUblBblOblVblTblWblXblYblZbmabmbbmcblZbmabmbbmdbmebmfbmgbmhbmibmjbmkbmlbjFbjFbjFbjFbjFbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7807,7 +7807,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbLZbLZbLZbMabwsbwsbwsbwubwvbnCbnCbnCbwwbnCbMbbwybnCbnDbMcbMdbqabMebMfbMgbmtbMhbMhbnKbnLbIMbIMbnSbnSbMibMjbnSbMkbmtbMlbwJbMmbMnbnXbEtbKubMobMpbMqbMpbMrbKubAFbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbMsbAGborborboqborbosborborbMtbmHbMubmHbmHbmHbmIbMvbmIbmHbMwbmHbMxbMyboOboKboFbMzbMzbMzbMAbMzbMzbMzbMBbtnameamebxjbJwbJwbxlbJwbJwbxjameameamcameamcbxmbxnbxoboQbMCbJCbMDbMEbMFbMGbMHbJCbMIbMJbMKbMLbMMbMNbMObMPbMKbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbtCamebzYbNdbNebNfbNgbNhbNibNjbNkbNlbNmbDFbNnbNobNobNobNpbNqbNrbNsbNtbNtbLLbNubNvbNwbNxbNybLLbNzbNAbNBbNCbNDbNEbNFbyhbyibNGbykbykbykbykbykbypbwfaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbpRbyrbLZbAsbNHbpPbNIbNIbNJbNKcRibuhbuhcRjbNNbNObNPbNQbNObNRbnDbNSbqabMebNTbsmbsnbsobsobspbsqbNUbNUbNUbNVbNWbnSbNXbNYbmtbsBbNZbsCbsBbOabObbKtbOcbOdbOebOfbOgbKtbOhbOibOjbOkbOibOlbOmbnXbnXbOnbOobmHbOpbopbOqbOrborborboqborbosborborborbOsbOsbOtbOubOvbOwbOxbOybOwbmHbmHboKbOzboObOAbOBbMzbOCbODbODbOEbOFbMzbMBbtnameameamcameameameameameamcameamebtnbtnbtnbhCbhCboPboQbMCbJCbOGbMFbMFbOHbOIbJCbOJbOKbOLbOMbONbOObOPbOQbMJbORbJGbOSbOTbOUbOUbOUbOVbOWbOWbOXbOYbOZbtCbPabPbbPcbPdbPebPfbPfbPfbPfbDDbPgbPhbPfbPibNtbNtbPjbPkbPlbPmbPnbNtbPobLLbPpbPqbPrbPsbPtbPubPvbPwbPxbPybPzbPAbAkbPBbAmbwfbykbykbPCbPDbPEbPFbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbyrbyrbyrbPGbNJbNJbPHbpTbnCbnCbnCbnCbPIbPJbPKbPLbPMbPNbPObPPbqabuqbqcbPQbutbuubuubuvbPRbIMbIMbnSbPSbPTbPUbPVbPWbmtbnXbnWbnXbnXbnXbEtbKubPXbPYbPZbQabQbbKtbQcbnXbQdbsCbyIbqkbQebsCbsCbsCbsCbmHbQfbCFbOqbQgbsVbsVbQhbsVbHebsVbsVbsVbQibQibQibQjbQkbQlbQmbQnbQobmHbQpboKbQqbQrbQsbQtbMzbQubQvbQwbQxbQybMzbMBbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnboKbQzbQAbhCboPboQbQBbJCbQCbQDbQEbQFbQGbJCbQHbMLbMLbJGbQIbQJbQKbQLbQMbQNbJGbtCbQObQPbQObQObQObQObQQbQObtGbtCbtCbQRbQSbQTbQUbQVbQWbQWbQWbQWbQXbQYbQZbRabRbbRcbRdbRebRfbRgbNtbNtbNtbNtbLLbRhbRibRjbRkbRlbLLbNzbRmbRnbRobRpbRqbwfbwfbBNbwfbRrbRsbBNbwfbwfbwfbwfaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHcCqbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHbqFbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabTibTjbwsbTkbTlbwsbnAbwsbwsbTjbTmaaaaaeaaabnCbnCbnCbnDbnDbnDbnDbnDbnDbnDbnFbnGbnHbmtbTnbTobnKbTpbTqbTrbTsbTtbTubPVbTvbnNbmtbTwbTwbTxbnXbnXbEtbKubTybTzbTAbTBbTCbKtbqkbTDbnXbTEbTEbTEbTEbTEbTEbTFbOibTGbTHbTHbTIbTJborborboqborbTKbTHbTHbTLbTMbTNbTObTPbTQbTRbTSbTTbOwbTUboKboKbTVbTWboKboFbMzbMzbTXbTYbTZbMzbMzboMboKboKbUaboJbTEbTEbTEbTEbTEbUbboKboKboKbTVbUcboKbhCboPboQbUdbJCbUebUfbUgbUhbUibJCbJGbJGbJGbJGbMQbMQbUjbUkbUlbUmbJGbUnbUobUobUobUobUobUobUobUobUnbUnbUpbUqbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbJTbJTbJTbJTbJTbJTbJTbJTbJTbJTbLLbUrbUsbUtbUubUvbLLbwfbwfbwfbudbUwbUxbwfbBNbwfbwfbwfbwfbwfaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbUybUzbyrbUAbUBbUCbUDbpTaaaaaeaaeaaebUEbUFbUGbUHbUGbUHbUGbUIbUJbTEbUKbULbUMbmtbmubmtbmvbmwbmtbmubmtbmtbmtbmtbmtbmtbmtbTEbTEbTEbTEbTEbUNbKubUObUPbUQbURbUObKubUSbTEbTEbTEbUTbUUbUVbUWbTEbUXbTEbmHbmHbmHbmHbmHbmHbmIbmJbmIbUYbmIbmLbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbTEbTEbTEbTEbTEbmNbTEbUZbVabVbbVcbVdbTEbTEbTEbTEbTEbTEbTEbVebVfbVgbTEbTEbhCbrdbhCbhCbhCbhCbhCbVhbVibVjbJCbJCbJCbJCbJCbVkbJCbVlbVmbVnbJGbJGbJGbJGbJGbJGbJGbJGbVobVpbVpbVpbVpbVpbVpbVpbVpbVqbUnbVrbVsbUnbUnaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaaeaaaaaeaaabVtbVubVtaaaaaeaaebLLbVvbVvbVvbVvbVvbLLafvbVwbVxbVwbVxbwfbVybVzbVzbVAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbVBbUzbyrbyrbyrbVCbVDbpTaaaaaaaaeaaabUEbVEbVFbVGbVFbVGbVHbUIbVIbTEbVJbVKbVLbVMbVMbVNbVObVPbVQbVMbVMbVMbVRbVMbVMbVSbVTbVMbVMbVMbVMbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbVMbVMbVMbWebWebWebWebVSbWfbVMbWgbVMbVSbVMbVUbWhbWibVObWebWjbWkbVMbVMbVMbVMbVMbVSbVSbVMbVMbWlbVMbVUbWgbVMbVMbVMbVMbWmbVMbVMbVObVMbWnbVMbWobVMbWpbVMbVMbVMbWqbWebWebWebVMbVUbiQbWrbWsbWtbWsbWubWsbWvbCYbWwbWxbWybWzbWAbWBbWCbWDbWEbWFbWFbWGbWHbWIbWGbWGbWGbWGbWGbWJbWGbWGbWKbWKbWGbWGbWGbWGbWLbWMbWNbWObWPbUnbUnbUnbUnbUnbUnbUobUobUobUobUnbUnbUnbUnbUnbUnaaaaaeaaaaaaaaeaaeaaaaaaaaeaaaaaaaaeafvbwfbwfbwfbWQbUwbWRbWSbWTbWUbWVaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7818,7 +7818,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaebUIbUIbUIccWccXccYccWccWccWccWccWccZbZIcdacdbcdacdccdacdccbgcddcbacdebUIcdfcbjcdgcdgcdgcdhcbjcdicdjcdkcdlcdmbKtcdncdocdpcdqcdrbKucbsbZWcdscdtcducdvcducducbzcdwbZWcdxcaacdycdzcdAcdBcdCcdDcdEcdFcdCcdGcdHcdIcdJcaacdKcdLcdMcdNcaecbScdOcbUcdPcdQcdRcdScdTcdUcbUcdVcdWcdXccacdYcdZceacebceccedceecefcegcehceicejcekcelcemamcamcameamecenceocepameameamcamcceqcercaEcescaEcetceucevcewcewcewcewcewcexceycezceAceAceBcczcewcewceCcaEceDceEceFceGceEceHceIceJceKccKceLceLceLceMccKceNcaSceOcePceOceOceQceRceSceTccVaaaaaaafvaaeaaeaaeafvaaeaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaccWceUceVceWceXceYceZcfaccZbZIcfbcfccfbcfccfbcfccbgcbhcfdcfebUIcdfcbjcffcfgcfhcficfjcfkcflcdxcfmcfnbKtcfocfpcfqcfrcfsbKucbscftcfucdtcducducfvcducbzcfwbZWcdxcaacaacaacaacaacfxcfycfzcfAcfBcaacaacaacaacaacfCcfDcfEcfFcaecbScfGcbUcfHcfIcfJcfKcfLcfMcbUcfNcfOcfPccacfQcfRcfRcfScfTcfUcfVcfWcfXcfYcfZcgaccfcelcemamcamcamcamecenceocepameamcamcamcceqcercaEcgbcaEcgccewcewcgdcgecgfcewcewcggcaHcghcewcgicgjcgkcglcgmcgncaEcgocgpccDccCccCcgqcgoccCccCccKcgrcgscgtcguccKcgvcaScgwcgxcgycgzcgAcgBcgCcgDccVaaaaaaaaaaaaaaeaaeafvaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWceUcgEcgFcgGcgHcgFcgIcgJcgKcgLcgLcgLcgLcgLcgLcgMcbhcgNcgNbUIcdfcbjcbjcbjcbjcbjcbjcgOcgPcgQcgRcgObKubKubKtbKubKubKtbKucbsbZWcgScgTcgUcducdvcgVcgWcgXbZWcdxcaacgYcgZchacbFchbchcchdchechfcbFchgchhcbNcaachicfDchjchkcaecbSchlcbUchmcfIchnchochpchqcbUcamchrcaoccachschtchuchuchvchwchxchychzchAchBchCccfcelcemameamcchDchDchEchFchGchDchDamcameceqcercaEchHchIcewcewcewcczcewchJchKchKchLchMchNchOchOchPchQchKchKchKchRchSchTchUchVchWchXchYchZciaccKccKccKccJccKccKcibciccidciecifcigcihccVccVccVciiaaaaaaaaaaaaaaaaaeafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcQLcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcgNcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWcjZckackbckcckdckeckfcbackgckhckgckhckgckhckickjcfdcfebUIcdfckkcklckmckncknckmckmckockpckqckrckscksckscktcksckuckvckwbZWbZWbZWbZWbZWbZWbZWbZWbZWbZWckxcaacaacaacaacaackyckzckAcfAckBcaacaacaacaacaackCckDckEcdOcdOcbScdOckFckGckHckIckJckKckLckMckNckOckPckQckRckSckTckUckVckWcjbckXckYckZclaclbccfclccldbztbztcleclfclgclhclicljclebztbztclkcercaEchHcllclmclncaEcaEcaEcaEclocaEclpcaHclqclrclscaHcltcltcltclucluclvclwclxclychXchXchXclzchXclAclBclBclCclBclDclEcaScaScaSclFcaSciiciicihciiciiaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWclGclHclIclJceZcinbZIclKcfbcfcclLcfccfbcfcclMclNclOclPbUIclQckxcgOamcamcameamcclRclSclRclRclTclRclSclRclRclUclVclWclXclYclYclZcmacmbcgOcmccmdcmecmfcmgcaacbCcmhcmicbFcmjcbHcbIcbJcmkcbFcmlcmmcmncaacmocmpcmqcmrcmrcmscdOcbUcmtcmucmvcmwcmxcmycmzcmAcmBcmCcmDcmEcmFcmGcmHcmIcmJccacmKcmKcmKcmKcmKcmKccgcmLamccmMchDcmNcmOcmPcmQcmRchDamcamccmScmTcaEcmUcmVcmVcmVcmWcmXcmYcmZcnacaEcnbcnccndcnecnfcngcltcnhcnicnjclucnkcnlcnmccCccCccCccCccCccCccCccCccCccCcnncnocgvclvcnpcnpchZciaccCcnqchZcnrcnsaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcntcnuccWcnvccWcnwbUIcbebZIbZIcnxcnybZIcbgcbhbZIcbebUIcdfckxcgOamcameamcamcclRcnzcnAcnBcnCcnDcnEcnFclRcnGcnHcnIcnJcnKcnKcnLcnMcnNcnOcnPcnQcnQcnRcnScaacdycdzcdAcnTcnUcdDcnVcdFcdCcnWcdAcnXcdycaacnYckDcnZcdOcdOcoacobcbUcoccodcoecofcogcohcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBbKWbKWcoCcoDcoEcoFcoGcoHcoCbKWbKWcoIcoJcaEcaEcaEcaEcaEcaEcaEcaEcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcoVcoWclucoXcoYcoZcoXaaaaaeaaaaaaaaaaaaaaaaaaccCchZcpacpbclBcpccpdcpecpecpfcpecpgchZcnsaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7831,20 +7831,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecyCcyDcdlcdlcyCaaeaaaaaaaaecgOcdlcdlcqVcgOaaaaaaaaacyEcyEcRlcyEcyEaaaaaaaaacgOcdlclRclRclRclSclRclRclRclRclRcnGcwhcyGcnGcnGcnGcpFcrrcdlcyHcwlcxCcxDcxDcxDcxDcxDcxCcyIcyJcyKcyLcyKcyMcyNcyOcyPcwlcdOcwrcpPccgcyQcpPcpPcpPcpQcpQcyRcyScpQcxUcxUcxUcxUcyTcyUcyVcyWcyXcyXcyYcyZcyXcrTcrUczaczbczcczdczecrVccgczfczgczgczgczgczgcpPcnscnscnscnscnsccCcclcqoczhcziczjczkcqoczlczmczncznczoczpczqczrczscztczuczuczvczwczxczyczvaaaaaaaaaaaaaaeaaaczzcqIczAcqIczBaaaafvafvafvaaeaaaaaaaaaaaaczCczCcRmczCczCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncdlczEczFcxnaaeaaeaaaaaecgOczGczHczIcgOaaaaaaaaaaaecyEczJcyEaaeaaaaaaaaacgOcvLczKcdlczHcdlcyDcdlczLcdlczKcdlcdlczMczNczOczPczQczRcwlcwlcwlcxCcxDcxDcxDcxDcxDcxCcxFczSczTczUczUczVczWczXczYcwlcdOczZcpPccgcpPcAacqdcqdcAbcAccAdcAecAfcAgcAgcAgcAhcAicAjcAkcAlcAlcAmcAncAocAlcApcAqcArcAscAtcAucAvcAwcAxcAyameameamcamcamcamcamcamcamcameamecnscclcqocqocAzcAAcqocqocABczmczncznczncACcADcAEcAFcAFcAFcAFcAGcAHcAIcAJczvaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaaaaeczCcAKczCaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncALcAMcANcxnaaaaaeaaeaaecgOcgOcpscgOcgOaaaaaaaaeaaecyEcRlcyEaaeaaeaaaaaecgOcgOcgOcpscpscpscgOcpscpscpscgOcgOcgOcAOcgOcgOcgOcAPcrrcwlcAQcARcAScxDcxDcxDcxDcxDcAScxFczScATcAUcAUcAVcAWcAXcAYcwlcdOcwrcpPccgcpPcAZcBacBbcBccBdcBecBfcBgcBecBecBecBhcBicBjcBkcBecBecBecBlcBmcBecBncBocBpcBqcBrcBscBtcBucBvcBwamcameameamcamdamdamdamccBxameamccnscclcqucBycBzcBAcBBcBCcBDcBDcAFcBEcBFcBGcBHcBIcBJcBKcBKcBKcBLcBMcBNcBOczvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaeaaeczCcRmczCaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcQMcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcRbcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaacBPaaaaaaaaaaaeaaeaaaaaaaaeaaaaaaaaaaaaaaeaaeaaeaaeaaecgOcCRcgOaaeaaacgOcCScCTcCUcCVcCWcxDcxDcxDcxDcxDcCXcCYcCZcDacDbcDbcDccAWcDdcDecwlcdOcwrcyQcDfcDgcDhczfcpPcDicDjcCkcDkcDlcDmcDncDlcClcDocDpcDqcDrcDscDtcDucDvcDscDrcDwcrVcrVcrVcrVcrVcrVcDxcDycDwcDrcDrcDrcDrcDrcDwcnsccCccCccCccCcclcqucDzcCKcDAcDBcDCcDDcDEcDFcDGcDHcDHcDHcDIcDJcDKcDLcDMczvcDNcDOcDPczvaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaeaaeaaaaaaaaacDQaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaacBPaaaaabaaaaaaaaeaaeaaaaaeaaaaaaaaaaaeaaeaaaaaaaaaaaeaaaafvaaaaaeaaacgOcdxcwlcDRcDScDTcxDcxDcxDcxDcxDcDTcxFczScDUcDVcDVcDVcDWczXcDXcwlcDYcDZcEacEbcEccEdctjcEecDicEfcCkcEgcEhcEicEjcEkcElcEmcBjcEncDtcEocEpcEqcErcEscEtcEucEvcEwcExcDwcEycEzcEAcEBcECcEDcEEcEFcEGcEHcDwcsnchZchZcEIctUcclcqucqucqucqucEJcqucEKcELcEMcENcENcEOczncEPcENcENcEQcERcyvcyvczvcEScyvaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaeaaaaaaaaaaaacETaaaaabaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaeaacaaeaaeaaaaaaaaaaaaaaacBPaaaaaaaaaaaaaaaaaeaaeafvafvafvafvafvafvafvafvafvafvafvafvafvafvaaacgOcdxcEUcwlcwlcEVcxDcxDcxDcxDcxDcEVcEWcEXcEYcEYcEYcEYcEYcEZcFacwlcFbcFccFdcFecpPcdOcFfcdOcDicyQcCkcFgcFhcFicFjcFkcFlcFmcFncFocDtcFpcFqcFrcFscFtcFtcFtcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcDwcFIcpecFJcFKcFLcFMcFNcFNcFOcFNcFPchZcqucFQcFQcFQcFRcFScFTcFUcFVcFVcFVcDMcFWaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaaaaaaaaaaaaaacETaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecFZaaecFYcGacGacGacGaaaeafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaacgOcGbcdlcGccwlcEVcxDcxDcxDcxDcxDcEVcwlcGdcGecxFcGfcxFcxFcGgcwlcwlcGhcpPcGicGjcpPcGkcpPcpPcDicGlcCkcGmcGncGocGocGpcClcGqcokcFocDtcGrcGscGtcGucGvcGwcGxcGycGzcGAcDwcGBcDrcDrcDycDwcGCcGDcGEcGFcGGcDwcnsccCcGHccCccCccCcgpccCctUctUcGIcGJcqucFWcFWcFWcGKcRncFWcRocGNcFWcFWcFWcFWaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZafvafvafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOcwlcEVcxDcxDcxDcxDcxDcEVcwlcwlcwlcwlcwlcwlcwlcHacwlcdOcGhcpPcwrcCzcpPcHbcHccpPcHdcHecCkcGmcGncGocGocHfcClcHgcpUcHhcDrcDrcDwcDwcDwcDwcHicDwcHjcHkcHlcDwccgchlcdOcHmcDwcHncGDcHocDrcDrcDramdccCcGHcnsamccnscHpchZcHqchZchZchZccCaaaaaacFWcHrcHscFWcHtcHucFWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvcHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecHFaaecHEcHGcHGcHGcHGaaeaacaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOamccHHcHIcHIcHJcHIcHIcHKamccpPcHLcdOcHMcHNcHNcHOcHPcHPcHQcpPcwrcCzcpPcpPcpPcpPcpPcpPcCjcxUcxUcxUcxUcxUcxUcHRcpUcFocDtamccHScHTcHUcHVcHWcHVcHXcHYcHZcDwccgcfGcdOcIacDwcIbcIccIdcIecIfcDramdccCcIgcnsamecnscIhchZchZchZchZchZccCaaaaaacIicGKcRncFWcRocGNcIiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcIUcIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcRccIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcIYcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcpPcpPcIncFfcyQcIZcJacpPcpPcJbcBvcEccJccEccJdcJecGkcCjcJfcJgcJhcJicJjcJkcJlcJmcFocDtamccHScIAcJncHVcJocHVcJpcJqcJrcDwccgcdOcdOcJscDwcJtcJucJvcDtcJwcDramcccCcJxcnsamccnscsqchZchZchZccEchZcIOcJycJzcJzcJzcJzcJAcJzcJzcJzcJBcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScJEcGUcGVcGWcGXcGYcGYcGZaaeaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdicmfcJFcmfcJGcdlcdlcvLcdlcdlcJHcdlcJIcdOcJJcdOcdOcdOcdOcdOcdOcdOcJKcJLcJMcJNcJOcJOcJOcJPcJQcJRcJhcJScJTcJUcJVcJWcJXcJYcJZcDwcDwcDwcDwcDwcDwcKacDwcDwcKbcDwcDwcKccKdcGkcKecDwcDrcDrcDtcDrcKfcDramcccCcKgccCccCccCccCccCcKhcKicGIcGJcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcKkcHycETcHzcHAcHBcHBcHCaaeaaecKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecGVaaecHEcHGcHGcHGcHGaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcgOcgOcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcyQcDicDicDicDicDicDicDicKmcKncKncDicDicDicDiczfcCzcCjcCjcCjcCjcCjcCjcCjcCjcKocaocDicKpcqdcqdcqdcqdcKqcKrcqdcqdcqdcqdcKscdOcwtcwrczgamcamcamcavaamdauWamcccCcKtcKuchZchZcKvclvchZchZchZchZcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnscnsccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscLtcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnscnsccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnsccCccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscRdcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnsccCccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacHDcHDcHDcHDcHEaaecLOaaecHEcHGcHGcHGcHGaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPchlcdOcKmcdOcLPcKwcdOcpPcobcdOcdOcdOcLQcDicDicDicDicfGckDcLRcLRcLRcLRcLRcLRcLScLTcLUcLRcLRcLRcLRcLRcLRcLgcpPcLVcpPcLWcKwcdOcLXcLYczgaaaaaaaaaaaeamdatramdaaeaaaaaaaaaafvaaeaaeaaeccCcLZcMacMbccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacIjcIjcIjcIjcIkaaecMcaaecIkcIlcIlcIlcIlaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacBPaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcMdcMecDicDicDicGkcGkcDiczgczgczgczgcpPcpPcMfcMgcDicpPcMhcLRcMicMjcMjcMkcMlcMmcMncMocMpcMqcMrcMrcMrcLRcLgcyQcMscpPcMtcdOcMucdOckCczgaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaafvaaaaaaaaeccCcnscnscnsccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacCQaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaacaacaacaaeaaeaaaaaacBPaaaaaaaaeaaeaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaacpPcdOcdOcdOcdOcyQcLHcwscpPaaaaaeaaaaaecMvcDicDicDicDicMwckDcLRcMxcMycMrcMzcMAcMBcMCcMDcMEcMFcMrcMycMGcLRcLgcpPcpPcpPcpPcpPcpPcMHcMHcpPaaaaaeaaeaabaaaaaaaaaaaaaaeaaeaaaafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaaeaaeaaaaaacCQaaaaaaaaeaaeaacaacaadaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index b7d883d9037..0ad7a19ac98 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -245,7 +245,7 @@ "aeK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aeL" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "aeM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) -"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) +"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeO" = (/obj/item/weapon/tank/internals/oxygen/red{pixel_x = -4; pixel_y = -1},/obj/item/weapon/tank/internals/oxygen/red{pixel_x = 4; pixel_y = -1},/obj/item/weapon/tank/internals/anesthetic{pixel_x = 2},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeP" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -613,7 +613,7 @@ "alO" = (/obj/item/weapon/grown/log,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alP" = (/obj/machinery/light_construct/small{dir = 4},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/disk/data,/obj/item/weapon/grenade/flashbang,/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/grenade/smokebomb,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alQ" = (/turf/simulated/wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"alR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) +"alR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) "alS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/glass/bottle/charcoal,/obj/item/weapon/reagent_containers/syringe,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "alT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteredcorner"},/area/security/brig) "alU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) @@ -989,7 +989,7 @@ "ata" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fore) "atb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/fore) "atc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fore) -"atd" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/item/weapon/lighter,/turf/simulated/floor/wood,/area/crew_quarters/sleep) +"atd" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/item/weapon/lighter,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "ate" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/alarm{pixel_y = 23},/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "atf" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/button/door{id = "Cabin3"; name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "atg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep) @@ -1559,7 +1559,7 @@ "aDY" = (/obj/machinery/computer/secure_data,/obj/machinery/button/flasher{id = "secentranceflasher"; name = "Brig Entrance Flash Control"; pixel_x = -24; pixel_y = 24; req_access_txt = "1"},/obj/machinery/button/door{id = "Secure Gate"; name = "Cell Window Control"; normaldoorcontrol = 0; pixel_x = 5; pixel_y = 27; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/button/door{id = "briglockdown"; name = "Brig Lockdown Control"; pixel_x = 5; pixel_y = 37; req_access_txt = "0"},/obj/machinery/light/small{dir = 1},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "innerbrig"; name = "Brig Interior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 37; req_access_txt = "63"},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "outerbrig"; name = "Brig Exterior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 27; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aDZ" = (/obj/structure/filingcabinet/chestdrawer{pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aEa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/button/flasher{id = "holdingflash"; name = "holding cell flasher button"; pixel_x = 23; pixel_y = 23; req_access_txt = "1"},/obj/machinery/camera{c_tag = "Brig - Desk"; dir = 8; network = list("SS13")},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEe" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -4547,7 +4547,7 @@ "bJw" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJy" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bJz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bJz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJA" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos) "bJC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) @@ -4619,7 +4619,7 @@ "bKQ" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKR" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKS" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bKT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bKT" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/atmos) "bKV" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "bKW" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Air to External Air Ports"; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) @@ -4722,7 +4722,7 @@ "bMP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "escape"},/area/atmos) "bMQ" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "bMR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"bMS" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"bMS" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bMT" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "bMU" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/simulated/wall/r_wall,/area/space) "bMV" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) @@ -4804,7 +4804,7 @@ "bOt" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "bOu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) "bOv" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos) -"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) +"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "bOx" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "bOy" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bOz" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - N2O"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine/n20,/area/atmos) @@ -5115,7 +5115,7 @@ "bUs" = (/obj/structure/fireaxecabinet{pixel_x = -32; pixel_y = 0},/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bUt" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "bUu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos) -"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos) +"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos) "bUw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bUx" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - Toxins"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bUy" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -5382,7 +5382,7 @@ "bZz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{color = "#330000"},/obj/machinery/meter{color = ""},/turf/simulated/floor/plasteel,/area/atmos) "bZA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Pure to Fuel Pipe"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bZB" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos) +"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos) "bZD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "bZE" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - CO2"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "bZF" = (/obj/machinery/power/solar_control{id = "aftport"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -5577,11 +5577,11 @@ "cdm" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cdn" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cdo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) +"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cdq" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{color = "#330000"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cdr" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Nitrogen Outlet"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cds" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) +"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdu" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdv" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Airmix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -6661,7 +6661,7 @@ "cye" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cyf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cyg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"cyh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"cyh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cyi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/storage) "cyj" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) "cyk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) @@ -6713,7 +6713,7 @@ "cze" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "czf" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "czg" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"czh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"czh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "czi" = (/obj/item/weapon/cigbutt,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/storage) "czj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/storage) "czk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) @@ -8395,6 +8395,8 @@ "dfw" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "dfx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dfy" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfz" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology) +"dfA" = (/obj/machinery/camera{c_tag = "Xenobiology Lab - Kill Chamber"; dir = 1; network = list("SS13","RD","Xeno"); start_active = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8611,8 +8613,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadczdecdcIddYdedddWdcIdeedcFdcPdcPdcPdcPdebaaaaaaaaaaafaaacTCcXvcTCcTCcTCcTCcTCcTCcTCcTCcTCcXscTCaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadczdegdefdeidehdekdejdeldcFdendemdemdeodczaaaaaaaaaaaaaaacTCdeOdePdePdePdeQdeRcXscXscXscXscXscTCaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadepdcAdcAdcAdcAdcAdcAdcAdeqdcAdcAdcAdcAderaaaaaaaaaaafaaacTCcTCcTCcTCcTCcTydeScTycTCcTCcTCcTCcTCaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadetdesdesdesdeudesdesdeudesdesdesdevaaaaaaaaaaaaaafaafaafaaaaafcTCdeVdeVdeWdeVdeVcTCaafaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadewdewdewdeudewdewdeudewdewdewaaaaaaaaaaaaaaaaaiaaaaafaaaaaacTCdeVdeVdeWdeVdeVcTCaaaaafaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadetdesdesdesdeudesdesdeudesdesdesdevaaaaaaaaaaaaaafaafaafaaaaafcTCdfzdeVdeWdeVdfzcTCaafaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadewdewdewdeudewdewdeudewdewdewaaaaaaaaaaaaaaaaaiaaaaafaaaaaacTCdfAdeVdeWdeVdeVcTCaaaaafaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaaaaaaaaacTCcTCcTydeXcTycTCcTCaaaaaaaaaaagaaiaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiaagaagaaaaafaaacXlaaaaaaaafaagaaiaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiaagaaaaaaaafaagaagaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index f3d58e776ad..c9d21399648 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -347,7 +347,7 @@ "gI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig) "gJ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) "gK" = (/obj/machinery/computer/security/wooden_tv,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) -"gL" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig) +"gL" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig) "gM" = (/obj/item/weapon/storage/secure/safe{pixel_x = 4; pixel_y = 26},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/security/brig) "gN" = (/obj/machinery/mineral/ore_redemption{input_dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central) "gO" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central) @@ -508,7 +508,7 @@ "jN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/quartermaster/storage) "jO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/hallway/primary/central) "jP" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central) -"jQ" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{name = "Toxins Lab"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"jQ" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{heat_proof = 1; name = "Toxins Lab"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "jR" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "jS" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "jT" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/janitor) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index d2de8dd50bd..2b94c177afe 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -8,9 +8,9 @@ "aah" = (/obj/structure/sign/securearea{pixel_y = -32},/turf/space,/area/space) "aai" = (/turf/simulated/wall/r_wall,/area/security/prison) "aaj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/security/prison) -"aak" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) -"aal" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) -"aam" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison) +"aak" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) +"aal" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) +"aam" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison) "aan" = (/obj/machinery/hydroponics/soil,/obj/item/seeds/ambrosiavulgarisseed,/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/security/prison) "aao" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/prison) "aap" = (/obj/machinery/hydroponics/soil,/obj/item/seeds/carrotseed,/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/security/prison) @@ -64,10 +64,10 @@ "abl" = (/obj/machinery/vending/security,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main) "abm" = (/obj/item/weapon/grenade/barrier,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory) "abn" = (/obj/machinery/firealarm{pixel_y = 24},/obj/structure/closet/secure_closet{anchored = 1; name = "Contraband Locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory) -"abo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/main) +"abo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/main) "abp" = (/turf/simulated/wall,/area/security/main) "abq" = (/turf/simulated/wall,/area/security/hos) -"abr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"abr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos) "abs" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "abt" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 9},/area/security/transfer) "abu" = (/obj/machinery/door/poddoor{id = "executionspaceblast"; name = "blast door"},/turf/simulated/floor/plating,/area/security/transfer) @@ -151,9 +151,9 @@ "acU" = (/obj/machinery/door/airlock/external{name = "Security External Airlock"; req_access_txt = "63"},/turf/simulated/floor/plating,/area/security/main) "acV" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) "acW" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport) -"acX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer) +"acX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer) "acY" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) -"acZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer) +"acZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer) "ada" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/flasher{id = "PCell 3"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "adb" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "adc" = (/obj/machinery/flasher{id = "PCell 1"; pixel_x = -28},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -166,7 +166,7 @@ "adj" = (/obj/structure/rack,/obj/item/clothing/suit/armor/laserproof,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/ai_monitored/security/armory) "adk" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/riot,/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/ai_monitored/security/armory) "adl" = (/obj/machinery/door/poddoor/shutters{id = "armory"; name = "Armoury Shutter"},/obj/machinery/button/door{id = "armory"; name = "Armory Shutters"; pixel_x = 0; pixel_y = -26; req_access_txt = "3"},/turf/simulated/floor/plasteel,/area/ai_monitored/security/armory) -"adm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"adm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos) "adn" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/carpet,/area/security/hos) "ado" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/carpet,/area/security/hos) "adp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/security/hos) @@ -206,7 +206,7 @@ "adX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "adY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "adZ" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) -"aea" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer) +"aea" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer) "aeb" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) "aec" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer) "aed" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/button/ignition{id = "executionburn"; pixel_x = 24; pixel_y = 5},/obj/machinery/button/door{id = "executionfireblast"; name = "Transfer Area Lockdown"; pixel_x = 25; pixel_y = -5; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/general/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) @@ -229,7 +229,7 @@ "aeu" = (/obj/structure/bed/chair/janicart/secway,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/ai_monitored/security/armory) "aev" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main) "aew" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main) -"aex" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos) +"aex" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos) "aey" = (/obj/machinery/door/airlock/glass_command{name = "Head of Security"; req_access_txt = "58"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/carpet,/area/security/hos) "aez" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory) "aeA" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/security/main) @@ -278,7 +278,7 @@ "afr" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/obj/item/weapon/storage/pod{pixel_x = 6; pixel_y = -32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) "afs" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/pod_3) "aft" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/security/transfer) -"afu" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/transfer) +"afu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/transfer) "afv" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) "afw" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Armory"; req_access_txt = "2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/security/transfer) "afx" = (/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) @@ -300,8 +300,8 @@ "afN" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/security/brig) "afO" = (/obj/machinery/door/airlock/command{name = "Command Tool Storage"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "afP" = (/obj/machinery/door/airlock/command{name = "Command Tool Storage"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) -"afQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/security/main) -"afR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/main) +"afQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/security/main) +"afR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/main) "afS" = (/obj/machinery/door/airlock/glass_security{name = "Equipment Room"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main) "afT" = (/obj/effect/landmark/start{name = "Security Officer"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) "afU" = (/turf/simulated/floor/plasteel,/area/security/main) @@ -353,12 +353,12 @@ "agO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "agP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) "agQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"agR" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"agR" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "agS" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "agT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "agU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "agV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"agW" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"agW" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "agX" = (/obj/structure/table,/obj/machinery/recharger,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "agY" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) "agZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main) @@ -422,7 +422,7 @@ "aif" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aig" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aih" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"aii" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"aii" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "aij" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aik" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) "ail" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/security/brig) @@ -440,7 +440,7 @@ "aix" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/main) "aiy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig) "aiz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig) -"aiA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"aiA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aiB" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aiC" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aiD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) @@ -448,21 +448,21 @@ "aiF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aiG" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "aiH" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) -"aiI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"aiI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "aiJ" = (/obj/structure/table/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/window/brigdoor{dir = 1; name = "Armory Desk"; req_access_txt = "3"},/obj/machinery/door/window/southleft{name = "Reception Desk"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"aiK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) -"aiL" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"aiK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) +"aiL" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "aiM" = (/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"aiN" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden) +"aiN" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "aiO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Security Office"; req_access = null; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main) "aiP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/security/main) "aiQ" = (/obj/machinery/camera{c_tag = "Brig East"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aiR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig) "aiS" = (/obj/item/stack/rods,/turf/space,/area/space) "aiT" = (/turf/simulated/wall,/area/security/processing) -"aiU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing) +"aiU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing) "aiV" = (/turf/simulated/wall/r_wall,/area/security/processing) -"aiW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"aiW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "aiX" = (/turf/simulated/wall/r_wall,/area/security/brig) "aiY" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "aiZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig) @@ -513,7 +513,7 @@ "ajS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/crew_quarters/courtroom) "ajT" = (/obj/structure/bed/chair{dir = 8; name = "Defense"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/crew_quarters/courtroom) "ajU" = (/obj/machinery/door/window/southleft{name = "Court Cell"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) -"ajV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) +"ajV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ajW" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ajX" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/labor) "ajY" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/labor) @@ -550,26 +550,26 @@ "akD" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/labor) "akE" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor) "akF" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor) -"akG" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing) +"akG" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing) "akH" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/processing) "akI" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/security/processing) "akJ" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/processing) "akK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/processing) "akL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"akM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) -"akN" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"akM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) +"akN" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "akO" = (/obj/machinery/door/window/brigdoor{id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) -"akP" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"akP" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "akQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/security/brig) "akR" = (/obj/machinery/door/window/brigdoor{id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) -"akS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"akS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "akT" = (/obj/machinery/door/window/brigdoor{id = "Cell 3"; name = "Cell 3"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "akU" = (/obj/machinery/door/airlock/glass_security{name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"akV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"akV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "akW" = (/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "akX" = (/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) -"akY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) -"akZ" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"akY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) +"akZ" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "ala" = (/obj/machinery/door/window/brigdoor{id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig) "alb" = (/obj/structure/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/crew_quarters/courtroom) "alc" = (/obj/structure/table/wood,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/crew_quarters/courtroom) @@ -578,7 +578,7 @@ "alf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "alg" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "alh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"ali" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ali" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "alj" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor) "alk" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/labor) "all" = (/obj/machinery/mineral/labor_claim_console{machinedir = 2; pixel_x = 30; pixel_y = 30},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor) @@ -599,7 +599,7 @@ "alA" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/eastleft{name = "Brig Desk"; req_access_txt = "1"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "alB" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "alC" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) -"alD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"alD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "alE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/flasher{id = "Cell 4"; pixel_x = 28},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "alF" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "alG" = (/obj/structure/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/crew_quarters/courtroom) @@ -610,7 +610,7 @@ "alL" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 8; name = "Courtroom APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "alM" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "alN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) -"alO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"alO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "alP" = (/turf/simulated/wall,/area/maintenance/fsmaint2) "alQ" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "alR" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) @@ -639,12 +639,12 @@ "amo" = (/obj/machinery/flasher{id = "brigentry"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "amp" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"; name = "Cell 4 Locker"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) "amq" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 25; pixel_y = -2; prison_radio = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig) -"amr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) -"ams" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"amr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"ams" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "amt" = (/obj/machinery/door/airlock/glass{name = "Courtroom"; req_access_txt = "42"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "amu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "amv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"amw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"amw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "amx" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "amy" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "amz" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -659,16 +659,16 @@ "amI" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) "amJ" = (/obj/machinery/mineral/labor_claim_console{machinedir = 1; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) "amK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/security/processing) -"amL" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing) +"amL" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing) "amM" = (/obj/machinery/door/airlock/glass_security{name = "Prisoner Processing"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/processing) "amN" = (/obj/structure/table,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "amO" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"amP" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) -"amQ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) -"amR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"amP" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"amQ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) +"amR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "amS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/security/brig) "amT" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/southleft{name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"amU" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "briggate"; name = "security blast door"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig) +"amU" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "briggate"; name = "security blast door"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig) "amV" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/southleft{base_state = "right"; icon_state = "right"; name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "amW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig) "amX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig) @@ -742,7 +742,7 @@ "aon" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aoo" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aop" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/labor) -"aoq" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing) +"aoq" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing) "aor" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/processing) "aos" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/security/processing) "aot" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/processing) @@ -783,7 +783,7 @@ "apc" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/processing) "apd" = (/turf/simulated/wall,/area/security/detectives_office) "ape" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor/plasteel,/area/security/detectives_office) -"apf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office) +"apf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office) "apg" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aph" = (/turf/simulated/wall,/area/lawoffice) "api" = (/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/turf/simulated/floor/plasteel,/area/lawoffice) @@ -821,7 +821,7 @@ "apO" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "apP" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 35},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "apQ" = (/obj/structure/lattice,/turf/space,/area/space/nearstation) -"apR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plating,/area/security/processing) +"apR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plating,/area/security/processing) "apS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/processing) "apT" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "apU" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -847,10 +847,10 @@ "aqo" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aqp" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/internals/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fsmaint) "aqq" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/fsmaint) -"aqr" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aqs" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aqt" = (/obj/structure/grille,/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aqu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aqr" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aqs" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aqt" = (/obj/structure/grille,/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aqu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aqv" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aqw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aqx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard) @@ -872,7 +872,7 @@ "aqN" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqO" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqP" = (/obj/machinery/power/apc{dir = 1; name = "Arrivals North Maintenance APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aqQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aqQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aqR" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aqS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/security/processing) "aqT" = (/obj/machinery/power/apc{dir = 8; name = "Labor Shuttle Dock APC"; pixel_x = -24},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/processing) @@ -885,7 +885,7 @@ "ara" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/requests_console{department = "Law office"; pixel_x = -32; pixel_y = 0},/obj/structure/closet/lawcloset,/turf/simulated/floor/wood,/area/lawoffice) "arb" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/pen/red,/turf/simulated/floor/wood,/area/lawoffice) "arc" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/lawoffice) -"ard" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/lawoffice) +"ard" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/lawoffice) "are" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/lawoffice) "arf" = (/turf/simulated/wall,/area/crew_quarters/sleep) "arg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/fsmaint) @@ -894,10 +894,10 @@ "arj" = (/turf/simulated/wall,/area/crew_quarters/fitness) "ark" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/closet/secure_closet/personal/cabinet,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "arl" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 9},/area/crew_quarters/fitness) -"arm" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"arm" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "arn" = (/obj/structure/closet/athletic_mixed,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aro" = (/turf/simulated/floor/engine{name = "Holodeck Projector Floor"},/area/holodeck/rec_center) -"arp" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"arp" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "arq" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb,/obj/effect/spawner/lootdrop/maintenance{lootcount = 8; name = "8maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "arr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "ars" = (/obj/machinery/power/apc{dir = 1; name = "Bar Maintenance APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -912,7 +912,7 @@ "arB" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) "arC" = (/obj/docking_port/stationary/random{id = "pod_asteroid2"; name = "asteroid"},/turf/space,/area/space) "arD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 3; pixel_x = 32; pixel_y = 0},/obj/machinery/computer/shuttle/pod{pixel_x = -32; possible_destinations = "pod_asteroid1"; shuttleId = "pod1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) -"arE" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"arE" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "arF" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/fpmaint2) "arG" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint2) "arH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -980,11 +980,11 @@ "asR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "asS" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "asT" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "asV" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "asW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) "asX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"asY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"asY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "asZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/crew_quarters/fitness) "ata" = (/turf/simulated/floor/wood,/area/lawoffice) "atb" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1065,7 +1065,7 @@ "auy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "auz" = (/obj/machinery/camera{c_tag = "Holodeck"},/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "auA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"auB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"auB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "auC" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "auD" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "auE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -1140,7 +1140,7 @@ "avV" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "avW" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "avX" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"avY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"avY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "avZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint) "awa" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/wall,/area/maintenance/fpmaint) "awb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1190,7 +1190,7 @@ "awT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) "awU" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/wallframe/camera,/obj/item/wallframe/camera,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/electrical) "awV" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) -"awW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"awW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry) "awX" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "awY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) "awZ" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) @@ -1272,12 +1272,12 @@ "ayx" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ayy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ayz" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint2) -"ayA" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"ayB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"ayC" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"ayD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"ayA" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"ayB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"ayC" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"ayD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ayE" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint) -"ayF" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"ayF" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ayG" = (/turf/simulated/wall/r_wall,/area/gateway) "ayH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ayI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1290,7 +1290,7 @@ "ayP" = (/obj/machinery/power/apc{dir = 1; name = "EVA Storage APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "ayQ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) "ayR" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) -"ayS" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"ayS" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "ayT" = (/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "ayU" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "ayV" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/button/door{id = "Dorm2"; name = "Dorm Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/sleep) @@ -1304,7 +1304,7 @@ "azd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 6},/area/crew_quarters/sleep) "aze" = (/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/crew_quarters/sleep) "azf" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"azg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"azg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "azh" = (/obj/machinery/camera{c_tag = "Fitness Room South"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/crew_quarters/fitness) "azi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "azj" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness) @@ -1313,7 +1313,7 @@ "azm" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "azn" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "azo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) -"azp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"azp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "azq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/hallway/secondary/construction{name = "\improper Garden"}) "azr" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "azs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) @@ -1379,7 +1379,7 @@ "aAA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/maintenance/electrical) "aAB" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/electrical) "aAC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) -"aAD" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aAD" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aAE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry) "aAF" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry) "aAG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry) @@ -1420,8 +1420,8 @@ "aBp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/ai_monitored/storage/eva) "aBq" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva) "aBr" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) -"aBs" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) -"aBt" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aBs" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aBt" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aBu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/fore) "aBv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) "aBw" = (/obj/item/seeds/appleseed,/obj/item/seeds/bananaseed,/obj/item/seeds/cocoapodseed,/obj/item/seeds/grapeseed,/obj/item/seeds/orangeseed,/obj/item/seeds/sugarcaneseed,/obj/item/seeds/wheatseed,/obj/item/seeds/watermelonseed,/obj/structure/table/glass,/obj/item/seeds/towermycelium,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"}) @@ -1462,7 +1462,7 @@ "aCf" = (/obj/machinery/camera{c_tag = "Theatre Storage"},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/crew_quarters/theatre) "aCg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "aCh" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/crew_quarters/theatre) -"aCi" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aCi" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aCj" = (/obj/machinery/camera{c_tag = "EVA East"; dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "aCk" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aCl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -1474,9 +1474,9 @@ "aCr" = (/turf/simulated/wall,/area/crew_quarters/theatre) "aCs" = (/obj/structure/closet/wardrobe/red,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2) "aCt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aCu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aCv" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aCw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aCu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aCv" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) +"aCw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aCx" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aCy" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aCz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -1606,9 +1606,9 @@ "aET" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/gateway) "aEU" = (/obj/structure/table,/obj/machinery/recharger,/obj/structure/sign/biohazard{pixel_x = 32},/turf/simulated/floor/plasteel,/area/gateway) "aEV" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"aEW" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aEW" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aEX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "EVA Storage"; req_access_txt = "18"},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) -"aEY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) +"aEY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aEZ" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) "aFa" = (/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) "aFb" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) @@ -1624,7 +1624,7 @@ "aFl" = (/obj/machinery/light/small{dir = 8},/obj/structure/dresser,/turf/simulated/floor/plasteel{icon_state = "redblue"},/area/crew_quarters/theatre) "aFm" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aFn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aFo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aFo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aFp" = (/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aFq" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/space,/area/space) "aFr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -1709,7 +1709,7 @@ "aGS" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aGT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aGU" = (/obj/machinery/light/small{dir = 1},/obj/machinery/requests_console{department = "Chapel"; departmentType = 2; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"aGV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aGV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aGW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aGX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/space,/area/space) "aGY" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) @@ -1730,7 +1730,7 @@ "aHn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "aHo" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/food/snacks/grown/poppy,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "aHp" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"aHq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/main) +"aHq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/main) "aHr" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/space,/area/space) "aHs" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "aHt" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) @@ -1738,7 +1738,7 @@ "aHv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/gateway) "aHw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/gateway) "aHx" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"aHy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint2) +"aHy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint2) "aHz" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/hallway/secondary/construction{name = "\improper Garden"}) "aHA" = (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/pestspray{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh{pixel_x = 2; pixel_y = 1},/obj/structure/table/glass,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/secondary/construction{name = "\improper Garden"}) "aHB" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) @@ -1821,7 +1821,7 @@ "aJa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/gateway) "aJb" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary) "aJc" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel,/area/storage/primary) -"aJd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aJd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "aJe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/hallway/primary/port) "aJf" = (/obj/machinery/camera{c_tag = "EVA South"; dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "aJg" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/hallway/primary/central) @@ -1831,7 +1831,7 @@ "aJk" = (/obj/machinery/door/airlock{name = "Theatre Backstage"; req_access_txt = "46"},/turf/simulated/floor/plasteel,/area/crew_quarters/theatre) "aJl" = (/obj/structure/dispenser/oxygen,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aJm" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"aJn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central) +"aJn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) "aJo" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Central Hallway North"; dir = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/hallway/primary/central) "aJp" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/hallway/primary/central) "aJq" = (/turf/simulated/floor/plasteel,/area/hallway/primary/central) @@ -1871,7 +1871,7 @@ "aJY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/hallway/secondary/entry) "aJZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/primary) "aKa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/storage/primary) -"aKb" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aKb" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/plating,/area/hallway/primary/port) "aKc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Gateway Access"; req_access_txt = "62"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/gateway) "aKd" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "stationawaygate"; name = "Gateway Access Shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/gateway) "aKe" = (/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) @@ -1889,11 +1889,11 @@ "aKq" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Theatre Stage"; dir = 2},/turf/simulated/floor/wood,/area/crew_quarters/theatre) "aKr" = (/obj/machinery/alarm{dir = 2; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/theatre) "aKs" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/storage/primary) -"aKt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) -"aKu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) -"aKv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aKt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aKu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aKv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "aKw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/hallway/primary/port) -"aKx" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port) +"aKx" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port) "aKy" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aKz" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aKA" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "stationawaygate"; name = "Gateway Access Shutters"},/turf/simulated/floor/plasteel,/area/gateway) @@ -2026,7 +2026,7 @@ "aMX" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "aMY" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port) "aMZ" = (/turf/simulated/wall,/area/hallway/secondary/exit) -"aNa" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aNa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aNb" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "aNc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "aNd" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/secondary/entry) @@ -2144,7 +2144,7 @@ "aPl" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) "aPm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "aPn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"aPo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"aPo" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "aPp" = (/obj/machinery/camera{c_tag = "Escape Arm Holding Area"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/secondary/exit) "aPq" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "aPr" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) @@ -2174,12 +2174,12 @@ "aPP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aPQ" = (/turf/simulated/wall,/area/storage/tools) "aPR" = (/turf/simulated/wall/r_wall,/area/bridge) -"aPS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) -"aPT" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge) -"aPU" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) -"aPV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) -"aPW" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) -"aPX" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aPS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aPT" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge) +"aPU" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aPV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aPW" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) +"aPX" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) "aPY" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aPZ" = (/obj/structure/table,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/item/clothing/head/hardhat/cakehat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aQa" = (/obj/structure/table,/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) @@ -2238,7 +2238,7 @@ "aRb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port) "aRc" = (/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/storage/emergency2) "aRd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry) -"aRe" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/storage/tools) +"aRe" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/storage/tools) "aRf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/storage/tools) "aRg" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aRh" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central) @@ -2280,9 +2280,9 @@ "aRR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "aRS" = (/turf/simulated/floor/carpet,/area/chapel/main) "aRT" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/storage/tools) -"aRU" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aRU" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aRV" = (/obj/machinery/power/apc{dir = 1; name = "Auxiliary Tool Storage APC"; pixel_y = 24},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/storage/tools) -"aRW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aRW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aRX" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) "aRY" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) "aRZ" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/hallway/secondary/entry) @@ -2304,7 +2304,7 @@ "aSp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aSq" = (/obj/structure/table/wood/poker,/obj/item/stack/spacecash/c100{amount = 5},/obj/item/stack/spacecash/c10{amount = 10},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aSr" = (/turf/simulated/floor/plasteel,/area/storage/tools) -"aSs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tools) +"aSs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tools) "aSt" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel,/area/storage/tools) "aSu" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/bridge) "aSv" = (/obj/structure/table/reinforced,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/bridge) @@ -2445,7 +2445,7 @@ "aVa" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel,/area/storage/tools) "aVb" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/hallway/primary/central) "aVc" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) -"aVd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge) +"aVd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge) "aVe" = (/obj/machinery/camera{c_tag = "Bridge West"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/bridge) "aVf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/bridge) "aVg" = (/obj/structure/bed/chair{dir = 1; name = "Security Station"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/bridge) @@ -2494,7 +2494,7 @@ "aVX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "aVY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library) "aVZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library) -"aWa" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aWa" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aWb" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library) "aWc" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "aWd" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/library) @@ -2613,7 +2613,7 @@ "aYm" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/hallway/primary/central) "aYn" = (/obj/machinery/camera{c_tag = "Bridge West Entrance"; dir = 1},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/hallway/primary/central) "aYo" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge) -"aYp" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge) +"aYp" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge) "aYq" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) "aYr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) "aYs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge) @@ -2714,7 +2714,7 @@ "baj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "bak" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "bal" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hydroponics) -"bam" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hydroponics) +"bam" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hydroponics) "ban" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics) "bao" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bap" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westright{dir = 1; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics) @@ -2802,7 +2802,7 @@ "bbT" = (/obj/item/weapon/storage/box,/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 1},/area/quartermaster/office) "bbU" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 5},/area/quartermaster/office) "bbV" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bbW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge/meeting_room) +"bbW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge/meeting_room) "bbX" = (/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbY" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbZ" = (/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -2855,7 +2855,7 @@ "bcU" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office) "bcV" = (/obj/structure/table,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bcW" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bcX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/turf/simulated/floor/plating,/area/bridge/meeting_room) +"bcX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/turf/simulated/floor/plating,/area/bridge/meeting_room) "bcY" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bcZ" = (/obj/structure/table/wood,/obj/item/device/radio/intercom{dir = 8; freerange = 1; name = "Station Intercom (Command)"; pixel_x = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bda" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) @@ -2974,7 +2974,7 @@ "bfj" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/quartermaster/office) "bfk" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office) "bfl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office) -"bfm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office) +"bfm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office) "bfn" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "packageExternal"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bfo" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central) "bfp" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/obj/machinery/light,/turf/simulated/floor/wood,/area/bridge/meeting_room) @@ -3004,7 +3004,7 @@ "bfN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office) "bfO" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) "bfP" = (/obj/machinery/power/apc{dir = 2; name = "Starboard Primary Hallway APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard) -"bfQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) +"bfQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office) "bfR" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bfS" = (/turf/simulated/wall,/area/storage/emergency) "bfT" = (/turf/simulated/wall,/area/assembly/chargebay) @@ -3074,7 +3074,7 @@ "bhf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bhg" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay) "bhh" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) -"bhi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/medical) +"bhi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/medical) "bhj" = (/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/medical) "bhk" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyer"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 26; req_access_txt = "5"},/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/medical) "bhl" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/medical) @@ -3090,11 +3090,11 @@ "bhv" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bhw" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bhx" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) -"bhy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) +"bhy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "bhz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/turf/simulated/floor/plating,/area/assembly/robotics) "bhA" = (/turf/simulated/wall,/area/medical/research{name = "Research Division"}) "bhB" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bhC" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab) +"bhC" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab) "bhD" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access_txt = "7"},/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/turf/simulated/floor/plating,/area/toxins/lab) "bhE" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bhF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) @@ -3170,7 +3170,7 @@ "biX" = (/obj/machinery/camera{c_tag = "Research and Development"; dir = 2; network = list("SS13","RD"); pixel_x = 22},/obj/machinery/button/door{dir = 2; id = "rnd"; name = "Shutters Control Button"; pixel_x = -6; pixel_y = 24; req_access_txt = "47"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/lab) "biY" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "biZ" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"bja" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bja" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/disposal) "bjb" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/disposal) "bjc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal) "bjd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal) @@ -3251,11 +3251,11 @@ "bkA" = (/turf/simulated/floor/plating,/area/maintenance/disposal) "bkB" = (/obj/machinery/button/door{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/button/massdriver{id = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/disposal) "bkC" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bkD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/port) +"bkD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/port) "bkE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/port) "bkF" = (/turf/simulated/wall/r_wall,/area/maintenance/port) "bkG" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "31"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/storage) -"bkH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/quartermaster/office) +"bkH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/quartermaster/office) "bkI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) "bkJ" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "bkK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) @@ -3300,10 +3300,10 @@ "blx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bly" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) "blz" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) -"blA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) +"blA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "blB" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) "blC" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) -"blD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) +"blD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) "blE" = (/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/obj/structure/table,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "blF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/assembly/robotics) "blG" = (/obj/structure/bed/stool,/obj/effect/landmark/start{name = "Roboticist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics) @@ -3322,7 +3322,7 @@ "blT" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "blU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "blV" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/disposal) -"blW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) +"blW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "blX" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "blY" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "blZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/lab) @@ -3372,7 +3372,7 @@ "bmR" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "bmS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bmT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"bmU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/medical) +"bmU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/medical) "bmV" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "bmW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/medical/morgue) "bmX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/genetics) @@ -3423,10 +3423,10 @@ "bnQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/bed/dogbed{anchored = 1; desc = "Ian's bed! Looks comfy."; name = "Ian's bed"},/mob/living/simple_animal/pet/dog/corgi/Ian{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bnR" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bnS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) -"bnT" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"bnT" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator) "bnU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_engineering{name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator) -"bnV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator) -"bnW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"bnV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator) +"bnW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator) "bnX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bnY" = (/obj/structure/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bnZ" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -3436,7 +3436,7 @@ "bod" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_med,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "boe" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay) "bof" = (/turf/simulated/wall,/area/medical/medbay) -"bog" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay) +"bog" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) "boh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay) "boi" = (/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "boj" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 30; pixel_y = 0; pixel_z = 0},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -3449,7 +3449,7 @@ "boq" = (/obj/structure/bed/roller,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay) "bor" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) "bos" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/assembly/robotics) -"bot" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) +"bot" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "bou" = (/turf/simulated/floor/plasteel,/area/assembly/robotics) "bov" = (/obj/structure/table,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/stock_parts/cell/high/plus,/obj/item/weapon/stock_parts/cell/high/plus{pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics) "bow" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "biohazard containment door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"}) @@ -3464,7 +3464,7 @@ "boF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "boG" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/assembly/chargebay) "boH" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"boI" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage) +"boI" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "boJ" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "boK" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage) "boL" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/assembly/chargebay) @@ -3512,7 +3512,7 @@ "bpB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bpC" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bpD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) -"bpE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) +"bpE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics) "bpF" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southleft{dir = 1; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/chemistry) "bpG" = (/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bpH" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_medsci,/obj/machinery/requests_console{department = "Genetics"; departmentType = 0; name = "Genetics Requests Console"; pixel_x = 0; pixel_y = 30},/obj/item/weapon/storage/pill_bottle/mutadone,/obj/item/weapon/storage/pill_bottle/mannitol,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) @@ -3520,7 +3520,7 @@ "bpJ" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bpK" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel,/area/medical/genetics) "bpL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel,/area/medical/genetics) -"bpM" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/chemistry) +"bpM" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/chemistry) "bpN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bpO" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bpP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -3557,7 +3557,7 @@ "bqu" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bqv" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central) "bqw" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/central) -"bqx" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bqx" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/heads) "bqy" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central) "bqz" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bqA" = (/obj/machinery/computer/card,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) @@ -3572,7 +3572,7 @@ "bqJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/teleporter) "bqK" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/teleporter) "bqL" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bqM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) +"bqM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) "bqN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bqO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/medical/medbay) "bqP" = (/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -3632,8 +3632,8 @@ "brR" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office) "brS" = (/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "brT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"brU" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads) -"brV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) +"brU" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/heads) +"brV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) "brW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "brX" = (/obj/structure/table,/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "brY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -3758,7 +3758,7 @@ "bun" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "buo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bup" = (/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"buq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) +"buq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) "bur" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bus" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "but" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) @@ -3822,14 +3822,14 @@ "bvz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bvA" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/genetics) "bvB" = (/obj/machinery/camera{c_tag = "Genetics Access"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) -"bvC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/science) +"bvC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/science) "bvD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bvE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bvF" = (/obj/structure/table,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/item/weapon/coin/silver,/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/qm) "bvG" = (/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bvH" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bvI" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) -"bvJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bvJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/hor) "bvK" = (/turf/simulated/wall,/area/crew_quarters/hor) "bvL" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/supply) "bvM" = (/obj/machinery/light_switch{pixel_x = -20; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) @@ -3849,7 +3849,7 @@ "bwa" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/primary/central) "bwb" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central) "bwc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office) -"bwd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/supply) +"bwd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/supply) "bwe" = (/turf/simulated/wall,/area/security/checkpoint/supply) "bwf" = (/obj/machinery/camera{c_tag = "Cargo Bay Entrance"; dir = 4; network = list("SS13")},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central) "bwg" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central) @@ -3888,7 +3888,7 @@ "bwN" = (/obj/machinery/light_switch{pixel_x = 8; pixel_y = 28},/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 28; req_access_txt = "47"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/science) "bwO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bwP" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"bwQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/hor) +"bwQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bwR" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bwS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/qm) "bwT" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/qm) @@ -3907,7 +3907,7 @@ "bxg" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bxh" = (/obj/structure/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "bxi" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) +"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; name = "Research Monitor"; network = list("RD","MiniSat"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bxk" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/crew_quarters/hor) "bxl" = (/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/crew_quarters/hor) "bxm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) @@ -3921,7 +3921,7 @@ "bxu" = (/turf/simulated/wall,/area/quartermaster/qm) "bxv" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start/depsec/science,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/science) "bxw" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/turf/simulated/floor/plasteel,/area/quartermaster/qm) -"bxx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) +"bxx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm) "bxy" = (/turf/simulated/wall,/area/quartermaster/miningdock) "bxz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/quartermaster/miningdock) "bxA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) @@ -3960,9 +3960,9 @@ "byh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Server Room"; req_access = null; req_access_txt = "30"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "byi" = (/turf/simulated/wall,/area/security/checkpoint/science) "byj" = (/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/checkpoint/science) -"byk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/science) +"byk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/science) "byl" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/qm) -"bym" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) +"bym" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) "byn" = (/obj/structure/filingcabinet,/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/quartermaster/qm) "byo" = (/obj/structure/table,/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 5; req_access_txt = "47"},/obj/machinery/button/door{id = "rnd2"; name = "Research Lab Shutter Control"; pixel_x = 5; pixel_y = 5; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "byp" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) @@ -3971,7 +3971,7 @@ "bys" = (/obj/structure/rack,/obj/item/device/aicard,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor) "byt" = (/turf/simulated/wall/r_wall,/area/crew_quarters/hor) "byu" = (/obj/structure/displaycase/labcage,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor) -"byv" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) +"byv" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) "byw" = (/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) "byx" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "byy" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) @@ -3985,7 +3985,7 @@ "byG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "byH" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/closet,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/supply) "byI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/supply) -"byJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/supply) +"byJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/supply) "byK" = (/turf/simulated/floor/plasteel,/area/security/checkpoint/supply) "byL" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start/depsec/supply,/turf/simulated/floor/plasteel,/area/security/checkpoint/supply) "byM" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/machinery/computer/security/mining,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/supply) @@ -4024,7 +4024,7 @@ "bzt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "bzu" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "bzv" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) -"bzw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server) +"bzw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server) "bzx" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "bzy" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = list("SS13","RD"); pixel_x = 22},/obj/machinery/power/apc{dir = 1; name = "Server Room APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "bzz" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/science) @@ -4153,7 +4153,7 @@ "bBS" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "bBT" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) "bBU" = (/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) -"bBV" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server) +"bBV" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server) "bBW" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "bBX" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server) "bBY" = (/obj/item/device/radio/intercom{pixel_x = -25},/obj/structure/filingcabinet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/science) @@ -4200,7 +4200,7 @@ "bCN" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCO" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/medical/sleeper) -"bCQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/sleeper) +"bCQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/sleeper) "bCR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bCS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/medical/sleeper) "bCT" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/clothing/tie/stethoscope,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) @@ -4270,7 +4270,7 @@ "bEf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bEg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "bEh" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) -"bEi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo) +"bEi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) "bEj" = (/obj/structure/table/glass,/obj/item/weapon/pen,/obj/item/clothing/tie/stethoscope,/mob/living/simple_animal/pet/cat/Runtime,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) "bEk" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/cmo,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) "bEl" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{pixel_x = 25},/obj/machinery/camera{c_tag = "Chief Medical Office"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) @@ -4308,11 +4308,11 @@ "bER" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating,/area/storage/tech) "bES" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft) "bET" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/storage/tech) -"bEU" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) -"bEV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) -"bEW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) +"bEU" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) +"bEV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) +"bEW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) "bEX" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech) -"bEY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) +"bEY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) "bEZ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plating,/area/storage/tech) "bFa" = (/turf/simulated/floor/plating,/area/storage/tech) "bFb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech) @@ -4354,7 +4354,7 @@ "bFL" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bFM" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bFN" = (/obj/structure/table,/obj/item/weapon/cartridge/medical{pixel_x = -2; pixel_y = 6},/obj/item/weapon/cartridge/medical{pixel_x = 6; pixel_y = 3},/obj/item/weapon/cartridge/medical,/obj/item/weapon/cartridge/chemistry{pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) -"bFO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo) +"bFO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo) "bFP" = (/obj/machinery/computer/card/minor/cmo,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) "bFQ" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bFR" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4368,22 +4368,22 @@ "bFZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/toxins/mixing) "bGa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/maintenance/asmaint2) "bGb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/toxins/mixing) -"bGc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/mixing) +"bGc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/mixing) "bGd" = (/obj/machinery/doppler_array{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/mixing) "bGe" = (/turf/simulated/wall,/area/toxins/test_area) -"bGf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/toxins/test_area) +"bGf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bGg" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) "bGh" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) -"bGi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock) +"bGi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock) "bGj" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/miningdock) "bGk" = (/obj/structure/bed/stool,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "bGl" = (/obj/item/device/assembly/prox_sensor{pixel_x = -4; pixel_y = 1},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = 9},/obj/item/device/assembly/prox_sensor{pixel_x = 9; pixel_y = -2},/obj/item/device/assembly/prox_sensor{pixel_x = 0; pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "bGm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bGn" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bGo" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft) -"bGp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) +"bGp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft) "bGq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) -"bGr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) +"bGr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) "bGs" = (/obj/machinery/camera{c_tag = "Secure Tech Storage"; dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/storage/tech) "bGt" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor/plasteel,/area/storage/tech) "bGu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) @@ -4497,7 +4497,7 @@ "bIy" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bIz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "bIA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) -"bIB" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"bIB" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "bIC" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "bID" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bIE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4556,15 +4556,15 @@ "bJF" = (/obj/machinery/pipedispenser/disposal/transit_tube,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bJG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bJH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/shieldwallgen{req_access = list(55)},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"bJI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"bJJ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"bJK" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bJI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bJJ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bJK" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bJL" = (/obj/machinery/door/window/southleft{dir = 1; name = "Test Chamber"; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"bJM" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bJM" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bJN" = (/turf/simulated/wall,/area/toxins/xenobiology) "bJO" = (/obj/machinery/door/airlock/research{name = "Testing Lab"; req_access_txt = "47"},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bJP" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) -"bJQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"bJQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "bJR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/toxins/storage) "bJS" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "bJT" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4591,11 +4591,11 @@ "bKo" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bKp" = (/obj/structure/closet/crate,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bKq" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) -"bKr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) -"bKs" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech) +"bKr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) +"bKs" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech) "bKt" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/plating,/area/storage/tech) "bKu" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/turf/simulated/floor/plating,/area/storage/tech) -"bKv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft) +"bKv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft) "bKw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint) "bKx" = (/obj/structure/closet/crate,/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction) "bKy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/asmaint) @@ -4647,13 +4647,13 @@ "bLs" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor) "bLt" = (/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating,/area/shuttle/labor) "bLu" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) -"bLv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) +"bLv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft) "bLw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "bLx" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/plating,/area/storage/tech) "bLy" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/plating,/area/storage/tech) "bLz" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech) "bLA" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/color/yellow,/obj/item/device/t_scanner,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) -"bLB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) +"bLB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "bLC" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction) "bLD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/storage/tech) "bLE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Construction Area Maintenance"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction) @@ -4665,7 +4665,7 @@ "bLK" = (/turf/simulated/wall/r_wall,/area/atmos) "bLL" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bLM" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bLN" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bLN" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bLO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos) "bLP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/atmos) "bLQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/r_wall,/area/atmos) @@ -4696,7 +4696,7 @@ "bMp" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bMq" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bMr" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"bMs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) +"bMs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "bMt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bMu" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) "bMv" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing) @@ -4720,7 +4720,7 @@ "bMN" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bMO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bMP" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"bMQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bMQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bMR" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plasteel,/area/atmos) "bMS" = (/obj/machinery/camera{c_tag = "Atmospherics North East"},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Distro to Waste"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bMT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/obj/machinery/light{dir = 1},/obj/machinery/meter{frequency = 1443; id = "wloop_atm_meter"; name = "Waste Loop"},/turf/simulated/floor/plasteel,/area/atmos) @@ -4762,7 +4762,7 @@ "bND" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/toxins/test_area) "bNE" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area) "bNF" = (/obj/item/device/flashlight/lamp,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area) -"bNG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/test_area) +"bNG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/test_area) "bNH" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/construction) "bNI" = (/turf/simulated/wall,/area/construction) "bNJ" = (/turf/simulated/floor/plating,/area/construction) @@ -4780,14 +4780,14 @@ "bNV" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "bNW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bNX" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bNY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bNY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bNZ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bOa" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bOb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bOc" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Mix to Distro"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bOd" = (/turf/simulated/floor/plasteel,/area/atmos) "bOe" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) -"bOf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bOf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bOg" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Mix to Incinerator"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bOh" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "bOi" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/space/nearstation) @@ -4834,20 +4834,20 @@ "bOX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bOY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/atmos) "bOZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"bPa" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bPa" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bPb" = (/obj/machinery/door/airlock/glass_research{name = "Firing Range"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bPc" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/atmos) "bPd" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Waste In"; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bPe" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) "bPf" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air to Mix"; on = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bPg" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"bPh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bPh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bPi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/atmos) "bPj" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) "bPk" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bPl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bPm" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) -"bPn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bPn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bPo" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bPp" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bPq" = (/obj/machinery/shower{dir = 4},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/medical/virology) @@ -4894,7 +4894,7 @@ "bQf" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/hallway/primary/aft) "bQg" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "bQh" = (/obj/structure/dispenser{pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"bQi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bQi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bQj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bQk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "bQl" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/atmos) @@ -4910,9 +4910,9 @@ "bQv" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bQw" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "bQx" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) -"bQy" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bQy" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bQz" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/atmos) -"bQA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/atmos) +"bQA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/atmos) "bQB" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bQC" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bQD" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -4927,7 +4927,7 @@ "bQM" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) "bQN" = (/obj/machinery/door/firedoor,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Xenobiology North"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) "bQO" = (/obj/structure/closet/bombcloset,/obj/machinery/light_switch{pixel_x = -20; pixel_y = 0},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) -"bQP" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/tcommsat/computer) +"bQP" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/tcommsat/computer) "bQQ" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "bQR" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/ears/earmuffs,/obj/machinery/camera{c_tag = "Testing Lab North"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bQS" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; dir = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -4972,7 +4972,7 @@ "bRF" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "bRG" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Unfiltered to Mix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) "bRH" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 5; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) -"bRI" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bRI" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bRJ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/atmos) "bRK" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space/nearstation) "bRL" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) @@ -4980,17 +4980,17 @@ "bRN" = (/turf/simulated/wall,/area/medical/virology) "bRO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bRQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology) +"bRQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bRR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_virology{name = "Monkey Pen"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRS" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start/depsec/engineering,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/engineering) "bRT" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bRU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) "bRV" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) -"bRW" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bRW" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bRX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bRY" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/button/door{id = "xenobio8"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) "bRZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"bSa" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bSa" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bSb" = (/obj/structure/closet/l3closet/scientist{pixel_x = -2},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bSc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bSd" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/tcommsat/computer) @@ -5018,20 +5018,20 @@ "bSz" = (/obj/structure/table,/turf/simulated/floor/plating,/area/construction) "bSA" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bSB" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"bSC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/turf/simulated/floor/plating,/area/atmos) +"bSC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/turf/simulated/floor/plating,/area/atmos) "bSD" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = -32},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bSE" = (/obj/machinery/computer/station_alert,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/button/door{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 24; pixel_y = 4; req_access_txt = "24"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/atmos) "bSF" = (/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 7},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/machinery/light{dir = 8},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/atmos) "bSG" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel,/area/atmos) "bSH" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/belt/utility,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel,/area/atmos) "bSI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos) -"bSJ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSN" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSO" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"bSP" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 4; initialize_directions = 11},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"bSJ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSN" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSO" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"bSP" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 4; initialize_directions = 11},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "bSQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bSR" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bSS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{name = "Break Room"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -5051,7 +5051,7 @@ "bTg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/engine/break_room) "bTh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bTi" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/engineering) -"bTj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/engineering) +"bTj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/engineering) "bTk" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/engine,/area/toxins/misc_lab) "bTl" = (/turf/simulated/floor/engine,/area/toxins/misc_lab) "bTm" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/engine,/area/toxins/misc_lab) @@ -5098,10 +5098,10 @@ "bUb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bUc" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Telecoms Admin"; departmentType = 5; name = "Telecoms RC"; pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/tcommsat/computer) "bUd" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"bUe" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bUe" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bUf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bUg" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) -"bUh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bUh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bUi" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) "bUj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "bUk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10; pixel_x = 0; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -5140,7 +5140,7 @@ "bUR" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos) "bUS" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) "bUT" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos) -"bUU" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos) +"bUU" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos) "bUV" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) "bUW" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "bUX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5160,7 +5160,7 @@ "bVl" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "bVm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) "bVn" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bVo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room) +"bVo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room) "bVp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bVq" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bVr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -5170,7 +5170,7 @@ "bVv" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/space,/area/space/nearstation) "bVw" = (/obj/structure/lattice/catwalk,/turf/space,/area/space/nearstation) "bVx" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 2},/turf/simulated/floor/plating/airless,/area/space/nearstation) -"bVy" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) +"bVy" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft) "bVz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space/nearstation) "bVA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft) "bVB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5199,7 +5199,7 @@ "bVY" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "bVZ" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "bWa" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) -"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bWc" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "bWd" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bWe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5209,9 +5209,9 @@ "bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bWj" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/medical/virology) "bWk" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bWl" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bWl" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bWm" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/button/door{id = "xenobio7"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"bWn" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bWn" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bWo" = (/obj/item/device/radio/intercom{pixel_x = -25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "bWp" = (/obj/structure/bed/chair/office/light,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "bWq" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) @@ -5232,7 +5232,7 @@ "bWF" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Telecoms Server APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bWG" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bWH" = (/obj/structure/table,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/tcommsat/computer) -"bWI" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer) +"bWI" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer) "bWJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "bWK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/aft) "bWL" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -5270,7 +5270,7 @@ "bXr" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) "bXs" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/paper/range,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/misc_lab) "bXt" = (/obj/structure/table/reinforced,/obj/machinery/magnetic_controller{autolink = 1},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/toxins/misc_lab) -"bXu" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced/tinted,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"bXu" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/tinted/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bXv" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft) "bXw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) "bXx" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) @@ -5281,7 +5281,7 @@ "bXC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bXD" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bXE" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/tcommsat/computer) -"bXF" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) +"bXF" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) "bXG" = (/turf/simulated/floor/plasteel,/area/tcommsat/computer) "bXH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel,/area/engine/break_room) "bXI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -5308,10 +5308,10 @@ "bYd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bYe" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bYf" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"bYg" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"bYh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"bYi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab) -"bYj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"bYg" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bYh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bYi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"bYj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/misc_lab) "bYk" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab) "bYl" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bYm" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab) @@ -5358,11 +5358,11 @@ "bZb" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bZc" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; unacidable = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) "bZd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) -"bZe" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/break_room) +"bZe" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/break_room) "bZf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bZg" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bZh" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser/practice,/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) -"bZi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"bZi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bZj" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "bZk" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/aft) "bZl" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to Port"; on = 0},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5370,12 +5370,12 @@ "bZn" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bZo" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bZp" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) -"bZq" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer) +"bZq" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer) "bZr" = (/obj/machinery/status_display,/turf/simulated/wall,/area/tcommsat/computer) -"bZs" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) +"bZs" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) "bZt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) "bZu" = (/obj/machinery/camera{c_tag = "Engineering Foyer"; dir = 1},/obj/structure/noticeboard{dir = 1; pixel_y = -27},/turf/simulated/floor/plasteel,/area/engine/break_room) -"bZv" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/tcommsat/computer) +"bZv" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plating,/area/tcommsat/computer) "bZw" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) "bZx" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bZy" = (/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -5383,13 +5383,13 @@ "bZA" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/engine/break_room) "bZB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "bZC" = (/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/chiefs_office) -"bZD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"bZD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/chiefs_office) "bZE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/engine/break_room) "bZF" = (/obj/machinery/power/apc{dir = 8; name = "Atmospherics APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/atmos) "bZG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/atmos) "bZH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos) "bZI" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) -"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bZK" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos) "bZL" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bZM" = (/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint) @@ -5401,11 +5401,11 @@ "bZS" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint) "bZT" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bZU" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bZV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bZV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bZW" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"bZX" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"bZX" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bZY" = (/obj/item/device/radio/intercom{pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab) -"bZZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) +"bZZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) "caa" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/toxins/misc_lab) "cab" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/toxins/misc_lab) "cac" = (/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5432,7 +5432,7 @@ "cax" = (/obj/structure/closet/wardrobe/black,/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/aft) "cay" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "caz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"caA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) +"caA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/engineering) "caB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "caC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft) "caD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/security/checkpoint/engineering) @@ -5440,8 +5440,8 @@ "caF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Atmospherics Central"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "caG" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "caH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos) -"caI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"caJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"caI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"caJ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space/nearstation) "caK" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "caL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "caM" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5457,7 +5457,7 @@ "caW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "caX" = (/obj/machinery/sparker{id = "testigniter"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab) "caY" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/misc_lab) -"caZ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"caZ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/engine,/area/toxins/misc_lab) "cba" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/engine,/area/toxins/misc_lab) "cbb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/engine,/area/toxins/misc_lab) "cbc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) @@ -5470,9 +5470,9 @@ "cbj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space/nearstation) "cbk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to Space"; on = 1},/turf/simulated/floor/plating/airless,/area/space/nearstation) "cbl" = (/obj/machinery/camera{c_tag = "Telecoms Server Room"; dir = 4; network = list("SS13")},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) -"cbm" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) +"cbm" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) "cbn" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall,/area/tcommsat/computer) -"cbo" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/computer) +"cbo" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/computer) "cbp" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "CE Office APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "cbq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "cbr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) @@ -5493,7 +5493,7 @@ "cbG" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "CO2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "cbH" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cbI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"cbJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cbJ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/asmaint) "cbL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbM" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5502,9 +5502,9 @@ "cbP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbR" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"cbS" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cbS" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cbT" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cbU" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cbU" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cbV" = (/obj/machinery/camera{c_tag = "Testing Chamber"; dir = 1; network = list("Test","RD"); pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/engine,/area/toxins/misc_lab) "cbW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/toxins/misc_lab) "cbX" = (/obj/machinery/camera{c_tag = "Testing Lab South"; dir = 8; network = list("SS13","RD"); pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -5552,7 +5552,7 @@ "ccN" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccO" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ccP" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"ccQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"ccQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology) "ccR" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab) "ccS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) "ccT" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab) @@ -5578,7 +5578,7 @@ "cdn" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/engine/engineering) "cdo" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/radiation,/turf/simulated/floor/plasteel,/area/engine/engineering) "cdp" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering) -"cdq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cdq" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cdr" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cds" = (/obj/machinery/power/apc{dir = 8; name = "Science Maintenance APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cdt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -5589,10 +5589,10 @@ "cdy" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cdz" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cdA" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 4; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; target_pressure = 4500},/turf/simulated/floor/plasteel,/area/atmos) -"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cdC" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cdD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"cdE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cdE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdH" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5619,7 +5619,7 @@ "cec" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "ced" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "cee" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/tcommsat/computer) -"cef" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) +"cef" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer) "ceg" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/tcommsat/computer) "ceh" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -35},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "cei" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor/plasteel,/area/tcommsat/computer) @@ -5630,7 +5630,7 @@ "cen" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering) "ceo" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "cep" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering) -"ceq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"ceq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "cer" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room) "ces" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/engine/engineering) "cet" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/engine/engineering) @@ -5640,9 +5640,9 @@ "cex" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cey" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/engine/engineering) "cez" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"ceA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos) +"ceA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos) "ceB" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"ceC" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"ceC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/asmaint) "ceE" = (/obj/structure/sign/fire{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceF" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5668,13 +5668,13 @@ "ceZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Power Storage"; req_access_txt = "11"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "cfa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) "cfb" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office) -"cfc" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"cfc" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "cfd" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "cfe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "cff" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering) "cfg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) "cfh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/break_room) -"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cfj" = (/turf/simulated/wall,/area/maintenance/incinerator) "cfk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/atmos{name = "Turbine Access"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cfl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/incinerator) @@ -5689,7 +5689,7 @@ "cfu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/toxins/misc_lab) "cfv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cfw" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cfx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) +"cfx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cfy" = (/obj/structure/rack,/obj/item/clothing/shoes/winterboots,/obj/item/clothing/suit/hooded/wintercoat,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cfz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering) "cfA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -5709,13 +5709,13 @@ "cfO" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/atmos) "cfP" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cfQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cfS" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) "cfT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cfU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall,/area/maintenance/incinerator) -"cfV" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/incinerator) -"cfW" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cfX" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "atmospherics mix pump"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cfV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfX" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator) "cfY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator) "cfZ" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cga" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) @@ -5728,7 +5728,7 @@ "cgh" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgi" = (/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology) "cgj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cgk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/biohazard,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cgk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/biohazard,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cgl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology) "cgm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cgn" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -5762,7 +5762,7 @@ "cgP" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/airlock_painter,/turf/simulated/floor/plasteel,/area/engine/engineering) "cgQ" = (/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) "cgR" = (/turf/simulated/floor/plasteel,/area/engine/engineering) -"cgS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"cgS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "cgT" = (/obj/machinery/door/airlock/engineering{name = "SMES Room"; req_access_txt = "32"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engine_smes) "cgU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "cgV" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/atmos) @@ -5780,8 +5780,8 @@ "chh" = (/obj/machinery/atmospherics/components/unary/tank/toxins{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chi" = (/obj/machinery/atmospherics/pipe/manifold4w/general{level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chj" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "plasma tank pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"chk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"chl" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"chk" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/wall,/area/maintenance/incinerator) +"chl" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chm" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chn" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cho" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology) @@ -5795,7 +5795,7 @@ "chw" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "chx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "chy" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"chz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"chz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "chA" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "chB" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "chC" = (/obj/structure/rack{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/spawner/lootdrop/maintenance,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5838,19 +5838,19 @@ "cin" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "cio" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "cip" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/engine/engineering) -"ciq" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"ciq" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "cir" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_guide,/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_y = 6},/turf/simulated/floor/plasteel,/area/engine/engineering) "cis" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/engine/engineering) "cit" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/wall/r_wall,/area/atmos) -"ciu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"civ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) -"ciw" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos) +"ciu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"civ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) +"ciw" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos) "cix" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/wall/r_wall,/area/atmos) "ciy" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4; name = "input gas connector port"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ciB" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ciC" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ciB" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ciC" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/space,/area/space/nearstation) "ciD" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciF" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5859,7 +5859,7 @@ "ciI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ciJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2) "ciK" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"ciL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"ciL" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ciM" = (/obj/machinery/power/compressor{comp_id = "incineratorturbine"; dir = 1; luminosity = 2},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/camera{c_tag = "Turbine Chamber"; dir = 4; network = list("Turbine")},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "ciN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "ciO" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -5889,7 +5889,7 @@ "cjm" = (/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) "cjn" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating/airless,/area/space/nearstation) "cjo" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating/airless,/area/space/nearstation) -"cjp" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"cjp" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjq" = (/obj/machinery/atmospherics/components/binary/valve{name = "Mix to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjr" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjs" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -5931,15 +5931,15 @@ "ckc" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/turf/simulated/wall/r_wall,/area/atmos) "ckd" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos) "cke" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckf" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"ckf" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator) "ckg" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cki" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckj" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ckh" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to MiniSat"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cki" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ckj" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/binary/valve{dir = 4; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckl" = (/obj/machinery/portable_atmospherics/canister,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ckm" = (/obj/machinery/door/airlock/maintenance{name = "Biohazard Disposals"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"ckn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"ckn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology) "cko" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/maintenance/asmaint2) "ckp" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ckq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5963,10 +5963,10 @@ "ckI" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel,/area/engine/engineering) "ckJ" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/simulated/floor/plasteel,/area/engine/engineering) "ckK" = (/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel,/area/engine/engineering) -"ckL" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"ckL" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "ckM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/misc_lab) "ckN" = (/obj/machinery/door/airlock/glass_research{name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/misc_lab) -"ckO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office) +"ckO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) "ckP" = (/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ckQ" = (/obj/structure/closet/cardboard,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/quartermaster/storage) "ckR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/chiefs_office) @@ -5981,12 +5981,12 @@ "cla" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "clb" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "clc" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "vent_map"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) -"cld" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cle" = (/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clf" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clg" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clh" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cli" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cld" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cle" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"clf" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"clg" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"clh" = (/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cli" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "clj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "clk" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cll" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -6031,7 +6031,7 @@ "clY" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "clZ" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "cma" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"cmb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"cmb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator) "cmc" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cmd" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cme" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) @@ -6049,7 +6049,7 @@ "cmq" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cmr" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cms" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cmt" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cmt" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cmu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/maintenance/asmaint2) "cmv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cmw" = (/obj/machinery/power/solar_control{id = "starboardsolar"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -6091,7 +6091,7 @@ "cng" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/clipboard,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cnh" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/ash,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cni" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) -"cnj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cnj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cnk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cnl" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port) "cnm" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/engine_smes) @@ -6141,7 +6141,7 @@ "coe" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cof" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cog" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"coh" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate) +"coh" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "coi" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "coj" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "cok" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -6153,7 +6153,7 @@ "coq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cor" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; luminosity = 2; on = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "cos" = (/obj/machinery/door/poddoor{id = "auxincineratorvent"; name = "Auxiliary Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) -"cot" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cot" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cou" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cov" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engine_smes) "cow" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engine_smes) @@ -6288,7 +6288,7 @@ "cqV" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "cqW" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/internals/plasma,/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "cqX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering) -"cqY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"cqY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "cqZ" = (/obj/structure/particle_accelerator/particle_emitter/center,/turf/simulated/floor/plating,/area/engine/engineering) "cra" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering) "crb" = (/obj/structure/particle_accelerator/particle_emitter/right,/turf/simulated/floor/plating,/area/engine/engineering) @@ -6303,11 +6303,11 @@ "crk" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "crl" = (/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft) "crm" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/aft) -"crn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cro" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"crn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cro" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "crp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/engineering) -"crq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) -"crr" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"crq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) +"crr" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "crs" = (/obj/structure/cable/yellow{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engineering) "crt" = (/obj/item/weapon/wirecutters,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/engine/engineering) "cru" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/engine/engineering) @@ -6340,7 +6340,7 @@ "crV" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering) "crW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) "crX" = (/obj/structure/closet/emcloset,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/engine/engineering) -"crY" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) +"crY" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "crZ" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "csa" = (/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/engine/engineering) "csb" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) @@ -6358,20 +6358,20 @@ "csn" = (/obj/structure/transit_tube,/turf/space,/area/space) "cso" = (/obj/structure/transit_tube,/obj/structure/lattice,/turf/space,/area/space) "csp" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space) -"csq" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/space,/area/space) -"csr" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/space) +"csq" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"csr" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "css" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cst" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"csw" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/obj/structure/lattice,/turf/space,/area/space) +"csw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "csx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csy" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/space/nearstation) "csz" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space/nearstation) "csA" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space/nearstation) "csB" = (/obj/item/weapon/wirecutters,/obj/structure/lattice,/turf/space,/area/space/nearstation) "csC" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation) -"csD" = (/turf/simulated/wall/r_wall,/area/aisat) +"csD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "csE" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "csF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) "csG" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) @@ -6380,207 +6380,207 @@ "csJ" = (/obj/item/weapon/crowbar,/turf/space,/area/space/nearstation) "csK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csL" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/space,/area/space) -"csM" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/aisat) -"csN" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/aisat) -"csO" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/aisat) +"csM" = (/obj/structure/transit_tube,/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) +"csN" = (/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csO" = (/obj/structure/window/reinforced/fulltile,/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "csP" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/space/nearstation) "csQ" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space/nearstation) "csR" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/space/nearstation) "csS" = (/obj/item/weapon/weldingtool,/turf/space,/area/space/nearstation) -"csT" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space) -"csU" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area/space) -"csV" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) -"csW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) -"csX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) +"csT" = (/obj/structure/transit_tube{dir = 8; icon_state = "Block"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csU" = (/obj/structure/transit_tube/station{reverse_launch = 1},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csV" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior) +"csW" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior) +"csX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "csY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "csZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cta" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/lattice,/turf/space,/area/space) -"ctb" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctc" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctd" = (/obj/machinery/button/door{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) +"cta" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctb" = (/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctd" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "cte" = (/obj/item/device/radio/off,/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctf" = (/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation) -"ctg" = (/turf/simulated/wall,/area/aisat) -"cth" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/aisat) -"cti" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Room"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/aisat) -"ctk" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) +"ctg" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"cth" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"cti" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctj" = (/obj/machinery/camera{c_tag = "MiniSat Pod Access"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctk" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/wall,/area/turret_protected/aisat_interior) "ctl" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctm" = (/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/space/nearstation) "ctn" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cto" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat) -"ctp" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/aisat) -"ctq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"cts" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"ctt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/aisat) +"cto" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Foyer"; req_one_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctp" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/turret_protected/aisat_interior) +"ctq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior) +"ctr" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/folder{pixel_x = 3},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cts" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/off{pixel_y = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) "ctv" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"ctw" = (/obj/structure/transit_tube/station{dir = 4; icon_state = "closed"; reverse_launch = 1},/turf/simulated/floor/plating,/area/aisat) -"ctx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"cty" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/aisat) -"ctz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctA" = (/turf/simulated/floor/plating,/area/aisat) +"ctw" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctx" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"cty" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctz" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "MiniSat Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "ctB" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) "ctC" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity West"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctD" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity East"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"ctE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat) -"ctF" = (/obj/structure/transit_tube{dir = 1; icon_state = "Block"},/turf/simulated/floor/plating,/area/aisat) -"ctG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctH" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"ctI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"ctJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/closet/emcloset,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat) -"ctL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/camera{c_tag = "MiniSat Entrance"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/power/apc{dir = 8; name = "MiniSat External Power APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"ctN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/aisat) -"ctP" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) +"ctE" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctF" = (/obj/machinery/button/door{id = "teledoor"; name = "MiniSat Teleport Shutters Control"; pixel_x = 0; pixel_y = 25; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctG" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctH" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctK" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Teleporter"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctL" = (/obj/machinery/teleport/station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctM" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctN" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space) +"ctO" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space) +"ctP" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) "ctR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/engine/engineering) -"ctS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctU" = (/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat"); pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctV" = (/obj/machinery/turretid{control_area = "AI Satellite Antechamber"; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctW" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/aisat) -"ctX" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"ctY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/wall,/area/aisat) -"ctZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat) +"ctS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctT" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior) +"ctV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "MiniSat Foyer APC"; pixel_x = 27; pixel_y = 0},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctW" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctX" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctY" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"ctZ" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) "cua" = (/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cub" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cud" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cue" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall,/area/aisat) -"cuf" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cug" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/aisat) -"cuh" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) -"cui" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"cuj" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/grille,/turf/space,/area/space) -"cuk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cul" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cum" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cun" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cup" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cur" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"cus" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/space) +"cub" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuc" = (/obj/structure/rack{dir = 1},/obj/machinery/status_display{pixel_y = -32},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cud" = (/obj/machinery/turretid{control_area = null; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera/motion{c_tag = "MiniSat Foyer"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cue" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuf" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cug" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cuh" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cui" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuj" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cuk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cul" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cum" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cun" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Mix to MiniSat"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuo" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating{tag = "icon-warnplatecorner"; icon_state = "warnplatecorner"; dir = 2},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cup" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuq" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 0},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cur" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cus" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior) "cut" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cuu" = (/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/aisat) -"cuv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuw" = (/obj/structure/window/reinforced,/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cux" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuv" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuw" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cux" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding,/obj/item/stack/sheet/mineral/plasma{amount = 35; layer = 3.1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) "cuy" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuz" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuA" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuD" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/aisat) -"cuH" = (/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuJ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuK" = (/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuL" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuM" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuN" = (/obj/machinery/power/apc{aidisabled = 0; cell_type = 2500; dir = 4; name = "MiniSat Antechamber APC"; pixel_x = 29; pixel_y = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuO" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) -"cuP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"cuR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior North West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space) -"cuT" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuU" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuV" = (/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior) -"cuW" = (/obj/machinery/camera/motion{c_tag = "MiniSat Antechamber"; dir = 1; network = list("MiniSat")},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior) -"cuX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/bot/cleanbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior North East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space) +"cuz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuA" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Atmospherics"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/space_heater,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuB" = (/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuC" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Antechamber"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/turretid{control_area = "AI Satellite Atmospherics"; enabled = 1; icon_state = "control_standby"; name = "Atmospherics Turret Control"; pixel_x = -27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cuE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cuF" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turretid{control_area = "AI Satellite Service"; enabled = 1; icon_state = "control_standby"; name = "Service Bay Turret Control"; pixel_x = 27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior) +"cuG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuH" = (/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuK" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Service Bay"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuM" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Atmospherics APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Atmospherics"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Service Bay"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuX" = (/obj/machinery/power/apc{dir = 4; name = "MiniSat Service Bay APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuY" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/floorbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) "cva" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) "cvb" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cve" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"cvc" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) +"cvd" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cve" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "AI Satellite Hallway"; enabled = 1; icon_state = "control_standby"; name = "Chamber Hallway Turret Control"; pixel_x = 32; pixel_y = -24; req_access = list(65)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cvf" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvh" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvj" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) -"cvk" = (/obj/machinery/camera{c_tag = "AI Chamber North"; dir = 2; network = list("MiniSat","RD"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) +"cvg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/cleanbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvh" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvj" = (/turf/simulated/wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvk" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvl" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvm" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) -"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cvm" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Hallway"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvp" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvq" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cvq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvr" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvs" = (/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvt" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvs" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvv" = (/turf/simulated/wall,/area/turret_protected/ai) -"cvw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvw" = (/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvx" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvy" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvz" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 27},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = 5},/obj/effect/landmark/start{name = "AI"},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 32; pixel_y = 32},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cvy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvA" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = 27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvB" = (/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvC" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = 24},/obj/machinery/flasher{id = "AI"; pixel_x = -6; pixel_y = 24},/obj/machinery/camera/motion{c_tag = "AI Chamber South"; dir = 2; network = list("RD","MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvF" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvG" = (/obj/machinery/hologram/holopad,/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvH" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior South West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cvK" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior South East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvB" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvF" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cvG" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvJ" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvK" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cvL" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvM" = (/obj/machinery/camera/motion{c_tag = "MiniSat Core Hallway"; dir = 4; network = list("MiniSat")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvN" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvO" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_se"; name = "southeast of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cvP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvR" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvS" = (/turf/simulated/wall,/area/ai_monitored/storage/secure) -"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/secure) -"cvU" = (/obj/machinery/atmospherics/components/unary/tank/air,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvV" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvW" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvX" = (/obj/structure/window/reinforced,/turf/space,/area/space) -"cvY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) -"cvZ" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space) -"cwa" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Maint APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure) -"cwb" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/ai_monitored/storage/secure) -"cwc" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 5},/area/ai_monitored/storage/secure) -"cwd" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure) -"cwe" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 9},/area/ai_monitored/storage/secure) -"cwf" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"cwg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/aisat) -"cwh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cwi" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwj" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwl" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwo" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat) -"cwq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space) -"cwr" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "MiniSat Maintenance"; dir = 4; network = list("MiniSat")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cws" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cww" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"cwx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/ai_monitored/storage/secure) +"cvP" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvU" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvX" = (/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvZ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwa" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "MiniSat Chamber Hallway APC"; pixel_x = 27; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_x = -28; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwe" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"cwf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Observation"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwg" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwh" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwk" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwm" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwp" = (/obj/structure/bed/chair/office/dark,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwq" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/ai) +"cws" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/ai) +"cwt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "AI Core"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwv" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cww" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "cwy" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cwz" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Auxiliary MiniSat Distribution Port"},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwA" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwB" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwC" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwD" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) +"cwz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/ai_status_display{pixel_x = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cwC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cwE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Chamber APC"; pixel_y = -24},/obj/machinery/flasher{id = "AI"; pixel_x = -11; pixel_y = -24},/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber North"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "cwF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "cwG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "cwH" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/turf/simulated/wall/shuttle/interior{icon_state = "swall_f5"},/area/shuttle/escape) @@ -6691,16 +6691,15 @@ "cyI" = (/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyJ" = (/obj/structure/rack,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyK" = (/turf/simulated/wall/shuttle{icon_state = "swall_f14"},/area/shuttle/abandoned) -"cyL" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyM" = (/turf/simulated/wall/shuttle{icon_state = "swall_f11"},/area/shuttle/abandoned) "cyN" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply) "cyO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyP" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyQ" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply) -"cyR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/abandoned) +"cyR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/abandoned) "cyS" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = 24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = 24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) "cyT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply) -"cyU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) +"cyU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyV" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned) "cyW" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned) "cyX" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) @@ -6736,7 +6735,7 @@ "czB" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "czC" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "czD" = (/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/space/nearstation) -"czE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) +"czE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering) "czF" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North East"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering) "czG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "czH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6748,7 +6747,7 @@ "czN" = (/obj/docking_port/stationary/random{dir = 4; id = "pod_asteroid4"; name = "asteroid"},/turf/space,/area/space) "czO" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "czP" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor) -"czQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"czQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "czR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "czS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2) "czT" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -6801,6 +6800,21 @@ "cAO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/engine/engineering) "cAP" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "cAQ" = (/obj/structure/bed/chair,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft) +"cAR" = (/obj/machinery/door/window{dir = 1; name = "AI Core Door"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cAS" = (/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = -9},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = -31},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = -9},/obj/machinery/newscaster/security_unit{pixel_x = -28; pixel_y = -28},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 28; pixel_y = -28},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cAT" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAU" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cAV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAW" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAX" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cAY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/wall,/area/turret_protected/ai) +"cAZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBa" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBb" = (/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber South"; dir = 2; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBc" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBd" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBe" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBf" = (/obj/machinery/camera{c_tag = "MiniSat External South"; dir = 2; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6939,7 +6953,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyncybaaaaafcyacypcyhcyicyicyicyicyicyicyicyqcyrcyccybaafaaabeOblSbjacAIbkAblVcAJbeOaaaaaaaaacytcyscyscyscyscyscyuaaaaaablWblYbkjbkpbknbktbjrbjrbjrbjrbjrbjrbkubmgbmfboUbkwbkxbfQbkHbfmbmkaZKbmlaZKbmnbmmaLYbjzbmpbmobmobmobmobmqbmsbmraafaaabgObkIbgNbgNbgNbmwbijaaaaafbmxbmzbmybmBbmAbmCbmxbmDbmxbmEaJqbAibfFbmFbkKbkLbmGbmIbfFbmJbliblkbmKbmLbhhbmMbfKbmObmNbkObfKbmRbkPbkRbkQblabkUblablgbKHblobKHbKHbKHblqbdPbnbbiIblsblxbltblDblyblGblFblFblMblNbnjbfVbvxblXbnmbgcbnnbnpbnoblZbiWbmabgcbmdbmcbmebnsbnsbnsbnsbnsbnsbnuaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyncybcyacypcywcylcyxcyicyicyicyicyicyicyicyzcyycyAaafaaabeObnvbjabjabjabeObeObeOaaaaaaaaacyCcyBcyBcyBcyBcyBcyCaaaaaablWbnwbqmbmjbmhbmhbmhbmhbmhbmhbmhbmhbmhbmHbmtbmPbnEbmQbnGbfmbnIbbRbnJbnLbnKbfobnMbnNbjzbjzbmrbnPbnObnRbnQbnSbmraaaaaabgObnTbnVbnUbnVbnWbijaaaaaabmxbnYbnXbnZbmxboabmxbmDbmxbmEaJqbmSbfFbobbkKbmTbipbodbfFbofboebohbogboibhhbojbfKbhibokbmUbfKbfLbmVbfLbmWbmYbmXbmZbmZbmZbmZbmZbmZbmZbnabncbopblwblvbnebndbotbosboubouboubnibiLbovboxbozbowboyboBboAbngbnfbnkbnhbnlbgcbnrbnqbnxboFboFboFboFboFboHbhGbkybkybkyaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcygcywcyicylcyxcyicyicyicyicyicyDcypcyccygcyEcybaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyCboIblWblWboJbqmbjrbjrboKboKboKboKbjrbjrbjrbjrbkJboNbuFbnybnAbnzboSboRboTbbRbbRbnKboWboVboYboXbpaboZbpcbpbbpebpdbpfbmraafaaabgObpgbphbphbphbpibijaaaaafbmxbpkbpjbplbmxbpmbmxbmDbmxbpnaJqbmSbfFbnBbkKbnDbnCbptbfFbpublibiubogbpwbpvbofbofbpybpxbnHbnFbolbocboobomboqbpEbpHbpGbpJbpIbpLbpKbonbPvboCborboEboDboLboGbfVbpRbouboubpTbnibiLbpUbpWboMboObpXboBbpZboQboPbpobiWbpqbppbprbgcbqebqebqebqebqebqebiYbhGbqhbqgbkybkyaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywcyLcyLcyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywczyczycyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpcAKbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcygcywcyicylcyicyicyicyicyicyicyicyicyMcyhcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyScyCboIblWblWbtrbjrbjrbjrbjrbjrbjrbjrbjrbjrbrNbtsaZEbttbtubjvbrRbkMbkNbkMbuIbbRbtybnKbtzbrTaJqbqvbqybmrbtBbrSbtDbtCbtEbmraaaaaaaafbgObtGbtFbtGbijaafaaaaaabshbtIbtHbtKbtJbtLbtLbtNbtMbtObAkaNrbrVbrXbLXbFDbrYbEebsqbEebEebssbsrbtXbtVbtVbtVbtZbhhbhhbhhbstbuabuabsubpEbpEbpEbsvbugbufbrebpKbonbdObdPbuhbuhbuhbuhbuhbfVboxboxboxboxbujbswbujboxbszcdXbsAbuobuobuobsCbsDbupbusbsEbuubsFbuwbuvbuvbsGbsIbsHbsMbsJbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcyccyccyccyccyccyccyccyEcybaaacyacypcywcyicyicyicylcyicyicyDcyccyccyecyKcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyTbrJbrKbrJbnwbuBbjrbjrbuCbjrbuBbjrbjrbjrbrNbuDaZEbuEbbRbtvbsVbbRbfmbbRbbRbbRbuJbnKbtzbrTaYlbqvbuKbmrbuMbsYbuObuNbnSbmraaaaaaaafbuPbuQbphbuSbuRaafaaaaaabshbtdbtcbuWbuVbuYbuXbuZbqHbvaaJqaJqbofbofbtfbJGbwzbBLbvjbvhbtgbtgbvhbvjbvhbvjbvhbvjbvhbvjbfJbfJbuabvnbsLbtkbtibpEbsvbtlbvsbvvbvubonbtmbtobtnbtxbtwbuobuobtAbuobuobtPbtSbtQbtUbvEbuobtWceXbvHbvJbvJbvJbvKbvKbvKbvKbvKbvMbtYbvObvNbvObvPbvObqebuzbhGbvQbrGbvRbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6969,72 +6983,72 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwbVwbVwbVwbVwbXvbHEbXvbHEbXwbXxcAMbXybHEbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbXAbXzbXCbXBbXDbWBbXFbXEbODbOCbOMbVJbVMbCqbSAbLZbQgbXJbXKbLKbXMbXLbWQbOObXPbXObWQbXQbSIbXRbMKbXSbWabOdbVZbXTbXUbTTbXVbPhbRKbPjbXXbXWbXYbOhbVubzsbWebzsbBRbXZbPvbNcbOPbYabYdbYcbWibYabYebWjbYebPubPwbLTbDbbEmbEmbEmbYgbYfbRZbUfbMibUgbYhbRUbRUbUibDbbQZbYjbYicaZbQZbQZbYkbYmbZdbPsbPbbPLbPFbPMbUpbUpbTqbTrbkybYrbkybYsbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVapQapQbLvbLvbLvbYubYtbYwbYvbYxbHEbYybHEbLvaoVaoVaoVaoVaoVaoVaoVbESbVHbVIbYzbYBbYAbXCbYCbYzbYzbXFbYDbQbbPQbQdbVJbVMbCqbSAbLZbYIbYHbYHbYJbYLbYKbYNbQebYPbQqbWQbOdbSIbYQbYRbXSbYSbOdbVZbXTbUSbURbYTbQyapQbQAbYVbYUbYWbOhbVubzsbWebzsbHZbHZbPvbNcbNdbYXbYYbNdbYZbNdbNdbNdbNdbNdbNcbLTbDbbJNbJNbJNbJNbVibZabTcbZbbVibJNbJNbJNbJNbDbbTlbZcbTlcbabTlbQZbYkbYmbYlbYobQGbQIbWrbZhbQZbUpbTqbTrbkybtpbtpbtpbZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbLvbZkbZjbZjbZlbWzbLubCqbLvbLvaoVcceaoVaoVaoVaoVaoVbGpbVHbVIbYzbYzbZnbZpbZobYzbZqbZsbZrbZvbQKbQPbVJbVMbCqbZxbQQbDGbYHbZzbRicewbRjbRmbRkbRSbRobWQbZFbZGbXRbMKbXSbZHbOdbZIbXTbUSbZJbZKbRIbVvbPjbZLbXWbXWbOhbVubPnbWebZMbzsbZNbPvbZObTZbTZbZPbNdbZRbZQbZSbzsbZUbZTbLSbLTbDbbRTbRUbRUbZVbRVbMibRXbRZbZWbZXbEmbEmbEmbDbbZYbTlbTlbTlbTlbQZbZZbZZcaacabbPNbPNbWrbPNbQZbPNbTqbTrbkycadcaccaebZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhbVubPncaJcaIbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhbVubPnbAwcbJbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhbVubzsbzsbWeccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhbVubzsbAwcdEcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhbVubzscaKceCceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQbVucfjcfjcfjcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQaoVcfVcfUcfXcfWcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQaoVcfjchhchjchichlchkchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQaoVcfjciyciAcizciCciBciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQapQcfjcjpcjrcjqcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVapQckfckecjrckgckickhckkckjcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVaoVcfjcldclfcleclhclgcljclicfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQapQcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVaoVaoVaoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVaoVaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVaoVaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsocsncspcsqcsraaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacsLcswcshaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcsUcswcsraafaafcsDcsDcsDcsDcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaafaaaaaacsLcswcshaaacsDcsNcsMcsOcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacsUcsTcshcsDcsWcsVcsXcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcsUctacsDctcctbctdcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgcthcsDctjctictkcsDctgctgaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafctgctpctoctrctqcttctsctuctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctwctoctxctbctzctyctActyaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctFctEctHctGctJctIctKctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctgctgctMctLctNctgctgctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafaaaaaactOctxctPctQctOaaaaaaaagaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaafaaaaaactOctxctSctzctOaaaaaaaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSctyctyaaSaafaafaafctgctUctTctVctgaafaafaafaaSctyctyaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWctZctYaaacuacuacuacuccubcudcuacuacuaaaacuecugcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWcufcuicujcuaculcukcuncumcupcuocuqcuacuscurctWcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuucuwcuvcuvcuxcuzcuycuBcuAcuCcuycuEcuDcuFcuFcuHcuGcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacuacuJcuycuLcuKcuMcuycuNcuacuOcuOcuQcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScuRctgctgctgcuacuUcuTcuVcuVcuWcuTcuXcuactgctgctgcuYcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvccvbcvecvdcvacvfcvgcvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvicvhcvkcvjcvmcvlcvncvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvocvlcvpcvpcvpcvlcvqcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvpcvscvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvuctgctgcvacvacvlcvpcvvcvvcvvcvpcvlcvacvactgctgcvwcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhcsDcvacvxcvlcvycvvcvzcvvcvycvlcvAcvacsDctXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvlcvpcvCcvBcvDcvpcvlcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvEcvycvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvFcvpcvHcvGcvIcvpcvFcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvJctgctgcvvcvacvacvfcvLcvKcvMcvbcvacvacvvctgctgcvNcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvacvacvacvPcvQcvacvaaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvScvRcvUcvTcvWcvVcvSaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcvYcvXcvZcvZcvScwacwccwbcwecwdcvScvXcvZcvXcwfcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcwgcwhcuvcuvcuvcwjcwicwlcwkcwncwmcwocuFcuFcuFcuFcwpcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacuOcuOcuOcwqcuOcvScwrcwtcwscwvcwucwxcwwcwqcuOcwqcwqaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaScvScwzcwBcwAcwDcwCcvSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvScvScwEcwEcwEcvScvSaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhcaJcaIcdEcbJbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhapQbPnbAwceCbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhapQbzsbzscfVccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhapQbzsbAwcfWcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhapQbzscaKcfXceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQapQcfjcfjchkcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQapQcfjcfjciBchlcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQciCcfUcjpckhcizckicjrchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQbVucfjchhchjchicldckjciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQbVucfjciyciAcizcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVbVuckfckecjrcjqcjrclecljclfcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVbVucfjclgclhckgcsqclickkcsrcfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQbVucfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVcaJbUraoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVbVuaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVbVuaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafcswaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaaaaaaaaacsDcsDcsDcsDcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsMcsncsncsncsOcsNcsUcsTcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaagcsDcsDcsDcsVcsWcsVcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcswaagctacsXctactbctcctbcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagctdaagcsDctgcticthctcctjctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaagcuacuacuacuactoctkctqctpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuacuactrcttctscuacuacuacuacuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactwctuctyctxctActzctFctEcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactHctGctJctIcuyctKctMctLcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctOctNaafcuactQctPctTctSctVctUctXctWcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctZctYctZctZcuccubcuecudcugcufcufcufcufaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuhcuictZcujcujculcukcujcufcumcumcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuocuncuqcupcujcurcuucuscujcuvcuwcuwcuxcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuAcuzcuCcuBcuEcuDcuGcuFcuEcuHcuJcuIcuKcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuMcuLcuOcuNcuQcuPcuScuRcuUcuTcuWcuVcuXcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuYcuzcuZcujcvccvecvdcujcvgcvicvhcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvjcvmcvjcvkcvkcvocvncvkcvjcvqcvjcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvscvtcvjcvwcvucvzcvycvwcvjcvCcvBcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvDcvtcvjcvwcvucvzcvycvwcvjcvCcvEcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvFcvkcvkcvtcvjcvGcvucvIcvHcvJcvjcvCcvkcvkcvKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvLcvjcvMcvucvzcvycvwcvjcvNcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvQcvPcvScvRcvTcvycvVcvUcvWcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvjcvZcvYcvzcvycwacvjcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvXcvjcvGcwbcwccvycvJcvjcvXcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvkcvXcvjcvwcvucvzcvycvwcvjcvXcvkcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvXcvjcvwcvucwdcvycvwcvjcvXcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacvfcvacwfcwecvbcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwhcwgcwjcwicwkcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwmcwlcwocwncwpcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvacwrcwrcwtcwscwrcvacvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvpcvpcvlcwucwncvpcvpcvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcwxcwwcwAcwzcwCcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcwjcwDcARcwEcwncvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcwucvvcAScvvcATcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAUcvacvacvxcvlcAVcvvcvvcvvcAWcvlcvAcvacvacAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcAZcAYcBacvvcvlcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcvlcBbcBccvpcvlcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcvlcBdcBecvlcvlcvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvacvacvacvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaacBfaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/cfg/admin.txt b/cfg/admin.txt index 1f4c89d373b..236e1dee367 100644 --- a/cfg/admin.txt +++ b/cfg/admin.txt @@ -13,3 +13,4 @@ giacomand rockdtben MrStonedOne Jordie0608 +Dunc \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 207c7d435cb..e54ac17b67b 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -97,10 +97,11 @@ Passive gate is similar to the regular pump except: if(stat & (BROKEN|NOPOWER)) return ui_interact(user) -/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/passive_gate/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 90d7fff5d92..e29156be018 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -105,10 +105,11 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 0d5dfd6d139..aa55bc1ce68 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -102,10 +102,11 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 310, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 310, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/volume_pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index db33cde75e0..41b3cd295df 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -1,33 +1,19 @@ -#define FILTER_NOTHING -1 -#define FILTER_PLASMA 0 -#define FILTER_OXYGEN 1 -#define FILTER_NITROGEN 2 -#define FILTER_CARBONDIOXIDE 3 -#define FILTER_NITROUSOXIDE 4 +#define FILTER_NOTHING "" +//very cleverly using the gas IDs so as to simplify a bunch of logic +#define FILTER_PLASMA "plasma" +#define FILTER_OXYGEN "o2" +#define FILTER_NITROGEN "n2" +#define FILTER_CARBONDIOXIDE "co2" +#define FILTER_NITROUSOXIDE "n2o" /obj/machinery/atmospherics/components/trinary/filter + name = "gas filter" icon_state = "filter_off" density = 0 - - name = "gas filter" - can_unwrench = 1 - var/on = 0 - var/target_pressure = ONE_ATMOSPHERE - - var/filter_type = 0 -/* -Filter types: --1: Nothing - 0: Plasma: Plasma Toxin, Oxygen Agent B - 1: Oxygen: Oxygen ONLY - 2: Nitrogen: Nitrogen ONLY - 3: Carbon Dioxide: Carbon Dioxide ONLY - 4: Sleeping Agent (N2O) -*/ - + var/filter_type = FILTER_PLASMA var/frequency = 0 var/datum/radio_frequency/radio_connection @@ -108,39 +94,17 @@ Filter types: var/datum/gas_mixture/filtered_out = new filtered_out.temperature = removed.temperature - switch(filter_type) - if(FILTER_PLASMA) - filtered_out.toxins = removed.toxins - removed.toxins = 0 - - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - - if(FILTER_OXYGEN) - filtered_out.oxygen = removed.oxygen - removed.oxygen = 0 - - if(FILTER_NITROGEN) - filtered_out.nitrogen = removed.nitrogen - removed.nitrogen = 0 - - if(FILTER_CARBONDIOXIDE) - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 - - if(FILTER_NITROUSOXIDE) - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/sleeping_agent)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - - else - filtered_out = null - + if(filter_type && removed.gases[filter_type]) + filtered_out.assert_gas(filter_type) + filtered_out.gases[filter_type][MOLES] = removed.gases[filter_type][MOLES] + removed.gases[filter_type][MOLES] = 0 + if(filter_type == FILTER_PLASMA && removed.gases["agent_b"]) + filtered_out.assert_gas("agent_b") + filtered_out.gases["agent_b"][MOLES] = removed.gases["agent_b"][MOLES] + removed.gases["agent_b"][MOLES] = 0 + removed.garbage_collect() + else + filtered_out = null air2.merge(filtered_out) air3.merge(removed) @@ -166,10 +130,11 @@ Filter types: return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_filter", name, 430, 140) + ui = new(user, src, ui_key, "atmos_filter", name, 430, 140, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/filter/get_ui_data() @@ -186,7 +151,7 @@ Filter types: switch(action) if("power") - on=!on + on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") switch(params["pressure"]) @@ -196,7 +161,7 @@ Filter types: target_pressure = max(0, min(MAX_OUTPUT_PRESSURE, safe_input("Pressure control", "Enter new output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", target_pressure))) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos") if("filter") - src.filter_type = text2num(params["mode"]) + filter_type = params["mode"] var/filtering_name = "nothing" switch(filter_type) if(FILTER_PLASMA) diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index d20cd9c2109..5e416123295 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -129,10 +129,11 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165) + ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/mixer/get_ui_data() diff --git a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm index a44d0221f63..c4feb4fc6eb 100644 --- a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm +++ b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm @@ -107,7 +107,7 @@ src.current_temperature = min(T20C, src.current_temperature+amount) else src.current_temperature = max(min_temperature, src.current_temperature+amount) - active_power_usage = (current_heat_capacity * (T20C - current_temperature) / 100) + idle_power_usage + src.updateUsrDialog() /obj/machinery/atmospherics/components/unary/cold_sink/freezer/process() @@ -236,7 +236,7 @@ src.current_temperature = min((max_temperature), src.current_temperature+amount) else src.current_temperature = max(T20C, src.current_temperature+amount) - active_power_usage = (current_heat_capacity * (current_temperature - T20C) / 100) + idle_power_usage + src.updateUsrDialog() src.add_fingerprint(usr) return diff --git a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm index 65419798bfd..2fa1d39d472 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm @@ -23,6 +23,7 @@ else icon_state = "cold_on" +//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos() /obj/machinery/atmospherics/components/unary/cold_sink/process_atmos() ..() if(!on) @@ -34,10 +35,20 @@ var/old_temperature = air_contents.temperature if(combined_heat_capacity > 0) - var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature + //current_tempature is target tempature + var/combined_energy = current_heat_capacity*current_temperature + air_heat_capacity*air_contents.temperature air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring down current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) + + var/temperatureChange=abs(old_temperature-air_contents.temperature) + if(temperatureChange > 1) + //The new formula is based on change from current temp, instead of change from T20C + // The 10 const is not scaled yet. + active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage + //Note: Powerusage won't be subtracted off till next tick but one tick of not being accurate before machine turns off is fine update_parents() + else + //No change in temp, use idle power + active_power_usage= idle_power_usage + return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index a3697d2ac3c..4bb78933cc6 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -110,10 +110,11 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "cryo", name, 400, 550, state = notcontained_state) + ui = new(user, src, ui_key, "cryo", name, 400, 550, master_ui, state) ui.open() /obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data() @@ -265,7 +266,7 @@ if(occupant.bodytemperature < T0C) occupant.sleeping = max(5 / efficiency, (1 / occupant.bodytemperature) * 2000 / efficiency) occupant.Paralyse(max(5 / efficiency, (1 / occupant.bodytemperature) * 3000 / efficiency)) - if(air_contents.oxygen > 2) + if(air_contents.gases["o2"] && air_contents.gases["o2"][MOLES] > 2) if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) else occupant.adjustOxyLoss(-1) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm index b08a4a214a7..b5fc8164279 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm @@ -24,6 +24,7 @@ else icon_state = "cold_on" +//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/cold_sink/process_atmos() /obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos() ..() if(!on) @@ -39,8 +40,15 @@ var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring up current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) + + var/temperatureChange=abs(old_temperature-air_contents.temperature) + + if(temperatureChange > 1) + active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage update_parents() + else + //No change in temp, use idle power + active_power_usage= idle_power_usage + return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm index 0c0bee0b275..55215da0753 100644 --- a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm @@ -46,7 +46,8 @@ var/added_oxygen = oxygen_content - total_moles air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) - air_contents.oxygen += added_oxygen + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] += added_oxygen update_parents() diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index d9e649c7a13..e4b9622b481 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -8,6 +8,12 @@ use_power = 0 level = 0 +/obj/machinery/atmospherics/components/unary/portables_connector/New() + ..() + var/datum/gas_mixture/air_contents = AIR1 + + air_contents.volume = 0 + /obj/machinery/atmospherics/components/unary/portables_connector/visible level = 2 diff --git a/code/ATMOSPHERICS/components/unary_devices/tank.dm b/code/ATMOSPHERICS/components/unary_devices/tank.dm index 44ab5048460..dfff3ced12f 100644 --- a/code/ATMOSPHERICS/components/unary_devices/tank.dm +++ b/code/ATMOSPHERICS/components/unary_devices/tank.dm @@ -6,58 +6,36 @@ desc = "A large vessel containing pressurized gas." var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters density = 1 + var/gas_type = 0 /obj/machinery/atmospherics/components/unary/tank/New() ..() var/datum/gas_mixture/air_contents = AIR1 air_contents.volume = volume air_contents.temperature = T20C + if(gas_type) + air_contents.assert_gas(gas_type) + air_contents.gases[gas_type][MOLES] = AIR_CONTENTS + name = "[name] ([air_contents.gases[gas_type][GAS_NAME]])" /obj/machinery/atmospherics/components/unary/tank/carbon_dioxide - name = "pressure tank (Carbon Dioxide)" - -/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.carbon_dioxide = AIR_CONTENTS + gas_type = "co2" /obj/machinery/atmospherics/components/unary/tank/toxins icon_state = "orange" - name = "pressure tank (Plasma)" - -/obj/machinery/atmospherics/components/unary/tank/toxins/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.toxins = AIR_CONTENTS + gas_type = "plasma" /obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b icon_state = "orange_2" - name = "pressure tank (Oxygen + Plasma)" - -/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - var/datum/gas/oxygen_agent_b/trace_gas = new - trace_gas.moles = AIR_CONTENTS - air_contents.trace_gases += trace_gas + gas_type = "agent_b" /obj/machinery/atmospherics/components/unary/tank/oxygen icon_state = "blue" - name = "pressure tank (Oxygen)" - -/obj/machinery/atmospherics/components/unary/tank/oxygen/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.oxygen = AIR_CONTENTS + gas_type = "o2" /obj/machinery/atmospherics/components/unary/tank/nitrogen icon_state = "red" - name = "pressure tank (Nitrogen)" - -/obj/machinery/atmospherics/components/unary/tank/nitrogen/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.nitrogen = AIR_CONTENTS + gas_type = "n2" /obj/machinery/atmospherics/components/unary/tank/air icon_state = "grey" @@ -66,5 +44,6 @@ /obj/machinery/atmospherics/components/unary/tank/air/New() ..() var/datum/gas_mixture/air_contents = AIR1 - air_contents.oxygen = AIR_CONTENTS * 0.2 - air_contents.nitrogen = AIR_CONTENTS * 0.8 \ No newline at end of file + air_contents.assert_gases("o2", "n2") + air_contents.gases["o2"][MOLES] = AIR_CONTENTS * 0.2 + air_contents.gases["n2"][MOLES] = AIR_CONTENTS * 0.8 \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 2aa4dc062fd..809f9da7a0f 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -277,7 +277,7 @@ welded = 0 update_icon() pipe_vision_img = image(src, loc, layer = 20, dir = dir) - return 1 + return 0 else return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 65bdcf2c5e8..548db3f41d6 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -162,40 +162,56 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) - if (!tile || !istype(tile)) + if (!istype(tile)) return 0 var/datum/gas_mixture/environment = tile.return_air() var/datum/gas_mixture/air_contents = AIR1 + var/list/env_gases = environment.gases if(scrubbing & SCRUBBING) - if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) + var/should_we_scrub = FALSE + for(var/id in env_gases) + if(id == "n2" || id == "o2") + continue + if(env_gases[id][MOLES]) + should_we_scrub = TRUE + break + if(should_we_scrub) var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() //Take a gas sample var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) + var/list/removed_gases = removed.gases if (isnull(removed)) //in space return //Filter it var/datum/gas_mixture/filtered_out = new + var/list/filtered_gases = filtered_out.gases filtered_out.temperature = removed.temperature - if(scrub_Toxins) - filtered_out.toxins = removed.toxins - removed.toxins = 0 - if(scrub_CO2) - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + if(scrub_Toxins && removed_gases["plasma"]) + filtered_out.assert_gas("plasma") + filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES] + removed.gases["plasma"][MOLES] = 0 + if(scrub_CO2 && removed_gases["co2"]) + filtered_out.assert_gas("co2") + filtered_out.gases["co2"][MOLES] = removed_gases["co2"][MOLES] + removed.gases["co2"][MOLES] = 0 + + if(removed_gases["agent_b"]) + filtered_out.assert_gas("agent_b") + filtered_out.gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES] + removed.gases["agent_b"][MOLES] = 0 + + if(scrub_N2O && removed_gases["n2o"]) + filtered_out.assert_gas("n2o") + filtered_out.gases["n2o"][MOLES] = removed_gases["n2o"][MOLES] + removed.gases["n2o"][MOLES] = 0 + + removed.garbage_collect() //Remix the resulting gases air_contents.merge(filtered_out) @@ -309,7 +325,7 @@ welded = 0 update_icon() pipe_vision_img = image(src, loc, layer = 20, dir = dir) - return 1 + return 0 if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!(stat & NOPOWER) && on) @@ -321,4 +337,4 @@ return !welded #undef SIPHONING -#undef SCRUBBING \ No newline at end of file +#undef SCRUBBING diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index b4547824db6..6c765cd1c11 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -24,8 +24,7 @@ if(update) update = 0 reconcile_air() - - return + update = air.react() var/pipenetwarnings = 10 @@ -130,21 +129,14 @@ var/pipenetwarnings = 10 for(var/obj/machinery/atmospherics/pipe/member in members) member.air_temporary = new member.air_temporary.volume = member.volume + member.air_temporary.copy_from(air) + var/member_gases = member.air_temporary.gases - member.air_temporary.oxygen = air.oxygen*member.volume/air.volume - member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume - member.air_temporary.toxins = air.toxins*member.volume/air.volume - member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume + for(var/id in member_gases) + member_gases[id][MOLES] *= member.volume/air.volume member.air_temporary.temperature = air.temperature - if(air.trace_gases.len) - for(var/datum/gas/trace_gas in air.trace_gases) - var/datum/gas/corresponding = new trace_gas.type() - member.air_temporary.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*member.volume/air.volume - /datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) var/total_heat_capacity = air.heat_capacity() var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) @@ -203,8 +195,8 @@ var/pipenetwarnings = 10 var/list/datum/pipeline/PL = list() PL += src - for(var/i=1;i<=PL.len;i++) - var/datum/pipeline/P = PL[i] + for(var/i in PL) + var/datum/pipeline/P = i GL += P.air GL += P.other_airs for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) @@ -215,56 +207,26 @@ var/pipenetwarnings = 10 if(C.connected_device) GL += C.portableConnectorReturnAir() - var/total_volume = 0 var/total_thermal_energy = 0 var/total_heat_capacity = 0 - var/total_oxygen = 0 - var/total_nitrogen = 0 - var/total_toxins = 0 - var/total_carbon_dioxide = 0 - var/list/total_trace_gases = list() + var/datum/gas_mixture/total_gas_mixture = new(0) + + for(var/i in GL) + var/datum/gas_mixture/G = i + total_gas_mixture.volume += G.volume + + total_gas_mixture.merge(G) - for(var/datum/gas_mixture/G in GL) - total_volume += G.volume total_thermal_energy += G.thermal_energy() total_heat_capacity += G.heat_capacity() - total_oxygen += G.oxygen - total_nitrogen += G.nitrogen - total_toxins += G.toxins - total_carbon_dioxide += G.carbon_dioxide - - if(G.trace_gases.len) - for(var/datum/gas/trace_gas in G.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - total_trace_gases += corresponding - - corresponding.moles += trace_gas.moles - - if(total_volume > 0) - - //Calculate temperature - var/temperature = 0 - - if(total_heat_capacity > 0) - temperature = total_thermal_energy/total_heat_capacity + total_gas_mixture.temperature = total_heat_capacity ? total_thermal_energy/total_heat_capacity : 0 + if(total_gas_mixture.volume > 0) //Update individual gas_mixtures by volume ratio for(var/datum/gas_mixture/G in GL) - G.oxygen = total_oxygen*G.volume/total_volume - G.nitrogen = total_nitrogen*G.volume/total_volume - G.toxins = total_toxins*G.volume/total_volume - G.carbon_dioxide = total_carbon_dioxide*G.volume/total_volume + G.copy_from(total_gas_mixture) + var/list/G_gases = G.gases + for(var/id in G_gases) + G_gases[id][MOLES] *= G.volume/total_gas_mixture.volume - G.temperature = temperature - - if(total_trace_gases.len) - for(var/datum/gas/trace_gas in total_trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in G.trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - G.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*G.volume/total_volume \ No newline at end of file diff --git a/code/ATMOSPHERICS/gas_types.dm b/code/ATMOSPHERICS/gas_types.dm new file mode 100644 index 00000000000..0fd17097415 --- /dev/null +++ b/code/ATMOSPHERICS/gas_types.dm @@ -0,0 +1,81 @@ +var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, which were at one time hardcoded + +/proc/meta_gas_list() + var/meta_list = new /list + for(var/gas_path in subtypesof(/datum/gas)) + var/list/gas_info = new(4) + var/datum/gas/g = gas_path + + gas_info[1] = initial(g.specific_heat) + gas_info[2] = initial(g.name) + gas_info[3] = initial(g.moles_visible) + if(gas_info[3] != null) + gas_info[4] = new /obj/effect/overlay/gas(initial(g.gas_overlay)) + + meta_list[initial(g.id)] = gas_info + . = meta_list + +/*||||||||||||||/----------\||||||||||||||*\ +||||||||||||||||[GAS DATUMS]|||||||||||||||| +||||||||||||||||\__________/|||||||||||||||| +||||These should never be instantiated. |||| +||||They exist only to make it easier |||| +||||to add a new gas. They are accessed |||| +||||only by meta_gas_list(). |||| +\*||||||||||||||||||||||||||||||||||||||||*/ + +/datum/gas + var/id = "" + var/specific_heat = 0 + var/name = "" + var/gas_overlay = "" //icon_state in icons/effects/tile_effects.dmi + var/moles_visible = null + +/datum/gas/oxygen + id = "o2" + specific_heat = 20 + name = "Oxygen" + +/datum/gas/nitrogen + id = "n2" + specific_heat = 20 + name = "Nitrogen" + +/datum/gas/carbon_dioxide //what the fuck is this? + id = "co2" + specific_heat = 30 + name = "Carbon Dioxide" + +/datum/gas/plasma + id = "plasma" + specific_heat = 200 + name = "Plasma" + gas_overlay = "plasma" + moles_visible = MOLES_PLASMA_VISIBLE + +/datum/gas/nitrous_oxide + id = "n2o" + specific_heat = 40 + name = "Nitrous Oxide" + gas_overlay = "nitrous_oxide" + moles_visible = 1 + +/datum/gas/oxygen_agent_b + id = "agent_b" + specific_heat = 300 + name = "Oxygen Agent B" + +/datum/gas/volatile_fuel + id = "v_fuel" + specific_heat = 30 + name = "Volatile Fuel" + +/obj/effect/overlay/gas/ + icon = 'icons/effects/tile_effects.dmi' + mouse_opacity = 0 + layer = 5 + appearance_flags = RESET_COLOR + +/obj/effect/overlay/gas/New(state) + . = ..() + icon_state = state \ No newline at end of file diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index 00d16589414..52ea8059ee0 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -11,9 +11,13 @@ var/datum/gas_mixture/air_contents = return_air() if(!air_contents) return 0 + + var/oxy = air_contents.gases["o2"] ? air_contents.gases["o2"][MOLES] : 0 + var/tox = air_contents.gases["plasma"] ? air_contents.gases["plasma"][MOLES] : 0 + if(active_hotspot) if(soh) - if(air_contents.toxins > 0.5 && air_contents.oxygen > 0.5) + if(tox > 0.5 && oxy > 0.5) if(active_hotspot.temperature < exposed_temperature) active_hotspot.temperature = exposed_temperature if(active_hotspot.volume < exposed_volume) @@ -22,11 +26,11 @@ var/igniting = 0 - if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && air_contents.toxins > 0.5) + if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && tox > 0.5) igniting = 1 if(igniting) - if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5) + if(oxy < 0.5 || tox < 0.5) return 0 active_hotspot = PoolOrNew(/obj/effect/hotspot, src) @@ -104,7 +108,7 @@ qdel(src) return - if(!(location.air) || location.air.toxins < 0.5 || location.air.oxygen < 0.5) + if(!(location.air) || !location.air.gases["plasma"] || !location.air.gases["o2"] || location.air.gases["plasma"][MOLES] < 0.5 || location.air.gases["o2"][MOLES] < 0.5) qdel(src) return diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index e1904d8973b..a3a972aba68 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -155,6 +155,7 @@ var/const/SPAWN_AIR = 256 return var/datum/gas_mixture/G = new + var/list/new_gases = G.gases if(flag & SPAWN_20C) G.temperature = T20C @@ -163,22 +164,29 @@ var/const/SPAWN_AIR = 256 G.temperature += 1000 if(flag & SPAWN_TOXINS) - G.toxins += amount + G.assert_gas("plasma") + new_gases["plasma"][MOLES] += amount + if(flag & SPAWN_OXYGEN) - G.oxygen += amount + G.assert_gas("o2") + new_gases["o2"][MOLES] += amount + if(flag & SPAWN_CO2) - G.carbon_dioxide += amount + G.assert_gas("co2") + new_gases["co2"][MOLES] += amount + if(flag & SPAWN_NITROGEN) - G.nitrogen += amount + G.assert_gas("n2") + new_gases["n2"][MOLES] += amount if(flag & SPAWN_N2O) - var/datum/gas/sleeping_agent/T = new - T.moles += amount - G.trace_gases += T + G.assert_gas("n2o") + new_gases["n2o"][MOLES] += amount if(flag & SPAWN_AIR) - G.oxygen += MOLES_O2STANDARD * amount - G.nitrogen += MOLES_N2STANDARD * amount + G.assert_gases("o2","n2") + new_gases["o2"][MOLES] += MOLES_O2STANDARD * amount + new_gases["n2"][MOLES] += MOLES_N2STANDARD * amount air.merge(G) SSair.add_to_active(src, 0) \ No newline at end of file diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 2ad06711b10..fdada2d153d 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -15,26 +15,14 @@ //Create gas mixture to hold data for passing var/datum/gas_mixture/GM = new - GM.oxygen = oxygen - GM.carbon_dioxide = carbon_dioxide - GM.nitrogen = nitrogen - GM.toxins = toxins - - GM.temperature = temperature + GM.copy_from_turf(src) return GM -/turf/remove_air(amount as num) - var/datum/gas_mixture/GM = new +/turf/remove_air(amount) + var/datum/gas_mixture/GM = return_air() - var/sum = oxygen + carbon_dioxide + nitrogen + toxins - if(sum>0) - GM.oxygen = (oxygen/sum)*amount - GM.carbon_dioxide = (carbon_dioxide/sum)*amount - GM.nitrogen = (nitrogen/sum)*amount - GM.toxins = (toxins/sum)*amount - - GM.temperature = temperature + GM.remove(amount) return GM @@ -51,7 +39,7 @@ var/temperature_archived //USED ONLY FOR SOLIDS - var/atmos_overlay_type = "" //current active overlay + var/atmos_overlay_types = list() //gas IDs of current active overlays /turf/simulated/New() ..() @@ -61,11 +49,7 @@ visibilityChanged() if(!blocks_air) air = new - air.oxygen = oxygen - air.carbon_dioxide = carbon_dioxide - air.nitrogen = nitrogen - air.toxins = toxins - air.temperature = temperature + air.copy_from_turf(src) /turf/simulated/Destroy() visibilityChanged() @@ -168,22 +152,22 @@ excited_group.merge_groups(enemy_simulated.excited_group) //combine groups share_air(enemy_simulated) //share else - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) excited_group.add_turf(enemy_simulated) //add enemy to our group share_air(enemy_simulated) //share else if(enemy_simulated.excited_group) - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) enemy_simulated.excited_group.add_turf(src) //join self to enemy group share_air(enemy_simulated) //share else - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) var/datum/excited_group/EG = new //generate new group EG.add_turf(src) EG.add_turf(enemy_simulated) share_air(enemy_simulated) //share else - if(!air.compare(enemy_simulated.air)) //compare if + if(air.compare(enemy_simulated.air)) //compare if SSair.add_to_active(enemy_simulated) //excite enemy if(excited_group) excited_group.add_turf(enemy_simulated) //add enemy to group @@ -233,34 +217,24 @@ archived_cycle = SSair.times_fired /turf/simulated/proc/update_visuals() - var/new_overlay_type = tile_graphic() - if (new_overlay_type == atmos_overlay_type) - return - var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) - if (atmos_overlay) - overlays -= atmos_overlay + var/list/new_overlay_types = tile_graphic() - atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) - if (atmos_overlay) - overlays += atmos_overlay - atmos_overlay_type = new_overlay_type + for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added + overlays -= overlay + atmos_overlay_types -= overlay -/turf/simulated/proc/get_atmos_overlay_by_name(var/name) - switch(name) - if("plasma") - return SSair.plasma_overlay - if("sleeping_agent") - return SSair.sleeptoxin_overlay - return null + for(var/overlay in new_overlay_types-atmos_overlay_types) //doesn't add overlays that already exist + overlays += overlay + + atmos_overlay_types = new_overlay_types /turf/simulated/proc/tile_graphic() - if(air.toxins > MOLES_PLASMA_VISIBLE) - return "plasma" - - var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air.trace_gases - if(sleeping_agent && (sleeping_agent.moles > 1)) - return "sleeping_agent" - return null + . = new /list + var/list/gases = air.gases + for(var/id in gases) + var/gas = gases[id] + if(gas[GAS_OVERLAY] && gas[MOLES] > gas[MOLES_VISIBLE]) + . += gas[GAS_OVERLAY] /turf/simulated/proc/share_air(turf/simulated/T) if(T.current_cycle < current_cycle) @@ -290,12 +264,16 @@ /atom/movable/var/pressure_resistance = 5 - +/atom/movable/var/last_high_pressure_movement_air_cycle = 0 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction) + set waitfor = 0 + . = 0 if(!anchored && !pulledby) - if(pressure_difference > pressure_resistance) - spawn step(src, direction) - return 1 + . = 1 + if(pressure_difference > pressure_resistance && last_high_pressure_movement_air_cycle < SSair.times_fired) + last_high_pressure_movement_air_cycle = SSair.times_fired + step(src, direction) + @@ -331,36 +309,17 @@ /datum/excited_group/proc/self_breakdown() var/datum/gas_mixture/A = new - var/datum/gas/sleeping_agent/S = new - A.trace_gases += S + var/list/A_gases = A.gases for(var/turf/simulated/T in turf_list) - A.oxygen += T.air.oxygen - A.carbon_dioxide+= T.air.carbon_dioxide - A.nitrogen += T.air.nitrogen - A.toxins += T.air.toxins - - if(T.air.trace_gases.len) - for(var/datum/gas/N in T.air.trace_gases) - S.moles += N.moles + A.merge(T.air) for(var/turf/simulated/T in turf_list) - T.air.oxygen = A.oxygen/turf_list.len - T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len - T.air.nitrogen = A.nitrogen/turf_list.len - T.air.toxins = A.toxins/turf_list.len - - if(S.moles > 0) - if(T.air.trace_gases.len) - for(var/datum/gas/G in T.air.trace_gases) - G.moles = S.moles/turf_list.len - else - var/datum/gas/sleeping_agent/G = new - G.moles = S.moles/turf_list.len - T.air.trace_gases += G + var/T_gases = T.air.gases + for(var/id in T_gases) + T_gases[id][MOLES] = A_gases[id][MOLES]/turf_list.len T.update_visuals() - /datum/excited_group/proc/dismantle() for(var/turf/simulated/T in turf_list) T.excited = 0 @@ -473,4 +432,4 @@ var/heat = thermal_conductivity*delta_temperature* \ (heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here - temperature -= heat/heat_capacity \ No newline at end of file + temperature -= heat/heat_capacity diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 2701a64da59..8d410ef0764 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -8,11 +8,15 @@ #define MOLES_O2STANDARD (MOLES_CELLSTANDARD*O2STANDARD) // O2 standard value (21%) #define MOLES_N2STANDARD (MOLES_CELLSTANDARD*N2STANDARD) // N2 standard value (79%) -#define GAS_O2 (1 << 0) -#define GAS_N2 (1 << 1) -#define GAS_PL (1 << 2) -#define GAS_CO2 (1 << 3) -#define GAS_N2O (1 << 4) +//indices of values in gas lists. used by listmos. +#define MOLES 1 +#define ARCHIVE 2 +#define GAS_META 3 +//this is kinda hacky... but it means I don't have to change every single time they're called. +#define SPECIFIC_HEAT GAS_META][1 +#define GAS_NAME GAS_META][2 +#define GAS_OVERLAY GAS_META][4 +#define MOLES_VISIBLE GAS_META][3 //stuff you should probably leave well alone! //ATMOS @@ -152,3 +156,8 @@ #define PARENT2 parents[2] #define PARENT3 parents[3] #define PARENT_I parents[I] + +//Tanks +#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3) +#define TANK_MIN_RELEASE_PRESSURE 0 +#define TANK_DEFAULT_RELEASE_PRESSURE 16 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0116232841a..7959272566d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -127,15 +127,21 @@ Proc for attack log creation, because really why not /proc/add_logs(mob/user, mob/target, what_done, object=null, addition=null) var/newhealthtxt = "" + var/coordinates = "" var/turf/attack_location = get_turf(target) - var/coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])" - if (target && isliving(target)) + if(attack_location) + coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])" + if(target && isliving(target)) var/mob/living/L = target newhealthtxt = " (NEWHP: [L.health])" if(user && ismob(user)) user.attack_log += text("\[[time_stamp()]\] Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]") + if(user.mind) + user.mind.attack_log += text("\[[time_stamp()]\] [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]") if(target && ismob(target)) target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]") + if(target.mind) + target.mind.attack_log += text("\[[time_stamp()]\] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]") log_attack("[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]") @@ -144,10 +150,10 @@ Proc for attack log creation, because really why not if(!user || !target) return 0 var/user_loc = user.loc - + var/drifting = 0 if(!user.Process_Spacemove(0) && user.inertia_dir) - drifting = 1 + drifting = 1 var/target_loc = target.loc @@ -168,11 +174,11 @@ Proc for attack log creation, because really why not break if(uninterruptible) continue - + if(drifting && !user.inertia_dir) drifting = 0 user_loc = user.loc - + if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying ) . = 0 break @@ -188,11 +194,11 @@ Proc for attack log creation, because really why not Tloc = target.loc var/atom/Uloc = user.loc - + var/drifting = 0 if(!user.Process_Spacemove(0) && user.inertia_dir) - drifting = 1 - + drifting = 1 + var/holding = user.get_active_hand() var/holdingnull = 1 //User's hand started out empty, check for an empty hand @@ -210,11 +216,11 @@ Proc for attack log creation, because really why not sleep(1) if (progress) progbar.update(world.time - starttime) - + if(drifting && !user.inertia_dir) drifting = 0 Uloc = user.loc - + if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc)) . = 0 break diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 75afaff8d07..a9c35aee9b4 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -304,6 +304,8 @@ switch(ui_style) if("Retro") return 'icons/mob/screen_retro.dmi' if("Plasmafire") return 'icons/mob/screen_plasmafire.dmi' + if("Slimecore") return 'icons/mob/screen_slimecore.dmi' + if("Operative") return 'icons/mob/screen_operative.dmi' else return 'icons/mob/screen_midnight.dmi' //colour formats diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 76623d41e30..fef8563b618 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -620,15 +620,16 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. var/turf/current = get_turf(source) var/turf/target_turf = get_turf(target) - var/steps = 0 - - while(current != target_turf) - if(steps > length) return 0 - if(current.opacity) return 0 - for(var/atom/A in current) - if(A.opacity) return 0 + var/steps = 1 + if(current != target_turf) current = get_step_towards(current, target_turf) - steps++ + while(current != target_turf) + if(steps > length) return 0 + if(current.opacity) return 0 + for(var/atom/A in current) + if(A.opacity) return 0 + current = get_step_towards(current, target_turf) + steps++ return 1 @@ -674,9 +675,10 @@ Turf and target are seperate in case you want to teleport some distance from a t if(A.vars.Find(lowertext(varname))) return 1 else return 0 -//Returns sortedAreas list if populated -//else populates the list first before returning it +//Repopulates sortedAreas list /proc/SortAreas() + sortedAreas = list() + for(var/area/A in world) sortedAreas.Add(A) @@ -947,20 +949,15 @@ var/list/WALLITEMS_INVERSE = list( user << "Results of analysis of \icon[icon] [target]." if(total_moles>0) - var/o2_concentration = air_contents.oxygen/total_moles - var/n2_concentration = air_contents.nitrogen/total_moles - var/co2_concentration = air_contents.carbon_dioxide/total_moles - var/plasma_concentration = air_contents.toxins/total_moles - - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration) - user << "Pressure: [round(pressure,0.1)] kPa" - user << "Nitrogen: [round(n2_concentration*100)] %" - user << "Oxygen: [round(o2_concentration*100)] %" - user << "CO2: [round(co2_concentration*100)] %" - user << "Plasma: [round(plasma_concentration*100)] %" - if(unknown_concentration>0.01) - user << "Unknown: [round(unknown_concentration*100)] %" + + var/list/cached_gases = air_contents.gases + + for(var/id in cached_gases) + var/gas_concentration = cached_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_concentration > 0.01) //ensures the four primary gases are always shown. + user << "[cached_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %" + user << "Temperature: [round(air_contents.temperature-T0C)] °C" else user << "[target] is empty!" @@ -1232,10 +1229,10 @@ B --><-- A return L -/atom/proc/contains(var/atom/location) - if(!location) + +/atom/proc/contains(var/atom/A) + if(!A) return 0 - for(location, location && location != src, location=location.loc); //semicolon is for the empty statement + for(var/atom/location = A.loc, location, location = location.loc) if(location == src) return 1 - return 0 diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 4f4fef2c952..70ed708c3e4 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -1,5 +1,6 @@ #define DEBUG //Enables byond profiling and full runtime logs - note, this may also be defined in your .dme file -//#define TESTING //Enables in-depth debug messages to runtime log (used for debugging) //By using the testing("message") proc you can create debug-feedback for people with this + //Enables in-depth debug messages to runtime log (used for debugging) +//#define TESTING //By using the testing("message") proc you can create debug-feedback for people with this //uncommented, but not visible in the release version) #define PRELOAD_RSC 1 /*set to: diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 647c2274bf3..258cb4f0847 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,4 +16,5 @@ var/global/list/table_recipes = list() //list of all table craft recipes var/global/list/rcd_list = list() //list of Rapid Construction Devices. var/global/list/apcs_list = list() //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed. var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... -var/global/list/poi_list = list() //list of points of interest for observe/follow \ No newline at end of file +var/global/list/poi_list = list() //list of points of interest for observe/follow +var/global/list/pinpointer_list = list() //list of all pinpointers. Used to change stuff they are pointing to all at once. \ No newline at end of file diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index e8512549c1c..0385439f831 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -7,8 +7,4 @@ var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-ti var/list/powernets = list() -// this is not strictly unused although the whole modules datum thing is unused -// To remove this you need to remove that -var/datum/moduletypes/mods = new() - var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New() \ No newline at end of file diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 07f15152850..94b3efb66c5 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -81,9 +81,10 @@ action_intent = using if(istype(mymob, /mob/living/carbon/alien/humanoid/hunter)) - mymob.leap_icon = new /obj/screen/alien/leap() - mymob.leap_icon.screen_loc = ui_alien_storage_r - adding += mymob.leap_icon + var/mob/living/carbon/alien/humanoid/hunter/H = mymob + H.leap_icon = new /obj/screen/alien/leap() + H.leap_icon.screen_loc = ui_alien_storage_r + adding += H.leap_icon using = new /obj/screen/drop() using.icon = 'icons/mob/screen_alien.dmi' diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 1632b5f318f..db25833d75f 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -149,7 +149,7 @@ var/global/datum/controller/master/Master = new() // If we caused BYOND to miss a tick, stop processing for a bit... if(startingtick < world.time || start_time + 1 < world.timeofday) break - sleep(-1) + sleep(0) cost = MC_AVERAGE(cost, world.timeofday - start_time) if(ran_subsystems) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 21bb4ef7d24..619a38e999f 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -18,9 +18,6 @@ var/datum/subsystem/air/SSair var/cost_pipenets = 0 var/cost_atmos_machinery = 0 - var/obj/effect/overlay/plasma_overlay //overlay for plasma - var/obj/effect/overlay/sleeptoxin_overlay //overlay for sleeptoxin - var/list/excited_groups = list() var/list/active_turfs = list() var/list/hotspots = list() @@ -36,9 +33,6 @@ var/datum/subsystem/air/SSair /datum/subsystem/air/New() NEW_SS_GLOBAL(SSair) - plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma"}() - sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent"}() - /datum/subsystem/air/stat_entry(msg) msg += "C:{" msg += "AT:[round(cost_turfs,0.01)]|" @@ -169,32 +163,39 @@ var/datum/subsystem/air/SSair /datum/subsystem/air/proc/setup_allturfs(z_level) var/z_start = 1 var/z_finish = world.maxz + if(1 <= z_level && z_level <= world.maxz) z_level = round(z_level) z_start = z_level z_finish = z_level + var/list/turfs_to_init = block(locate(1, 1, z_start), locate(world.maxx, world.maxy, z_finish)) + for(var/turf/simulated/T in turfs_to_init) T.CalculateAdjacentTurfs() T.excited = 0 active_turfs -= T - if(!T.blocks_air) - T.update_visuals() - for(var/direction in cardinal) - if(!(T.atmos_adjacent_turfs & direction)) - continue - var/turf/enemy_tile = get_step(T, direction) - if(istype(enemy_tile,/turf/simulated/)) - var/turf/simulated/enemy_simulated = enemy_tile - if(!T.air.compare(enemy_simulated.air)) - T.excited = 1 - active_turfs |= T - break - else - if(!T.air.check_turf_total(enemy_tile)) - T.excited = 1 - active_turfs |= T - break + + if(T.blocks_air) + continue + + T.update_visuals() + + for(var/direction in cardinal) + if(!(T.atmos_adjacent_turfs & direction)) + continue + + var/turf/enemy_tile = get_step(T, direction) + var/datum/gas_mixture/enemy_air = enemy_tile.return_air() + + var/is_active = T.air.compare(enemy_air) + + if(is_active) + testing("Active turf found. Return value of compare(): [is_active]") + T.excited = 1 + active_turfs |= T + break + if(active_turfs.len) warning("There are [active_turfs.len] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") for(var/turf/simulated/T in active_turfs) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 05a3bc43131..cb3ae7d0a2b 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -12,6 +12,8 @@ var/datum/subsystem/minimap/SSminimap var/const/MAX_ICON_DIMENSION = 1024 var/const/ICON_SIZE = 4 + + var/max_initalized_zlevel = 0 /datum/subsystem/minimap/New() NEW_SS_GLOBAL(SSminimap) @@ -23,6 +25,7 @@ var/datum/subsystem/minimap/SSminimap generate(z) for (var/z = 1 to ZLEVEL_SPACEMAX) register_asset("minimap_[z].png", file("[getMinimapFile(z)].png")) + max_initalized_zlevel = ZLEVEL_SPACEMAX ..() /datum/subsystem/minimap/proc/generate(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy) @@ -173,9 +176,9 @@ var/datum/subsystem/minimap/SSminimap return "data/minimaps/[MAP_NAME]_[zlevel]" /datum/subsystem/minimap/proc/sendMinimaps(client/client) - for (var/z = 1 to world.maxz) + for (var/z = 1 to max_initalized_zlevel) send_asset(client, "minimap_[z].png") #ifdef MINIMAP_DEBUG #undef MINIMAP_DEBUG -#endif \ No newline at end of file +#endif diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm index ed73d3bfdd9..2c9b47983f7 100644 --- a/code/controllers/subsystem/shuttles/emergency.dm +++ b/code/controllers/subsystem/shuttles/emergency.dm @@ -1,3 +1,7 @@ +#define UNLAUNCHED 0 +#define ENDGAME_LAUNCHED 1 +#define EARLY_LAUNCHED 2 + /obj/docking_port/mobile/emergency name = "emergency shuttle" id = "emergency" @@ -102,18 +106,22 @@ G.dom_attempts = min(1,G.dom_attempts) if(SHUTTLE_DOCKED) - if(time_left <= 0 && SSshuttle.emergencyNoEscape) - priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority") - sound_played = 0 - mode = SHUTTLE_STRANDED - if(time_left <= 50 && !sound_played) //4 seconds left - should sync up with the launch - sound_played = 1 + + if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch + sound_played = 1 //Only rev them up once. for(var/area/shuttle/escape/E in world) E << 'sound/effects/hyperspace_begin.ogg' + + if(time_left <= 0 && SSshuttle.emergencyNoEscape) + priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority") + sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass. + mode = SHUTTLE_STRANDED + if(time_left <= 0 && !SSshuttle.emergencyNoEscape) //move each escape pod to its corresponding transit dock for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile) - if(M.z == ZLEVEL_STATION) //Will not launch from the mine/planet + if(M.launch_status == UNLAUNCHED) //Will not launch from the mine/planet + M.launch_status = ENDGAME_LAUNCHED M.enterTransit() //now move the actual emergency shuttle to its transit dock for(var/area/shuttle/escape/E in world) @@ -126,7 +134,8 @@ if(time_left <= 0) //move each escape pod to its corresponding escape dock for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile) - M.dock(SSshuttle.getDock("[M.id]_away")) + if(M.launch_status == ENDGAME_LAUNCHED) + M.dock(SSshuttle.getDock("[M.id]_away")) //now move the actual emergency shuttle to centcomm for(var/area/shuttle/escape/E in world) E << 'sound/effects/hyperspace_end.ogg' @@ -148,9 +157,11 @@ dwidth = 1 width = 3 height = 4 + var/launch_status = UNLAUNCHED /obj/docking_port/mobile/pod/request() - if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA && z == ZLEVEL_STATION) + if((security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) && launch_status == UNLAUNCHED) + launch_status = EARLY_LAUNCHED return ..() /obj/docking_port/mobile/pod/New() @@ -238,3 +249,9 @@ /obj/item/weapon/storage/pod/attack_hand(mob/user) return + + + +#undef UNLAUNCHED +#undef LAUNCHED +#undef EARLY_LAUNCHED diff --git a/code/controllers/subsystem/shuttles/supply.dm b/code/controllers/subsystem/shuttles/supply.dm index 8c76c882de6..d3c96f216d2 100644 --- a/code/controllers/subsystem/shuttles/supply.dm +++ b/code/controllers/subsystem/shuttles/supply.dm @@ -211,6 +211,7 @@ var/list/blacklist = list( /mob/living, /obj/effect/blob, + /obj/effect/rune, /obj/effect/spider/spiderling, /obj/item/weapon/disk/nuclear, /obj/machinery/nuclearbomb, diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index e9aca112ca8..22604f811db 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -9,19 +9,19 @@ var/datum/subsystem/tgui/SStgui can_fire = 1 // This needs to fire before round start. var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. - var/list/processing_uis = list() // A list of processing UIs, not grouped. - var/html // The HTML template used by new UIs; minus initial data. + var/list/processing_uis = list() // A list of processing UIs, ungrouped. + var/basehtml // The HTML base used for all UIs. /datum/subsystem/tgui/New() - html = file2text('tgui/tgui.html') // Read the HTML from disk. + basehtml = file2text('tgui/tgui.html') // Read the HTML from disk. NEW_SS_GLOBAL(SStgui) /datum/subsystem/tgui/stat_entry() - ..("O:[open_uis.len]|P:[processing_uis.len]") // Show how many interfaces we have open/are processing. + ..("P:[processing_uis.len]") -/datum/subsystem/tgui/fire() // Process UIs. +/datum/subsystem/tgui/fire() for(var/thing in processing_uis) var/datum/tgui/ui = thing if(ui && ui.user && ui.src_object) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6951d554dec..56cdf29535f 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -485,5 +485,5 @@ var/datum/subsystem/ticker/ticker //map rotate chance defaults to 75% of the length of the round (in minutes) if (!prob((world.time/600)*config.maprotatechancedelta)) return - spawn(-1) //compiling a map can lock up the mc for 30 to 60 seconds if we don't spawn + spawn(0) //compiling a map can lock up the mc for 30 to 60 seconds if we don't spawn maprotate() diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 15c92b07b88..461169cf4b4 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -26,10 +26,13 @@ var/datum/subsystem/timer/SStimer if (!event.thingToCall || qdeleted(event.thingToCall)) qdel(event) if (event.timeToRun <= world.time) - spawn(-1) - call(event.thingToCall, event.procToCall)(arglist(event.argList)) + runevent(event) qdel(event) +/datum/subsystem/timer/proc/runevent(datum/timedevent/event) + set waitfor = 0 + call(event.thingToCall, event.procToCall)(arglist(event.argList)) + /datum/timedevent var/thingToCall var/procToCall diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 413764f7345..3f582156347 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -348,7 +348,7 @@ body html += "[name] = null" else if (istext(value)) - html += "[name] = \"[value]\"" + html += "[name] = \"[html_encode(value)]\"" else if (isicon(value)) #ifdef VARSICON @@ -405,7 +405,7 @@ body html += "" else - html += "[name] = [value]" + html += "[name] = [html_encode(value)]" html += "" diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm index 794c8f6fe4c..69293a78bf9 100644 --- a/code/datums/gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -3,90 +3,108 @@ What are the archived variables for? Calculations are done using the archived variables with the results merged into the regular variables. This prevents race conditions that arise based on the order of tile processing. */ - -#define SPECIFIC_HEAT_TOXIN 200 -#define SPECIFIC_HEAT_AIR 20 -#define SPECIFIC_HEAT_CDO 30 -#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \ - (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN) - #define MINIMUM_HEAT_CAPACITY 0.0003 #define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */ -/datum/gas - var/moles = 0 - var/specific_heat = 0 - var/moles_archived = 0 +var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm +var/list/cached_gases_list = null -/datum/gas/sleeping_agent - specific_heat = 40 +/proc/gaslist(gasid) + if(!cached_gases_list) + cached_gases_list = new /list(meta_gas_info.len) -/datum/gas/oxygen_agent_b - specific_heat = 300 + if(!cached_gases_list[gasid]) + if(!meta_gas_info[gasid]) + CRASH("Error: no such gas type! Type : [gasid]") -/datum/gas/volatile_fuel - specific_heat = 30 + var/list/new_gas_list = new(3) + new_gas_list[MOLES] = 0 + new_gas_list[ARCHIVE] = 0 + new_gas_list[GAS_META] = meta_gas_info[gasid] + cached_gases_list[gasid] = new_gas_list + var/list/gas = cached_gases_list[gasid] + . = gas.Copy() /datum/gas_mixture - var/oxygen = 0 - var/carbon_dioxide = 0 - var/nitrogen = 0 - var/toxins = 0 - - var/volume = CELL_VOLUME - - var/temperature = 0 //in Kelvin - - var/last_share - - var/list/datum/gas/trace_gases = list() - - - var/tmp/oxygen_archived - var/tmp/carbon_dioxide_archived - var/tmp/nitrogen_archived - var/tmp/toxins_archived - + var/list/gases + var/temperature //in Kelvin var/tmp/temperature_archived + var/volume + var/last_share + var/tmp/fuel_burnt - var/tmp/fuel_burnt = 0 +/datum/gas_mixture/New(Volume = CELL_VOLUME) + . = ..() + gases = new + temperature = 0 + temperature_archived = 0 + volume = Volume + last_share = 0 + fuel_burnt = 0 + + //listmos procs + + //assert_gas(gas_id) - used to guarantee that the gas list for this id exists. + //Must be used before adding to a gas. May be used before reading from a gas. +/datum/gas_mixture/proc/assert_gas(gas_id) + var/cached_gases = gases + if(cached_gases[gas_id]) + return + cached_gases[gas_id] = gaslist(gas_id) //see ATMOSPHERICS/gas_types.dm + + //assert_gases(args) - shorthand for calling assert_gas() once for each gas type. +/datum/gas_mixture/proc/assert_gases() + for(var/id in args) + assert_gas(id) + + //add_gas(gas_id) - similar to assert_gas(), but does not check for an existing + //gas list for this id. + //Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas(). +/datum/gas_mixture/proc/add_gas(gas_id) + gases[gas_id] = gaslist(gas_id) + + //add_gases(args) - shorthand for calling add_gas() once for each gas_type. +/datum/gas_mixture/proc/add_gases() + for(var/id in args) + add_gas(id) + + //garbage_collect() - removes any gas list which is empty. + //Must be used after subtracting from a gas. Must be used after assert_gas() + //if assert_gas() was called only to read from the gas. + //By removing empty gases, processing speed is increased. +/datum/gas_mixture/proc/garbage_collect() + var/list/cached_gases = gases + for(var/id in cached_gases) + var/gas = cached_gases[id] + if(QUANTIZE(gas[MOLES]) <= 0 && QUANTIZE(gas[ARCHIVE]) <= 0) + cached_gases -= id //PV=nRT - related procedures /datum/gas_mixture/proc/heat_capacity() - var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - heat_capacity += trace_gas.moles*trace_gas.specific_heat - return heat_capacity - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][MOLES]*cached_gases[id][SPECIFIC_HEAT] /datum/gas_mixture/proc/heat_capacity_archived() - var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived) - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat - return heat_capacity_archived - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][ARCHIVE]*cached_gases[id][SPECIFIC_HEAT] /datum/gas_mixture/proc/total_moles() - var/moles = oxygen + carbon_dioxide + nitrogen + toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - moles += trace_gas.moles - return moles - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][MOLES] /datum/gas_mixture/proc/return_pressure() if(volume>0) return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume return 0 - /datum/gas_mixture/proc/return_temperature() return temperature @@ -103,84 +121,96 @@ What are the archived variables for? /datum/gas_mixture/proc/react(atom/dump_location) + var/list/procgases = gases //this speeds things up because >byond var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network) if(temperature < TCMB) temperature = TCMB - if(trace_gases.len > 0) - if(temperature > 900) - if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY) - var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases - if(trace_gas) - var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05) + if(procgases["agent_b"] && temperature > 900 && procgases["plasma"] && procgases["co2"]) + if(procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY) + var/reaction_rate = min(procgases["co2"][MOLES]*0.75, procgases["plasma"][MOLES]*0.25, procgases["agent_b"][MOLES]*0.05) - carbon_dioxide -= reaction_rate - oxygen += reaction_rate + procgases["co2"][MOLES] -= reaction_rate - trace_gas.moles -= reaction_rate*0.05 + assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing + procgases["o2"][MOLES] += reaction_rate - temperature -= (reaction_rate*20000)/heat_capacity() + procgases["agent_b"][MOLES] -= reaction_rate*0.05 - reacting = 1 + temperature -= (reaction_rate*20000)/heat_capacity() + + garbage_collect() + + reacting = 1 + /* if(thermal_energy() > (PLASMA_BINDING_ENERGY*10)) - if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY && (toxins+carbon_dioxide)/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high. - //world << "pre [temperature, [toxins], [carbon_dioxide] + if(procgases["plasma"] && procgases["co2"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (procgases["plasma"][MOLES]+procgases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high. + //world << "pre [temperature, [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]] var/old_heat_capacity = heat_capacity() - var/carbon_efficency = min(toxins/carbon_dioxide,MAX_CARBON_EFFICENCY) + var/carbon_efficency = min(procgases["plasma"][MOLES]/procgases["co2"][MOLES],MAX_CARBON_EFFICENCY) var/reaction_energy = thermal_energy() - var/moles_impurities = total_moles()-(toxins+carbon_dioxide) + var/moles_impurities = total_moles()-(procgases["plasma"][MOLES]+procgases["co2"][MOLES]) + var/plasma_fused = (PLASMA_FUSED_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY) var/carbon_catalyzed = (CARBON_CATALYST_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY) var/oxygen_added = carbon_catalyzed var/nitrogen_added = (plasma_fused-oxygen_added)-(thermal_energy()/PLASMA_BINDING_ENERGY) - reaction_energy = max(reaction_energy+((carbon_efficency*toxins)/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) - toxins = max(toxins-plasma_fused,0) - carbon_dioxide = max(carbon_dioxide-carbon_catalyzed,0) - oxygen = max(oxygen+oxygen_added,0) - nitrogen = max(nitrogen+nitrogen_added,0) + reaction_energy = max(reaction_energy+((carbon_efficency*procgases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) + + assert_gases("o2", "n2") + + procgases["plasma"][MOLES] -= plasma_fused + procgases["co2"][MOLES] -= carbon_catalyzed + procgases["o2"][MOLES] += oxygen_added + procgases["n2"][MOLES] += nitrogen_added + + garbage_collect() + if(reaction_energy > 0) reacting = 1 var/new_heat_capacity = heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB) //Prevents whatever mechanism is causing it to hit negative temperatures. - //world << "post [temperature], [toxins], [carbon_dioxide] - - - + //world << "post [temperature], [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]] + */ fuel_burnt = 0 if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - //world << "pre [temperature], [oxygen], [toxins]" - if(fire() > 0) + //world << "pre [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]" + if(fire()) reacting = 1 - //world << "post [temperature], [oxygen], [toxins]" + //world << "post [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]" return reacting /datum/gas_mixture/proc/fire() var/energy_released = 0 var/old_heat_capacity = heat_capacity() + var/list/procgases = gases //this speeds things up because accessing datum vars is slow - var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases - if(fuel_store) //General volatile gas burn - var/burned_fuel = 0 + if(procgases["v_fuel"] && procgases["v_fuel"][MOLES]) //General volatile gas burn + var/burned_fuel - if(oxygen < fuel_store.moles) - burned_fuel = oxygen - fuel_store.moles -= burned_fuel - oxygen = 0 + if(!procgases["o2"]) + burned_fuel = 0 + else if(procgases["o2"][MOLES] < procgases["v_fuel"][MOLES]) + burned_fuel = procgases["o2"][MOLES] + procgases["v_fuel"][MOLES] -= burned_fuel + procgases["o2"][MOLES] = 0 else - burned_fuel = fuel_store.moles - oxygen -= fuel_store.moles - trace_gases -= fuel_store - fuel_store = null + burned_fuel = procgases["v_fuel"][MOLES] + procgases["o2"][MOLES] -= procgases["v_fuel"][MOLES] - energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel - carbon_dioxide += burned_fuel - fuel_burnt += burned_fuel + if(burned_fuel) + energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel + + assert_gas("co2") + procgases["co2"][MOLES] += burned_fuel + + fuel_burnt += burned_fuel //Handle plasma burning - if(toxins > MINIMUM_HEAT_CAPACITY) + if(procgases["plasma"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY) var/plasma_burn_rate = 0 var/oxygen_burn_rate = 0 //more plasma released at higher temperatures @@ -190,19 +220,22 @@ What are the archived variables for? else temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) if(temperature_scale > 0) + assert_gas("o2") + assert_gas("co2") oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale - if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN) - plasma_burn_rate = (toxins*temperature_scale)/PLASMA_BURN_RATE_DELTA + if(procgases["o2"][MOLES] > procgases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN) + plasma_burn_rate = (procgases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA else - plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA + plasma_burn_rate = (temperature_scale*(procgases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) - toxins -= plasma_burn_rate - oxygen -= plasma_burn_rate*oxygen_burn_rate - carbon_dioxide += plasma_burn_rate + procgases["plasma"][MOLES] -= plasma_burn_rate + procgases["o2"][MOLES] -= plasma_burn_rate*oxygen_burn_rate + procgases["co2"][MOLES] += plasma_burn_rate energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate) + garbage_collect() if(energy_released > 0) var/new_heat_capacity = heat_capacity() @@ -217,7 +250,7 @@ What are the archived variables for? /datum/gas_mixture/proc/merge(datum/gas_mixture/giver) //Merges all air from giver into self. Deletes giver. - //Returns: 1 on success (no failure cases yet) + //Returns: 1 in all cases /datum/gas_mixture/proc/remove(amount) //Proportionally removes amount of gas from the gas_mixture @@ -233,11 +266,11 @@ What are the archived variables for? /datum/gas_mixture/proc/share(datum/gas_mixture/sharer) //Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length //Return: amount of gas exchanged (+ if sharer received) -/datum/gas_mixture/proc/mimic(turf/model) //I want this proc to die a painful death +/datum/gas_mixture/proc/mimic(turf/model) //Similar to share(...), except the model is not modified //Return: amount of gas exchanged -/datum/gas_mixture/proc/check_turf(turf/model) //I want this proc to die a painful death +/datum/gas_mixture/proc/check_turf(turf/model) //Returns: 0 if self-check failed or 1 if check passes /datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) //I want this proc to die a painful death @@ -248,20 +281,17 @@ What are the archived variables for? /datum/gas_mixture/proc/compare(datum/gas_mixture/sample) //Compares sample to self to see if within acceptable ranges that group processing may be enabled + //returns: a string indicating what check failed, or "" if check passes + +/datum/gas_mixture/proc/copy_from_turf(turf/model) + //Copies all gas info from the turf into the gas list along with copying temperature, then archives /datum/gas_mixture/archive() - oxygen_archived = oxygen - carbon_dioxide_archived = carbon_dioxide - nitrogen_archived = nitrogen - toxins_archived = toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - trace_gas.moles_archived = trace_gas.moles - + var/list/cached_gases = gases + for(var/id in cached_gases) + cached_gases[id][ARCHIVE] = cached_gases[id][MOLES] temperature_archived = temperature - - return 1 + . = 1 /datum/gas_mixture/merge(datum/gas_mixture/giver) if(!giver) @@ -271,268 +301,145 @@ What are the archived variables for? var/self_heat_capacity = heat_capacity() var/giver_heat_capacity = giver.heat_capacity() var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity - if(combined_heat_capacity != 0) + if(combined_heat_capacity) temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity + var/list/cached_gases = gases //accessing datum vars is slower than proc vars + var/list/giver_gases = giver.gases + for(var/giver_id in giver_gases) + assert_gas(giver_id) + cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES] - oxygen += giver.oxygen - carbon_dioxide += giver.carbon_dioxide - nitrogen += giver.nitrogen - toxins += giver.toxins - - for(var/gas in giver.trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - trace_gases += corresponding - corresponding.moles += trace_gas.moles - - return 1 + . = 1 /datum/gas_mixture/remove(amount) var/sum = total_moles() amount = min(amount,sum) //Can not take more air than tile has! + if(amount <= 0) return null var/datum/gas_mixture/removed = new + var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases - - removed.oxygen = QUANTIZE((oxygen/sum)*amount) - removed.nitrogen = QUANTIZE((nitrogen/sum)*amount) - removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) - removed.toxins = QUANTIZE((toxins/sum)*amount) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = (trace_gas.moles/sum)*amount - trace_gas.moles -= corresponding.moles + for(var/id in cached_gases) + removed.assert_gas(id) + removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES]/sum)*amount) + cached_gases[id][MOLES] -= removed_gases[id][MOLES] removed.temperature = temperature - return removed + garbage_collect() + + . = removed /datum/gas_mixture/remove_ratio(ratio) - if(ratio <= 0) return null ratio = min(ratio, 1) var/datum/gas_mixture/removed = new + var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases - removed.oxygen = QUANTIZE(oxygen*ratio) - removed.nitrogen = QUANTIZE(nitrogen*ratio) - removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) - removed.toxins = QUANTIZE(toxins*ratio) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*ratio - trace_gas.moles -= corresponding.moles + for(var/id in cached_gases) + removed.assert_gas(id) + removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES]*ratio) + cached_gases[id][MOLES] -= removed_gases[id][MOLES] removed.temperature = temperature - return removed + garbage_collect() + + . = removed /datum/gas_mixture/copy_from(datum/gas_mixture/sample) - oxygen = sample.oxygen - carbon_dioxide = sample.carbon_dioxide - nitrogen = sample.nitrogen - toxins = sample.toxins + var/list/cached_gases = gases //accessing datum vars is slower than proc vars + var/list/sample_gases = sample.gases + var/list/copied_gases = list() + for(var/sample_id in sample_gases) + assert_gas(sample_id) + cached_gases[sample_id][MOLES] = sample_gases[sample_id][MOLES] + copied_gases += sample_id + for(var/id in cached_gases-copied_gases) + assert_gas(id) + cached_gases[id][MOLES] = 0 - trace_gases.len=null - for(var/gas in sample.trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - trace_gases += corresponding - - corresponding.moles = trace_gas.moles + garbage_collect() temperature = sample.temperature return 1 /datum/gas_mixture/check_turf(turf/model, atmos_adjacent_turfs = 4) - var/delta_oxygen = (oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) - var/delta_toxins = (toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) - - var/delta_temperature = (temperature_archived - model.temperature) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) - return 0 - - return 1 - -/datum/gas_mixture/proc/check_turf_total(turf/model) //I want this proc to die a painful death - var/delta_oxygen = (oxygen - model.oxygen) - var/delta_carbon_dioxide = (carbon_dioxide - model.carbon_dioxide) - var/delta_nitrogen = (nitrogen - model.nitrogen) - var/delta_toxins = (toxins - model.toxins) - - var/delta_temperature = (temperature - model.temperature) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND*4) - return 0 - - return 1 + var/datum/gas_mixture/copied = new + copied.copy_from_turf(model) + . = compare(copied, datatype = ARCHIVE, adjacents = atmos_adjacent_turfs) /datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) - if(!sharer) return 0 - var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1) + . = 0 + if(!sharer) + return + + var/moved_moles = 0 + var/abs_moved_moles = 0 + //make this local to the proc for sanic speed + var/list/sharercache = sharer.gases + var/list/selfcache = gases var/delta_temperature = (temperature_archived - sharer.temperature_archived) var/old_self_heat_capacity = 0 var/old_sharer_heat_capacity = 0 - var/heat_capacity_self_to_sharer = 0 - var/heat_capacity_sharer_to_self = 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - if(delta_air > 0) - heat_capacity_self_to_sharer += air_heat_capacity - else - heat_capacity_sharer_to_self -= air_heat_capacity - - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - if(delta_carbon_dioxide > 0) - heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity - else - heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity - - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - if(delta_toxins > 0) - heat_capacity_self_to_sharer += toxins_heat_capacity - else - heat_capacity_sharer_to_self -= toxins_heat_capacity - old_self_heat_capacity = heat_capacity() old_sharer_heat_capacity = sharer.heat_capacity() - oxygen -= delta_oxygen - sharer.oxygen += delta_oxygen + var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer + var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us - carbon_dioxide -= delta_carbon_dioxide - sharer.carbon_dioxide += delta_carbon_dioxide + for(var/sharer_id in sharercache-selfcache) + add_gas(sharer_id) //we can use add_gas() because we're looping only through the IDs not in our cache - nitrogen -= delta_nitrogen - sharer.nitrogen += delta_nitrogen + //GAS TRANSFER + for(var/id in selfcache) + if(!sharercache[id]) //checking here prevents an uneeded proc call if the check fails. + sharer.add_gas(id) - toxins -= delta_toxins - sharer.toxins += delta_toxins + var/gas = selfcache[id] + var/sharergas = sharercache[id] - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) + var/delta = QUANTIZE(gas[ARCHIVE] - sharergas[ARCHIVE])/(atmos_adjacent_turfs+1) //the amount of gas that gets moved between the mixtures - var/list/trace_types_considered = list() - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases - var/delta = 0 - - if(corresponding) - delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1) - else - corresponding = new trace_gas.type() - sharer.trace_gases += corresponding - - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - - trace_gas.moles -= delta - corresponding.moles += delta - - if(delta) - var/individual_heat_capacity = trace_gas.specific_heat*delta + if(delta && abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/gas_heat_capacity = delta * gas[SPECIFIC_HEAT] if(delta > 0) - heat_capacity_self_to_sharer += individual_heat_capacity + heat_capacity_self_to_sharer += gas_heat_capacity else - heat_capacity_sharer_to_self -= individual_heat_capacity + heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call. - moved_moles += delta - last_share += abs(delta) + gas[MOLES] -= delta + sharergas[MOLES] += delta + moved_moles += delta + abs_moved_moles += abs(delta) - trace_types_considered += trace_gas.type - - for(var/gas in sharer.trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.type in trace_types_considered) - continue - var/datum/gas/corresponding - var/delta = 0 - corresponding = new trace_gas.type() - trace_gases += corresponding - - delta = trace_gas.moles_archived/5 - - trace_gas.moles -= delta - corresponding.moles += delta - - //Guaranteed transfer from sharer to self - var/individual_heat_capacity = trace_gas.specific_heat*delta - heat_capacity_sharer_to_self += individual_heat_capacity - - moved_moles += -delta - last_share += abs(delta) + last_share = abs_moved_moles + //THERMAL ENERGY TRANSFER if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self + //transfer of thermal energy (via changed heat capacity) between self and sharer if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity + //thermal energy of the system (self and sharer) is unchanged if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY) if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity @@ -540,78 +447,18 @@ What are the archived variables for? if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume + . = delta_pressure*R_IDEAL_GAS_EQUATION/volume + + garbage_collect() + sharer.garbage_collect() /datum/gas_mixture/mimic(turf/model, atmos_adjacent_turfs = 4) - var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) - - var/delta_temperature = (temperature_archived - model.temperature) - - var/heat_transferred = 0 - var/old_self_heat_capacity = 0 - var/heat_capacity_transferred = 0 - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - heat_transferred -= air_heat_capacity*model.temperature - heat_capacity_transferred -= air_heat_capacity - - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - heat_transferred -= carbon_dioxide_heat_capacity*model.temperature - heat_capacity_transferred -= carbon_dioxide_heat_capacity - - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - heat_transferred -= toxins_heat_capacity*model.temperature - heat_capacity_transferred -= toxins_heat_capacity - - old_self_heat_capacity = heat_capacity() - - oxygen -= delta_oxygen - carbon_dioxide -= delta_carbon_dioxide - nitrogen -= delta_nitrogen - toxins -= delta_toxins - - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) - - if(trace_gases.len) - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/delta = 0 - - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - - trace_gas.moles -= delta - - var/heat_cap_transferred = delta*trace_gas.specific_heat - heat_transferred += heat_cap_transferred*temperature_archived - heat_capacity_transferred += heat_cap_transferred - moved_moles += delta - moved_moles += abs(delta) - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred - if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) - temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*temperature_archived)/new_self_heat_capacity - - temperature_mimic(model, model.thermal_conductivity) - - if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) - var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume - else - return 0 + var/datum/gas_mixture/copied = new + copied.copy_from_turf(model) + . = share(copied, atmos_adjacent_turfs) /datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - + //transfer of thermal energy (via conduction) between self and sharer var/delta_temperature = (temperature_archived - sharer.temperature_archived) if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) var/self_heat_capacity = heat_capacity_archived() @@ -621,8 +468,9 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer_heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) + sharer.temperature = max(sharer.temperature + heat/sharer_heat_capacity, TCMB) + //thermal energy of the system (self and sharer) is unchanged /datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient) var/delta_temperature = (temperature - model.temperature) @@ -633,7 +481,7 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) - temperature -= heat/self_heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) /datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) var/delta_temperature = (temperature_archived - sharer.temperature) @@ -644,53 +492,54 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer.heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) + sharer.temperature = max(sharer.temperature + heat/sharer.heat_capacity, TCMB) -/datum/gas_mixture/compare(datum/gas_mixture/sample) - if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen))) - return 0 - if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) - return 0 - if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ - ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) - return 0 - if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ - ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) - return 0 +/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0) + . = "" + var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases + + for(var/id in cached_gases|sample_gases) + var/gas_moles = cached_gases[id] ? cached_gases[id][datatype] : 0 + var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0 + var/delta = abs(gas_moles - sample_moles)/(adjacents+1) + if(delta > MINIMUM_AIR_TO_SUSPEND && \ + delta > gas_moles*MINIMUM_AIR_RATIO_TO_SUSPEND) + return id if(total_moles() > MINIMUM_AIR_TO_SUSPEND) - if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ - ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) - return 0 + var/temp + var/sample_temp - for(var/gas in sample.trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles))) - return 0 - else - return 0 + switch(datatype) + if(MOLES) + temp = temperature + sample_temp = sample.temperature + if(ARCHIVE) + temp = temperature_archived + sample_temp = sample.temperature_archived - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles))) - return 0 - else - return 0 - return 1 + var/delta_temperature = abs(temp-sample_temp) + if((delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ + delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND*temp) + return "temp" +/datum/gas_mixture/copy_from_turf(turf/model) + assert_gases(arglist(hardcoded_gases)) + var/list/cached_gases = gases + cached_gases["o2"][MOLES] = model.oxygen + cached_gases["n2"][MOLES] = model.nitrogen + cached_gases["plasma"][MOLES] = model.toxins + cached_gases["co2"][MOLES] = model.carbon_dioxide + for(var/id in cached_gases-hardcoded_gases) + cached_gases[id][MOLES] = 0 //turfs don't account for anything other than the four old hardcoded gases + + temperature = model.temperature + + garbage_collect() //Takes the amount of the gas you want to PP as an argument //So I don't have to do some hacky switches/defines/magic strings diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm index f5e60ee7b0c..fa0dccd2a15 100644 --- a/code/datums/helper_datums/events.dm +++ b/code/datums/helper_datums/events.dm @@ -34,7 +34,7 @@ //world << "Events in [args[1]] called" var/list/event = listgetindex(events,args[1]) if(istype(event)) - spawn(-1) + spawn(0) for(var/datum/event/E in event) if(!E.Fire(arglist(args.Copy(2)))) clearEvent(args[1],E) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 6c22a9c08db..ef73781c1e6 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -82,12 +82,12 @@ /datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound) if(location) if(effect) - spawn(-1) + spawn(0) src = null effect.attach(location) effect.start() if(sound) - spawn(-1) + spawn(0) src = null playsound(location,sound,60,1) return diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1ee1a3d01ea..22b7df55380 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1,1579 +1,1687 @@ -/* Note from Carnie: - The way datum/mind stuff works has been changed a lot. - Minds now represent IC characters rather than following a client around constantly. - - Guidelines for using minds properly: - - - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! - ghost.mind is however used as a reference to the ghost's corpse - - - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human) - the existing mind of the old mob should be transfered to the new mob like so: - - mind.transfer_to(new_mob) - - - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you. - By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing - the player. - - - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you. - - - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting - a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done. - - new_mob.key = key - - The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! - However if you want that mind to have any special properties like being a traitor etc you will have to do that - yourself. - -*/ - -/datum/mind - var/key - var/name //replaces mob/var/original_name - var/mob/living/current - var/active = 0 - - var/memory - - var/assigned_role - var/special_role - var/list/restricted_roles = list() - - var/datum/job/assigned_job - - var/list/datum/objective/objectives = list() - var/list/datum/objective/special_verbs = list() - - var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. - - var/datum/faction/faction //associated faction - var/datum/changeling/changeling //changeling holder - - var/miming = 0 // Mime's vow of silence - var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state - var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD - var/datum/gang/gang_datum //Which gang this mind belongs to, if any - -/datum/mind/New(var/key) - src.key = key - - -/datum/mind/proc/transfer_to(mob/new_character) - if(current) // remove ourself from our old body's mind variable - current.mind = null - SStgui.on_transfer(current, new_character) - - if(key) - if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours - new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. - else - key = new_character.key - - if(new_character.mind) //disassociate any mind currently in our new body's mind variable - new_character.mind.current = null - - var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list - leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it - current = new_character //associate ourself with our new body - new_character.mind = src //and associate our new body with ourself - transfer_antag_huds(hud_to_transfer) //inherit the antag HUD - transfer_actions(new_character) - - if(active) - new_character.key = key //now transfer the key to link the client to our new body - -/datum/mind/proc/store_memory(new_text) - memory += "[new_text]
" - -/datum/mind/proc/wipe_memory() - memory = null - - -/* - Removes antag type's references from a mind. - objectives, uplinks, powers etc are all handled. -*/ - -/datum/mind/proc/remove_objectives() - if(objectives.len) - for(var/datum/objective/O in objectives) - objectives -= O - qdel(O) - -/datum/mind/proc/remove_changeling() - if(src in ticker.mode.changelings) - ticker.mode.changelings -= src - current.remove_changeling_powers() - if(changeling) - qdel(changeling) - changeling = null - special_role = null - remove_antag_equip() - -/datum/mind/proc/remove_traitor() - if(src in ticker.mode.traitors) - ticker.mode.traitors -= src - if(isAI(current)) - var/mob/living/silicon/ai/A = current - A.set_zeroth_law("") - A.show_laws() - A.verbs -= /mob/living/silicon/ai/proc/choose_modules - A.malf_picker.remove_verbs(A) - qdel(A.malf_picker) - special_role = null - remove_antag_equip() - -/datum/mind/proc/remove_nukeop() - if(src in ticker.mode.syndicates) - ticker.mode.syndicates -= src - ticker.mode.update_synd_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - -/datum/mind/proc/remove_wizard() - if(src in ticker.mode.wizards) - ticker.mode.wizards -= src - current.spellremove(current) - special_role = null - remove_antag_equip() - -/datum/mind/proc/remove_cultist() - if(src in ticker.mode.cult) - ticker.mode.cult -= src - ticker.mode.update_cult_icons_removed(src) - special_role = null - -/datum/mind/proc/remove_rev() - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - - -/datum/mind/proc/remove_gang() - ticker.mode.remove_gangster(src,0,1,1) - remove_objectives() - -/datum/mind/proc/remove_hog_follower_prophet() - ticker.mode.red_deity_followers -= src - ticker.mode.red_deity_prophets -= src - ticker.mode.blue_deity_prophets -= src - ticker.mode.blue_deity_followers -= src - ticker.mode.update_hog_icons_removed(src, "red") - ticker.mode.update_hog_icons_removed(src, "blue") - - - -/datum/mind/proc/remove_antag_equip() - var/list/Mob_Contents = current.get_contents() - for(var/obj/item/I in Mob_Contents) - if(istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/P = I - P.lock_code = "" - - else if(istype(I, /obj/item/device/radio)) - var/obj/item/device/radio/R = I - R.traitor_frequency = 0 - -/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. - remove_changeling() - remove_traitor() - remove_nukeop() - remove_wizard() - remove_cultist() - remove_rev() - remove_gang() - -/datum/mind/proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
" - output += memory - - if(objectives.len) - output += "Objectives:" - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - output += "
Objective #[obj_count++]: [objective.explanation_text]" - - if(window) recipient << browse(output,"window=memory") - else recipient << "[output]" - -/datum/mind/proc/edit_memory() - if(!ticker || !ticker.mode) - alert("Not before round-start!", "Alert") - return - - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" - out += "Assigned role: [assigned_role]. Edit
" - out += "Faction and special role: [special_role]
" - - var/list/sections = list( - "revolution", - "gang", - "cult", - "wizard", - "changeling", - "nuclear", - "traitor", // "traitorchan", - "monkey", - ) - var/text = "" - - if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey)) - /** REVOLUTION ***/ - text = "revolution" - if (ticker.mode.config_tag=="revolution") - text = uppertext(text) - text = "[text]: " - if (assigned_role in command_positions) - text += "HEAD|loyal|employee|headrev|rev" - else if (src in ticker.mode.head_revolutionaries) - text += "head|loyal|employee|HEADREV|rev" - text += "
Flash: give" - - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (flash) - if(!flash.crit_fail) - text += "|take." - else - text += "|take|repair." - else - text += "." - - text += " Reequip (gives traitor uplink)." - if (objectives.len==0) - text += "
Objectives are empty! Set to kill all heads." - else if(isloyal(current)) - text += "head|LOYAL|employee|headrev|rev" - else if (src in ticker.mode.revolutionaries) - text += "head|loyal|employee|headrev|REV" - else - text += "head|loyal|EMPLOYEE|headrev|rev" - - if(current && current.client && (ROLE_REV in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["revolution"] = text - - /** GANG ***/ - text = "gang" - if (ticker.mode.config_tag=="gang") - text = uppertext(text) - text = "[text]: " - text += "[isloyal(current) ? "LOYAL" : "loyal"]|" - if(src in ticker.mode.get_all_gangsters()) - text += "none" - else - text += "NONE" - - if(current && current.client && (ROLE_GANG in current.client.prefs.be_special)) - text += "|Enabled in Prefs
" - else - text += "|Disabled in Prefs
" - - for(var/datum/gang/G in ticker.mode.gangs) - text += "[G.name]: " - if(src in (G.gangsters)) - text += "GANGSTER" - else - text += "gangster" - text += "|" - if(src in (G.bosses)) - text += "GANG LEADER" - text += "|Equipment: give" - var/list/L = current.get_contents() - var/obj/item/device/gangtool/gangtool = locate() in L - if (gangtool) - text += "|take" - - else - text += "gang leader" - text += "
" - - if(gang_colors_pool.len) - text += "Create New Gang" - - sections["gang"] = text - - - /** CULT ***/ - text = "cult" - if (ticker.mode.config_tag=="cult") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.cult) - text += "loyal|employee|CULTIST" - text += "
Equip" - - else if(isloyal(current)) - text += "LOYAL|employee|cultist" - else - text += "loyal|EMPLOYEE|cultist" - - if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["cult"] = text - - /** WIZARD ***/ - text = "wizard" - if (ticker.mode.config_tag=="wizard") - text = uppertext(text) - text = "[text]: " - if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices)) - text += "YES|no" - text += "
To lair, undress, dress up, let choose name." - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - else - text += "yes|NO" - - if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["wizard"] = text - - /** CHANGELING ***/ - text = "changeling" - if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if ((src in ticker.mode.changelings) && special_role) - text += "YES|no" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
Transform to initial appearance." - else if(src in ticker.mode.changelings) //Station Aligned Changeling - text += "YES (but not an antag)|no" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
Transform to initial appearance." - else - text += "yes|NO" -// var/datum/game_mode/changeling/changeling = ticker.mode -// if (istype(changeling) && changeling.changelingdeath) -// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds." - - if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["changeling"] = text - - /** NUCLEAR ***/ - text = "nuclear" - if (ticker.mode.config_tag=="nuclear") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.syndicates) - text += "OPERATIVE|nanotrasen" - text += "
To shuttle, undress, dress up." - var/code - for (var/obj/machinery/nuclearbomb/bombue in machines) - if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") - code = bombue.r_code - break - if (code) - text += " Code is [code]. tell the code." - else - text += "operative|NANOTRASEN" - - if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["nuclear"] = text - - /** TRAITOR ***/ - text = "traitor" - if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in ticker.mode.traitors) - text += "TRAITOR|loyal" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - else - text += "traitor|LOYAL" - - if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["traitor"] = text - - /** SHADOWLING **/ - text = "shadowling" - if(ticker.mode.config_tag == "shadowling") - text = uppertext(text) - text = "[text]: " - if(src in ticker.mode.shadows) - text += "SHADOWLING|thrall|human" - else if(src in ticker.mode.thralls) - text += "shadowling|THRALL|human" - else - text += "shadowling|thrall|HUMAN" - - if(current && current.client && (ROLE_SHADOWLING in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["shadowling"] = text - - /** Abductors **/ - - text = "Abductor" - if(ticker.mode.config_tag == "abductor") - text = uppertext(text) - text = "[text]: " - if(src in ticker.mode.abductors) - text += "Abductor|human" - text += "|undress|equip" - else - text += "Abductor|human" - - if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["abductor"] = text - - /** HAND OF GOD **/ - text = "hand of god" - if(ticker.mode.config_tag == "handofgod") - text = uppertext(text) - text = "[text]: " - if(src in ticker.mode.red_deity_prophets) - text += "RED PROPHET|red follower|employee|blue follower|blue prophet|red god|blue god" - else if (src in ticker.mode.red_deity_followers) - text += "red prophet|RED FOLLOWER|employee|blue follower|blue prophet|red god|blue god" - else if (src in ticker.mode.blue_deity_followers) - text += "red prophet|red follower|employee|BLUE FOLLOWER|blue prophet|red god|blue god" - else if (src in ticker.mode.blue_deity_prophets) - text += "red prophet|red follower|employee|blue follower|BLUE PROPHET|red god|blue god" - else if (src in ticker.mode.red_deities) - text += "red prophet|red follower|employee|blue follower|blue prophet|RED GOD|blue god" - else if (src in ticker.mode.blue_deities) - text += "red prophet|red follower|employee|blue follower|blue prophet|red god|BLUE GOD" - else - text += "red prophet|red follower|EMPLOYEE|blue follower|blue prophet|red god|blue god" - - if(current && current.client && (ROLE_HOG_GOD in current.client.prefs.be_special)) - text += "|HOG God Enabled in Prefs" - else - text += "|HOG God Disabled in Prefs" - - if(current && current.client && (ROLE_HOG_CULTIST in current.client.prefs.be_special)) - text += "|HOG Cultist Enabled in Prefs" - else - text += "|HOG Disabled in Prefs" - - sections["follower"] = text - - /** MONKEY ***/ - if (istype(current, /mob/living/carbon)) - text = "monkey" - if (ticker.mode.config_tag=="monkey") - text = uppertext(text) - text = "[text]: " - if (istype(current, /mob/living/carbon/human)) - text += "healthy|infected|HUMAN|other" - else if (istype(current, /mob/living/carbon/monkey)) - var/found = 0 - for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 - - if(found) - text += "healthy|INFECTED|human|other" - else - text += "HEALTHY|infected|human|other" - - else - text += "healthy|infected|human|OTHER" - - if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["monkey"] = text - - - /** SILICON ***/ - - if (istype(current, /mob/living/silicon)) - text = "silicon" - var/mob/living/silicon/robot/robot = current - if (istype(robot) && robot.emagged) - text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]" - var/mob/living/silicon/ai/ai = current - if (istype(ai) && ai.connected_robots.len) - var/n_e_robots = 0 - for (var/mob/living/silicon/robot/R in ai.connected_robots) - if (R.emagged) - n_e_robots++ - text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" - if (ticker.mode.config_tag == "traitorchan") - if (sections["traitor"]) - out += sections["traitor"]+"
" - if (sections["changeling"]) - out += sections["changeling"]+"

" - sections -= "traitor" - sections -= "changeling" - else - if (sections[ticker.mode.config_tag]) - out += sections[ticker.mode.config_tag]+"

" - sections -= ticker.mode.config_tag - for (var/i in sections) - if (sections[i]) - out += sections[i]+"
" - - - if (((src in ticker.mode.head_revolutionaries) || \ - (src in ticker.mode.traitors) || \ - (src in ticker.mode.syndicates)) && \ - istype(current,/mob/living/carbon/human) ) - - text = "Uplink: give" - var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() - var/crystals - if (suplink) - crystals = suplink.uses - if (suplink) - text += "|take" - if (check_rights(R_FUN, 0)) - text += ", [crystals] crystals" - else - text += ", [crystals] crystals" - text += "." //hiel grammar - out += text - - out += "

" - - out += "Memory:
" - out += memory - out += "
Edit memory
" - out += "Objectives:
" - if (objectives.len == 0) - out += "EMPTY
" - else - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
" - obj_count++ - out += "Add objective

" - - out += "Announce objectives

" - - usr << browse(out, "window=edit_memory[src];size=500x600") - - - -/datum/mind/Topic(href, href_list) - if(!check_rights(R_ADMIN)) - return - - if (href_list["role_edit"]) - var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() - if (!new_role) - return - assigned_role = new_role - - else if (href_list["memory_edit"]) - var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) - if (isnull(new_memo)) - return - memory = new_memo - - else if (href_list["obj_edit"] || href_list["obj_add"]) - var/datum/objective/objective - var/objective_pos - var/def_value - - if (href_list["obj_edit"]) - objective = locate(href_list["obj_edit"]) - if (!objective) - return //sanity - def_value = objective.type - - var/datum/objective/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in (typesof(/datum/objective) - list(/datum/objective, /datum/objective/default, /datum/objective/escape_obj, /datum/objective/changeling_team_objective)) //keep out the abstract ones - if (!new_obj_type) - return - if (initial(new_obj_type.required_role) != special_role && initial(new_obj_type.required_role) != null) - if(alert("The objective requires a special_role that this mind does not have. The player may not be able to complete the objective. Are you sure you want to continue?","uh oh" ,"Yes", "No") == "No") - return - - var/datum/objective/new_objective = add_objective(src, new_obj_type) - - if (istype(new_objective, /datum/objective/custom)) //it's lame I know but this type is snowflaky by its very nature - var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") - if (!expl) - expl = "Free objective" - new_objective.explanation_text = expl - - if (!new_objective) - usr << initial(new_obj_type.error_text) - return - - if (objective) - objectives -= objective - objectives.Insert(objective_pos, new_objective) - message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") - log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") - else - message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") - log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") - - else if (href_list["obj_delete"]) - var/datum/objective/objective = locate(href_list["obj_delete"]) - if(!istype(objective)) - return - objectives -= objective - message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") - log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") - - else if(href_list["obj_completed"]) - var/datum/objective/objective = locate(href_list["obj_completed"]) - if(!istype(objective)) - return - objective.completed = !objective.completed - log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") - else if (href_list["handofgod"]) - switch(href_list["handofgod"]) - if("clear") //wipe handofgod status - if((src in ticker.mode.red_deity_followers) || (src in ticker.mode.blue_deity_followers) || (src in ticker.mode.red_deity_prophets) || (src in ticker.mode.blue_deity_prophets)) - remove_hog_follower_prophet() - current << "You have been brainwashed... again! Your faith is no more!" - message_admins("[key_name_admin(usr)] has de-hand of god'ed [current].") - log_admin("[key_name(usr)] has de-hand of god'ed [current].") - - if("red follower") - make_Handofgod_follower("red") - message_admins("[key_name_admin(usr)] has red follower'ed [current].") - log_admin("[key_name(usr)] has red follower'ed [current].") - - if("red prophet") - make_Handofgod_prophet("red") - message_admins("[key_name_admin(usr)] has red prophet'ed [current].") - log_admin("[key_name(usr)] has red prophet'ed [current].") - - if("blue follower") - make_Handofgod_follower("blue") - message_admins("[key_name_admin(usr)] has blue follower'ed [current].") - log_admin("[key_name(usr)] has blue follower'ed [current].") - - if("blue prophet") - make_Handofgod_prophet("blue") - message_admins("[key_name_admin(usr)] has blue prophet'ed [current].") - log_admin("[key_name(usr)] has blue prophet'ed [current].") - - if("red god") - make_Handofgod_god("red") - message_admins("[key_name_admin(usr)] has red god'ed [current].") - log_admin("[key_name(usr)] has red god'ed [current].") - - if("blue god") - make_Handofgod_god("blue") - message_admins("[key_name_admin(usr)] has blue god'ed [current].") - log_admin("[key_name(usr)] has blue god'ed [current].") - - else if (href_list["revolution"]) - switch(href_list["revolution"]) - if("clear") - remove_rev() - current << "You have been brainwashed! You are no longer a revolutionary!" - message_admins("[key_name_admin(usr)] has de-rev'ed [current].") - log_admin("[key_name(usr)] has de-rev'ed [current].") - if("rev") - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - current << "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" - else if(!(src in ticker.mode.revolutionaries)) - current << " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" - else - return - ticker.mode.revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Revolutionary" - message_admins("[key_name_admin(usr)] has rev'ed [current].") - log_admin("[key_name(usr)] has rev'ed [current].") - - if("headrev") - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) - current << "You have proved your devotion to revoltion! Yea are a head revolutionary now!" - else if(!(src in ticker.mode.head_revolutionaries)) - current << "You are a member of the revolutionaries' leadership now!" - else - return - if (ticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." - objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" - message_admins("[key_name_admin(usr)] has head-rev'ed [current].") - log_admin("[key_name(usr)] has head-rev'ed [current].") - - if("autoobjectives") - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) - usr << "The objectives for revolution have been generated and shown to [key]" - - if("flash") - if (!ticker.mode.equip_revolutionary(current)) - usr << "Spawning flash failed!" - - if("takeflash") - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (!flash) - usr << "Deleting flash failed!" - qdel(flash) - - if("repairflash") - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (!flash) - usr << "Repairing flash failed!" - else - flash.crit_fail = 0 - flash.update_icon() - - - -//////////////////// GANG MODE - - else if (href_list["gang"]) - switch(href_list["gang"]) - if("clear") - remove_gang() - message_admins("[key_name_admin(usr)] has de-gang'ed [current].") - log_admin("[key_name(usr)] has de-gang'ed [current].") - - if("equip") - switch(ticker.mode.equip_gang(current,gang_datum)) - if(1) - usr << "Unable to equip territory spraycan!" - if(2) - usr << "Unable to equip recruitment pen and spraycan!" - if(3) - usr << "Unable to equip gangtool, pen, and spraycan!" - - if("takeequip") - var/list/L = current.get_contents() - for(var/obj/item/weapon/pen/gang/pen in L) - qdel(pen) - for(var/obj/item/device/gangtool/gangtool in L) - qdel(gangtool) - for(var/obj/item/toy/crayon/spraycan/gang/SC in L) - qdel(SC) - - if("new") - if(gang_colors_pool.len) - var/list/names = list("Random") + gang_name_pool - var/gangname = input("Pick a gang name.","Select Name") as null|anything in names - if(gangname && gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time - if(!(gangname in gang_name_pool)) - gangname = null - var/datum/gang/newgang = new(null,gangname) - ticker.mode.gangs += newgang - message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.") - log_admin("[key_name(usr)] has created the [newgang.name] Gang.") - - else if (href_list["gangboss"]) - var/datum/gang/G = locate(href_list["gangboss"]) in ticker.mode.gangs - if(!G || (src in G.bosses)) - return - ticker.mode.remove_gangster(src,0,2,1) - G.bosses += src - gang_datum = G - special_role = "[G.name] Gang Boss" - G.add_gang_hud(src) - current << "You are a [G.name] Gang Boss!" - message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.") - log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.") - ticker.mode.forge_gang_objectives(src) - ticker.mode.greet_gang(src,0) - - else if (href_list["gangster"]) - var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs - if(!G || (src in G.gangsters)) - return - ticker.mode.remove_gangster(src,0,2,1) - ticker.mode.add_gangster(src,G,0) - message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).") - log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).") - -///////////////////////////////// - - - - else if (href_list["cult"]) - switch(href_list["cult"]) - if("clear") - remove_cultist() - current << "You have been brainwashed! You are no longer a cultist!" - message_admins("[key_name_admin(usr)] has de-cult'ed [current].") - log_admin("[key_name(usr)] has de-cult'ed [current].") - if("cultist") - if(!(src in ticker.mode.cult)) - ticker.mode.add_cultist(src) - message_admins("[key_name_admin(usr)] has cult'ed [current].") - log_admin("[key_name(usr)] has cult'ed [current].") - - if("equip") - if (!ticker.mode.equip_cultist(current)) - usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete." - - else if (href_list["wizard"]) - switch(href_list["wizard"]) - if("clear") - remove_wizard() - current << "You have been brainwashed! You are no longer a wizard!" - log_admin("[key_name(usr)] has de-wizard'ed [current].") - if("wizard") - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src - special_role = "Wizard" - //ticker.mode.learn_basic_spells(current) - current << "You are the Space Wizard!" - message_admins("[key_name_admin(usr)] has wizard'ed [current].") - log_admin("[key_name(usr)] has wizard'ed [current].") - if("lair") - current.loc = pick(wizardstart) - if("dressup") - ticker.mode.equip_wizard(current) - if("name") - ticker.mode.name_wizard(current) - if("autoobjectives") - ticker.mode.forge_wizard_objectives(src) - usr << "The objectives for wizard [key] have been generated. You can edit them and anounce manually." - - else if (href_list["changeling"]) - switch(href_list["changeling"]) - if("clear") - remove_changeling() - current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" - message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") - log_admin("[key_name(usr)] has de-changeling'ed [current].") - if("changeling") - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - current << "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!" - message_admins("[key_name_admin(usr)] has changeling'ed [current].") - log_admin("[key_name(usr)] has changeling'ed [current].") - if("autoobjectives") - ticker.mode.forge_changeling_objectives(src) - usr << "The objectives for changeling [key] have been generated. You can edit them and anounce manually." - - if("initialdna") - if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon)) - usr << "Resetting DNA failed!" - else - var/mob/living/carbon/C = current - changeling.first_prof.dna.transfer_identity(C, transfer_SE=1) - C.real_name = changeling.first_prof.name - C.updateappearance(mutcolor_update=1) - C.domutcheck() - - else if (href_list["nuclear"]) - switch(href_list["nuclear"]) - if("clear") - remove_nukeop() - current << "You have been brainwashed! You are no longer a syndicate operative!" - message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") - log_admin("[key_name(usr)] has de-nuke op'ed [current].") - if("nuclear") - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - if (ticker.mode.syndicates.len==1) - ticker.mode.prepare_syndicate_leader(src) - else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" - special_role = "Syndicate" - assigned_role = "Syndicate" - current << "You are a [syndicate_name()] agent!" - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) - message_admins("[key_name_admin(usr)] has nuke op'ed [current].") - log_admin("[key_name(usr)] has nuke op'ed [current].") - if("lair") - current.loc = get_turf(locate("landmark*Syndicate-Spawn")) - if("dressup") - var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - if (!ticker.mode.equip_syndicate(current)) - usr << "Equipping a syndicate failed!" - if("tellcode") - var/code - for (var/obj/machinery/nuclearbomb/bombue in machines) - if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") - code = bombue.r_code - break - if (code) - store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) - current << "The nuclear authorization code is: [code]" - else - usr << "No valid nuke found!" - - else if (href_list["traitor"]) - switch(href_list["traitor"]) - if("clear") - remove_traitor() - current << "You have been brainwashed! You are no longer a traitor!" - message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") - log_admin("[key_name(usr)] has de-traitor'ed [current].") - - if("traitor") - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src - special_role = "traitor" - current << "You are a traitor!" - message_admins("[key_name_admin(usr)] has traitor'ed [current].") - log_admin("[key_name(usr)] has traitor'ed [current].") - if(isAI(current)) - var/mob/living/silicon/ai/A = current - ticker.mode.add_law_zero(A) - A.show_laws() - - if("autoobjectives") - ticker.mode.forge_traitor_objectives(src) - usr << "The objectives for traitor [key] have been generated. You can edit them and anounce manually." - - else if(href_list["shadowling"]) - switch(href_list["shadowling"]) - if("clear") - ticker.mode.update_shadow_icons_removed(src) - if(src in ticker.mode.shadows) - ticker.mode.shadows -= src - special_role = null - current << "Your powers have been quenched! You are no longer a shadowling!" - remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hatch) - remove_spell(/obj/effect/proc_holder/spell/self/shadowling_ascend) - remove_spell(/obj/effect/proc_holder/spell/targeted/enthrall) - remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hivemind) - message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].") - log_admin("[key_name(usr)] has de-shadowling'ed [current].") - else if(src in ticker.mode.thralls) - ticker.mode.remove_thrall(src,0) - message_admins("[key_name_admin(usr)] has de-thrall'ed [current].") - log_admin("[key_name(usr)] has de-thrall'ed [current].") - if("shadowling") - if(!ishuman(current)) - usr << "This only works on humans!" - return - ticker.mode.shadows += src - special_role = "shadowling" - current << "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \ - time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\ - " - ticker.mode.finalize_shadowling(src) - ticker.mode.update_shadow_icons_added(src) - if("thrall") - if(!ishuman(current)) - usr << "This only works on humans!" - return - ticker.mode.add_thrall(src) - message_admins("[key_name_admin(usr)] has thrall'ed [current].") - log_admin("[key_name(usr)] has thrall'ed [current].") - - else if(href_list["abductor"]) - switch(href_list["abductor"]) - if("clear") - usr << "Not implemented yet. Sorry!" - if("abductor") - if(!ishuman(current)) - usr << "This only works on humans!" - return - make_Abductor() - log_admin("[key_name(usr)] turned [current] into abductor.") - if("equip") - var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") - if(gear) - var/datum/game_mode/abduction/temp = new - temp.equip_common(current) - if(gear=="Agent") - temp.equip_agent(current) - else - temp.equip_scientist(current) - - else if (href_list["monkey"]) - var/mob/living/L = current - if (L.notransform) - return - switch(href_list["monkey"]) - if("healthy") - if (check_rights(R_ADMIN)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" - else if (istype(M) && length(M.viruses)) - for(var/datum/disease/D in M.viruses) - D.cure(0) - sleep(0) //because deleting of virus is done through spawn(0) - if("infected") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) - else if (istype(M)) - current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) - if("human") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(M)) - for(var/datum/disease/D in M.viruses) - if (istype(D,/datum/disease/transformation/jungle_fever)) - D.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) - log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") - H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) - if(H) - src = H.mind - - else if (href_list["silicon"]) - switch(href_list["silicon"]) - - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [R].") - log_admin("[key_name(usr)] has unemag'ed [R].") - - if("unemagcyborgs") - if (istype(current, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") - - else if (href_list["common"]) - switch(href_list["common"]) - if("undress") - for(var/obj/item/W in current) - current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress. - if("takeuplink") - take_uplink() - memory = null//Remove any memory they may have had. - log_admin("[key_name(usr)] removed [current]'s uplink.") - if("crystals") - if (check_rights(R_FUN, 0)) - var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() - var/crystals - if (suplink) - crystals = suplink.uses - crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num - if (!isnull(crystals)) - if (suplink) - suplink.uses = crystals - message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") - log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") - if("uplink") - if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) - usr << "Equipping a syndicate failed!" - log_admin("[key_name(usr)] attempted to give [current] an uplink.") - - else if (href_list["obj_announce"]) - var/obj_count = 1 - current << "Your current objectives:" - for(var/datum/objective/objective in objectives) - current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - - edit_memory() - -/datum/mind/proc/find_syndicate_uplink() - var/list/L = current.get_contents() - for (var/obj/item/I in L) - if (I.hidden_uplink) - return I.hidden_uplink - return null - -/datum/mind/proc/take_uplink() - var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() - if(H) - qdel(H) - -/datum/mind/proc/make_Traitor() - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src - special_role = "traitor" - ticker.mode.forge_traitor_objectives(src) - ticker.mode.finalize_traitor(src) - ticker.mode.greet_traitor(src) - -/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0, telecrystals = TRUE) - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - special_role = "Syndicate" - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) - - current.loc = spawnloc - - var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - ticker.mode.equip_syndicate(current, telecrystals) - - if (nuke_code) - store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) - current << "The nuclear authorization code is: [nuke_code]" - - if (leader) - ticker.mode.prepare_syndicate_leader(src,nuke_code) - else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" - -/datum/mind/proc/make_Changling() - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - ticker.mode.forge_changeling_objectives(src) - ticker.mode.greet_changeling(src) - -/datum/mind/proc/make_Wizard() - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src - special_role = "Wizard" - assigned_role = "Wizard" - //ticker.mode.learn_basic_spells(current) - if(!wizardstart.len) - current.loc = pick(latejoin) - current << "HOT INSERTION, GO GO GO" - else - current.loc = pick(wizardstart) - - ticker.mode.equip_wizard(current) - for(var/obj/item/weapon/spellbook/S in current.contents) - S.op = 0 - ticker.mode.name_wizard(current) - ticker.mode.forge_wizard_objectives(src) - ticker.mode.greet_wizard(src) - - -/datum/mind/proc/make_Cultist() - if(!(src in ticker.mode.cult)) - ticker.mode.cult += src - ticker.mode.update_cult_icons_added(src) - special_role = "Cultist" - current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." - current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - current << "Your objective is to summon Nar-Sie by building and defending a suitable shell for the Geometer. Adequate supplies can be procured through human sacrifices." - ticker.mode.equip_cultist(current) - -/datum/mind/proc/make_Rev() - if (ticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." - objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" - - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) - - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - qdel(flash) - take_uplink() - var/fail = 0 -// fail |= !ticker.mode.equip_traitor(current, 1) - fail |= !ticker.mode.equip_revolutionary(current) - - -/datum/mind/proc/make_Gang(datum/gang/G) - special_role = "[G.name] Gang Boss" - G.bosses += src - gang_datum = G - G.add_gang_hud(src) - ticker.mode.forge_gang_objectives(src) - ticker.mode.greet_gang(src) - ticker.mode.equip_gang(current,G) - -/datum/mind/proc/make_Abductor() - var/role = alert("Abductor Role ?","Role","Agent","Scientist") - var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4) - var/teleport = alert("Teleport to ship ?","Teleport","Yes","No") - - if(!role || !team || !teleport) - return - - if(!ishuman(current)) - return - - ticker.mode.abductors |= src - - var/datum/objective/experiment/O = new - O.owner = src - objectives += O - - var/mob/living/carbon/human/H = current - - H.set_species(/datum/species/abductor) - var/datum/species/abductor/S = H.dna.species - - switch(role) - if("Agent") - S.agent = 1 - if("Scientist") - S.scientist = 1 - S.team = team - - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new - agent_landmarks.len = 4 - scientist_landmarks.len = 4 - for(var/obj/effect/landmark/abductor/A in landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) - agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) - scientist_landmarks[text2num(A.team)] = A - - var/obj/effect/landmark/L - if(teleport=="Yes") - switch(role) - if("Agent") - S.agent = 1 - L = agent_landmarks[team] - H.loc = L.loc - if("Scientist") - S.scientist = 1 - L = agent_landmarks[team] - H.loc = L.loc - - -/datum/mind/proc/make_Handofgod_follower(colour) - . = 0 - switch(colour) - if("red") - //Remove old allegiances - if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets) - current << "You are no longer a member of the Blue cult!" - - ticker.mode.blue_deity_followers -= src - ticker.mode.blue_deity_prophets -= src - current.faction |= "red god" - current.faction -= "blue god" - - if(src in ticker.mode.red_deity_prophets) - current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!" - ticker.mode.red_deity_prophets -= src - - ticker.mode.red_deity_followers |= src - current << "You are now a follower of the red cult's god!" - - special_role = "Hand of God: Red Follower" - . = 1 - if("blue") - //Remove old allegiances - if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets) - current << "You are no longer a member of the Red cult!" - - ticker.mode.red_deity_followers -= src - ticker.mode.red_deity_prophets -= src - current.faction -= "red god" - current.faction |= "blue god" - - if(src in ticker.mode.blue_deity_prophets) - current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!" - ticker.mode.blue_deity_prophets -= src - - ticker.mode.blue_deity_followers |= src - current << "You are now a follower of the blue cult's god!" - - special_role = "Hand of God: Blue Follower" - . = 1 - else - return 0 - - ticker.mode.update_hog_icons_removed(src,"red") - ticker.mode.update_hog_icons_removed(src,"blue") - //ticker.mode.greet_hog_follower(src,colour) - ticker.mode.update_hog_icons_added(src, colour) - -/datum/mind/proc/make_Handofgod_prophet(colour) - . = 0 - switch(colour) - if("red") - //Remove old allegiances - - if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets) - current << "You are no longer a member of the Blue cult!" - current.faction -= "blue god" - current.faction |= "red god" - - ticker.mode.blue_deity_followers -= src - ticker.mode.blue_deity_prophets -= src - ticker.mode.red_deity_followers -= src - - ticker.mode.red_deity_prophets |= src - current << "You are now a prophet of the red cult's god!" - - special_role = "Hand of God: Red Prophet" - . = 1 - if("blue") - //Remove old allegiances - - if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets) - current << "You are no longer a member of the Red cult!" - current.faction -= "red god" - current.faction |= "blue god" - - ticker.mode.red_deity_followers -= src - ticker.mode.red_deity_prophets -= src - ticker.mode.blue_deity_followers -= src - - ticker.mode.blue_deity_prophets |= src - current << "You are now a prophet of the blue cult's god!" - - special_role = "Hand of God: Blue Prophet" - . = 1 - - else - return 0 - - ticker.mode.update_hog_icons_removed(src,"red") - ticker.mode.update_hog_icons_removed(src,"blue") - ticker.mode.greet_hog_follower(src,colour) - ticker.mode.update_hog_icons_added(src, colour) - - -/datum/mind/proc/make_Handofgod_god(colour) - switch(colour) - if("red") - current.become_god("red") - ticker.mode.add_god(src,"red") - if("blue") - current.become_god("blue") - ticker.mode.add_god(src,"blue") - else - return 0 - ticker.mode.forge_deity_objectives(src) - ticker.mode.remove_hog_follower(src,0) - ticker.mode.update_hog_icons_added(src, colour) -// ticker.mode.greet_hog_follower(src,colour) - return 1 - - -/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/spell) - spell_list += spell - if(!spell.action) - spell.action = new/datum/action/spell_action - spell.action.target = spell - spell.action.name = spell.name - spell.action.button_icon = spell.action_icon - spell.action.button_icon_state = spell.action_icon_state - spell.action.background_icon_state = spell.action_background_icon_state - spell.action.Grant(current) - return -/datum/mind/proc/transfer_actions(mob/living/new_character) - if(current && current.actions) - for(var/datum/action/A in current.actions) - A.Grant(new_character) - transfer_mindbound_actions(new_character) - -/datum/mind/proc/transfer_mindbound_actions(var/mob/living/new_character) - for(var/obj/effect/proc_holder/spell/spell in spell_list) - if(!spell.action) // Unlikely but whatever - spell.action = new/datum/action/spell_action - spell.action.target = spell - spell.action.name = spell.name - spell.action.button_icon = spell.action_icon - spell.action.button_icon_state = spell.action_icon_state - spell.action.background_icon_state = spell.action_background_icon_state - spell.action.Grant(new_character) - return - -/mob/proc/sync_mind() - mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) - mind.active = 1 //indicates that the mind is currently synced with a client - -/mob/new_player/sync_mind() - return - -/mob/dead/observer/sync_mind() - return - -//Initialisation procs -/mob/proc/mind_initialize() - if(mind) - mind.key = key - - else - mind = new /datum/mind(key) - if(ticker) - ticker.minds += mind - else - spawn(0) - throw EXCEPTION("mind_initialize(): No ticker ready") - if(!mind.name) mind.name = real_name - mind.current = src - -//HUMAN -/mob/living/carbon/human/mind_initialize() - ..() - if(!mind.assigned_role) mind.assigned_role = "Assistant" //defualt - -//MONKEY -/mob/living/carbon/monkey/mind_initialize() - ..() - -//slime -/mob/living/simple_animal/slime/mind_initialize() - ..() - mind.special_role = "slime" - mind.assigned_role = "slime" - -//XENO -/mob/living/carbon/alien/mind_initialize() - ..() - mind.special_role = "Alien" - mind.assigned_role = "Alien" - //XENO HUMANOID -/mob/living/carbon/alien/humanoid/royal/queen/mind_initialize() - ..() - mind.special_role = "Queen" - -/mob/living/carbon/alien/humanoid/royal/praetorian/mind_initialize() - ..() - mind.special_role = "Praetorian" - -/mob/living/carbon/alien/humanoid/hunter/mind_initialize() - ..() - mind.special_role = "Hunter" - -/mob/living/carbon/alien/humanoid/drone/mind_initialize() - ..() - mind.special_role = "Drone" - -/mob/living/carbon/alien/humanoid/sentinel/mind_initialize() - ..() - mind.special_role = "Sentinel" - //XENO LARVA -/mob/living/carbon/alien/larva/mind_initialize() - ..() - mind.special_role = "Larva" - -//AI -/mob/living/silicon/ai/mind_initialize() - ..() - mind.assigned_role = "AI" - -//BORG -/mob/living/silicon/robot/mind_initialize() - ..() - mind.assigned_role = "Cyborg" - -//PAI -/mob/living/silicon/pai/mind_initialize() - ..() - mind.assigned_role = "pAI" - mind.special_role = "" - -//BLOB -/mob/camera/blob/mind_initialize() - ..() - mind.special_role = "Blob" - -//Animals -/mob/living/simple_animal/mind_initialize() - ..() - mind.assigned_role = "Animal" - mind.special_role = "Animal" - -/mob/living/simple_animal/pet/dog/corgi/mind_initialize() - ..() - mind.assigned_role = "Corgi" - mind.special_role = "Corgi" - -/mob/living/simple_animal/shade/mind_initialize() - ..() - mind.assigned_role = "Shade" - mind.special_role = "Shade" - -/mob/living/simple_animal/hostile/construct/mind_initialize() - ..() - mind.assigned_role = "[initial(name)]" +/* Note from Carnie: + The way datum/mind stuff works has been changed a lot. + Minds now represent IC characters rather than following a client around constantly. + + Guidelines for using minds properly: + + - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! + ghost.mind is however used as a reference to the ghost's corpse + + - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human) + the existing mind of the old mob should be transfered to the new mob like so: + + mind.transfer_to(new_mob) + + - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you. + By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing + the player. + + - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you. + + - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting + a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done. + + new_mob.key = key + + The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! + However if you want that mind to have any special properties like being a traitor etc you will have to do that + yourself. + +*/ + +/datum/mind + var/key + var/name //replaces mob/var/original_name + var/mob/living/current + var/active = 0 + + var/memory + var/attack_log + + var/assigned_role + var/special_role + var/list/restricted_roles = list() + + var/datum/job/assigned_job + + var/list/datum/objective/objectives = list() + var/list/datum/objective/special_verbs = list() + + var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. + + var/datum/faction/faction //associated faction + var/datum/changeling/changeling //changeling holder + + var/miming = 0 // Mime's vow of silence + var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state + var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD + var/datum/gang/gang_datum //Which gang this mind belongs to, if any + +/datum/mind/New(var/key) + src.key = key + + +/datum/mind/proc/transfer_to(mob/new_character) + if(current) // remove ourself from our old body's mind variable + current.mind = null + SStgui.on_transfer(current, new_character) + + if(key) + if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours + new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. + else + key = new_character.key + + if(new_character.mind) //disassociate any mind currently in our new body's mind variable + new_character.mind.current = null + + var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list + leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it + current = new_character //associate ourself with our new body + new_character.mind = src //and associate our new body with ourself + transfer_antag_huds(hud_to_transfer) //inherit the antag HUD + transfer_actions(new_character) + + if(active) + new_character.key = key //now transfer the key to link the client to our new body + +/datum/mind/proc/store_memory(new_text) + memory += "[new_text]
" + +/datum/mind/proc/wipe_memory() + memory = null + + +/* + Removes antag type's references from a mind. + objectives, uplinks, powers etc are all handled. +*/ + +/datum/mind/proc/remove_objectives() + if(objectives.len) + for(var/datum/objective/O in objectives) + objectives -= O + qdel(O) + +/datum/mind/proc/remove_changeling() + if(src in ticker.mode.changelings) + ticker.mode.changelings -= src + current.remove_changeling_powers() + if(changeling) + qdel(changeling) + changeling = null + special_role = null + remove_antag_equip() + +/datum/mind/proc/remove_traitor() + if(src in ticker.mode.traitors) + ticker.mode.traitors -= src + if(isAI(current)) + var/mob/living/silicon/ai/A = current + A.set_zeroth_law("") + A.show_laws() + A.verbs -= /mob/living/silicon/ai/proc/choose_modules + A.malf_picker.remove_verbs(A) + qdel(A.malf_picker) + special_role = null + remove_antag_equip() + +/datum/mind/proc/remove_nukeop() + if(src in ticker.mode.syndicates) + ticker.mode.syndicates -= src + ticker.mode.update_synd_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() + +/datum/mind/proc/remove_wizard() + if(src in ticker.mode.wizards) + ticker.mode.wizards -= src + current.spellremove(current) + special_role = null + remove_antag_equip() + +/datum/mind/proc/remove_cultist() + if(src in ticker.mode.cult) + ticker.mode.cult -= src + ticker.mode.update_cult_icons_removed(src) + special_role = null + +/datum/mind/proc/remove_rev() + if(src in ticker.mode.revolutionaries) + ticker.mode.revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + if(src in ticker.mode.head_revolutionaries) + ticker.mode.head_revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() + + +/datum/mind/proc/remove_gang() + ticker.mode.remove_gangster(src,0,1,1) + remove_objectives() + +/datum/mind/proc/remove_hog_follower_prophet() + ticker.mode.red_deity_followers -= src + ticker.mode.red_deity_prophets -= src + ticker.mode.blue_deity_prophets -= src + ticker.mode.blue_deity_followers -= src + ticker.mode.update_hog_icons_removed(src, "red") + ticker.mode.update_hog_icons_removed(src, "blue") + + + +/datum/mind/proc/remove_antag_equip() + var/list/Mob_Contents = current.get_contents() + for(var/obj/item/I in Mob_Contents) + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/P = I + P.lock_code = "" + + else if(istype(I, /obj/item/device/radio)) + var/obj/item/device/radio/R = I + R.traitor_frequency = 0 + +/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. + remove_changeling() + remove_traitor() + remove_nukeop() + remove_wizard() + remove_cultist() + remove_rev() + remove_gang() + +/datum/mind/proc/show_memory(mob/recipient, window=1) + if(!recipient) + recipient = current + var/output = "[current.real_name]'s Memories:
" + output += memory + + if(objectives.len) + output += "Objectives:" + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + output += "
Objective #[obj_count++]: [objective.explanation_text]" + + if(window) recipient << browse(output,"window=memory") + else recipient << "[output]" + +/datum/mind/proc/edit_memory() + if(!ticker || !ticker.mode) + alert("Not before round-start!", "Alert") + return + + var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" + out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" + out += "Assigned role: [assigned_role]. Edit
" + out += "Faction and special role: [special_role]
" + + var/list/sections = list( + "revolution", + "gang", + "cult", + "wizard", + "changeling", + "nuclear", + "traitor", // "traitorchan", + "monkey", + ) + var/text = "" + + if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey)) + /** REVOLUTION ***/ + text = "revolution" + if (ticker.mode.config_tag=="revolution") + text = uppertext(text) + text = "[text]: " + if (assigned_role in command_positions) + text += "HEAD|loyal|employee|headrev|rev" + else if (src in ticker.mode.head_revolutionaries) + text += "head|loyal|employee|HEADREV|rev" + text += "
Flash: give" + + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (flash) + if(!flash.crit_fail) + text += "|take." + else + text += "|take|repair." + else + text += "." + + text += " Reequip (gives traitor uplink)." + if (objectives.len==0) + text += "
Objectives are empty! Set to kill all heads." + else if(isloyal(current)) + text += "head|LOYAL|employee|headrev|rev" + else if (src in ticker.mode.revolutionaries) + text += "head|loyal|employee|headrev|REV" + else + text += "head|loyal|EMPLOYEE|headrev|rev" + + if(current && current.client && (ROLE_REV in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["revolution"] = text + + /** GANG ***/ + text = "gang" + if (ticker.mode.config_tag=="gang") + text = uppertext(text) + text = "[text]: " + text += "[isloyal(current) ? "LOYAL" : "loyal"]|" + if(src in ticker.mode.get_all_gangsters()) + text += "none" + else + text += "NONE" + + if(current && current.client && (ROLE_GANG in current.client.prefs.be_special)) + text += "|Enabled in Prefs
" + else + text += "|Disabled in Prefs
" + + for(var/datum/gang/G in ticker.mode.gangs) + text += "[G.name]: " + if(src in (G.gangsters)) + text += "GANGSTER" + else + text += "gangster" + text += "|" + if(src in (G.bosses)) + text += "GANG LEADER" + text += "|Equipment: give" + var/list/L = current.get_contents() + var/obj/item/device/gangtool/gangtool = locate() in L + if (gangtool) + text += "|take" + + else + text += "gang leader" + text += "
" + + if(gang_colors_pool.len) + text += "Create New Gang" + + sections["gang"] = text + + + /** CULT ***/ + text = "cult" + if (ticker.mode.config_tag=="cult") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.cult) + text += "loyal|employee|CULTIST" + text += "
Equip" + + else if(isloyal(current)) + text += "LOYAL|employee|cultist" + else + text += "loyal|EMPLOYEE|cultist" + + if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["cult"] = text + + /** WIZARD ***/ + text = "wizard" + if (ticker.mode.config_tag=="wizard") + text = uppertext(text) + text = "[text]: " + if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices)) + text += "YES|no" + text += "
To lair, undress, dress up, let choose name." + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + else + text += "yes|NO" + + if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["wizard"] = text + + /** CHANGELING ***/ + text = "changeling" + if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if ((src in ticker.mode.changelings) && special_role) + text += "YES|no" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) + text += "
Transform to initial appearance." + else if(src in ticker.mode.changelings) //Station Aligned Changeling + text += "YES (but not an antag)|no" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) + text += "
Transform to initial appearance." + else + text += "yes|NO" +// var/datum/game_mode/changeling/changeling = ticker.mode +// if (istype(changeling) && changeling.changelingdeath) +// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds." + + if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["changeling"] = text + + /** NUCLEAR ***/ + text = "nuclear" + if (ticker.mode.config_tag=="nuclear") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.syndicates) + text += "OPERATIVE|nanotrasen" + text += "
To shuttle, undress, dress up." + var/code + for (var/obj/machinery/nuclearbomb/bombue in machines) + if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") + code = bombue.r_code + break + if (code) + text += " Code is [code]. tell the code." + else + text += "operative|NANOTRASEN" + + if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["nuclear"] = text + + /** TRAITOR ***/ + text = "traitor" + if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if (src in ticker.mode.traitors) + text += "TRAITOR|loyal" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + else + text += "traitor|LOYAL" + + if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["traitor"] = text + + /** SHADOWLING **/ + text = "shadowling" + if(ticker.mode.config_tag == "shadowling") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.shadows) + text += "SHADOWLING|thrall|human" + else if(src in ticker.mode.thralls) + text += "shadowling|THRALL|human" + else + text += "shadowling|thrall|HUMAN" + + if(current && current.client && (ROLE_SHADOWLING in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["shadowling"] = text + + /** Abductors **/ + + text = "Abductor" + if(ticker.mode.config_tag == "abductor") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.abductors) + text += "Abductor|human" + text += "|undress|equip" + else + text += "Abductor|human" + + if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["abductor"] = text + + /** HAND OF GOD **/ + text = "hand of god" + if(ticker.mode.config_tag == "handofgod") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.red_deity_prophets) + text += "RED PROPHET|red follower|employee|blue follower|blue prophet|red god|blue god" + else if (src in ticker.mode.red_deity_followers) + text += "red prophet|RED FOLLOWER|employee|blue follower|blue prophet|red god|blue god" + else if (src in ticker.mode.blue_deity_followers) + text += "red prophet|red follower|employee|BLUE FOLLOWER|blue prophet|red god|blue god" + else if (src in ticker.mode.blue_deity_prophets) + text += "red prophet|red follower|employee|blue follower|BLUE PROPHET|red god|blue god" + else if (src in ticker.mode.red_deities) + text += "red prophet|red follower|employee|blue follower|blue prophet|RED GOD|blue god" + else if (src in ticker.mode.blue_deities) + text += "red prophet|red follower|employee|blue follower|blue prophet|red god|BLUE GOD" + else + text += "red prophet|red follower|EMPLOYEE|blue follower|blue prophet|red god|blue god" + + if(current && current.client && (ROLE_HOG_GOD in current.client.prefs.be_special)) + text += "|HOG God Enabled in Prefs" + else + text += "|HOG God Disabled in Prefs" + + if(current && current.client && (ROLE_HOG_CULTIST in current.client.prefs.be_special)) + text += "|HOG Cultist Enabled in Prefs" + else + text += "|HOG Disabled in Prefs" + + sections["follower"] = text + + /** MONKEY ***/ + if (istype(current, /mob/living/carbon)) + text = "monkey" + if (ticker.mode.config_tag=="monkey") + text = uppertext(text) + text = "[text]: " + if (istype(current, /mob/living/carbon/human)) + text += "healthy|infected|HUMAN|other" + else if (istype(current, /mob/living/carbon/monkey)) + var/found = 0 + for(var/datum/disease/D in current.viruses) + if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 + + if(found) + text += "healthy|INFECTED|human|other" + else + text += "HEALTHY|infected|human|other" + + else + text += "healthy|infected|human|OTHER" + + if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["monkey"] = text + + + /** SILICON ***/ + + if (istype(current, /mob/living/silicon)) + text = "silicon" + var/mob/living/silicon/robot/robot = current + if (istype(robot) && robot.emagged) + text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]" + var/mob/living/silicon/ai/ai = current + if (istype(ai) && ai.connected_robots.len) + var/n_e_robots = 0 + for (var/mob/living/silicon/robot/R in ai.connected_robots) + if (R.emagged) + n_e_robots++ + text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" + if (ticker.mode.config_tag == "traitorchan") + if (sections["traitor"]) + out += sections["traitor"]+"
" + if (sections["changeling"]) + out += sections["changeling"]+"

" + sections -= "traitor" + sections -= "changeling" + else + if (sections[ticker.mode.config_tag]) + out += sections[ticker.mode.config_tag]+"

" + sections -= ticker.mode.config_tag + for (var/i in sections) + if (sections[i]) + out += sections[i]+"
" + + + if (((src in ticker.mode.head_revolutionaries) || \ + (src in ticker.mode.traitors) || \ + (src in ticker.mode.syndicates)) && \ + istype(current,/mob/living/carbon/human) ) + + text = "Uplink: give" + var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() + var/crystals + if (suplink) + crystals = suplink.uses + if (suplink) + text += "|take" + if (check_rights(R_FUN, 0)) + text += ", [crystals] crystals" + else + text += ", [crystals] crystals" + text += "." //hiel grammar + out += text + + out += "

" + + out += "Memory:
" + out += memory + out += "
Edit memory
" + out += "Objectives:
" + if (objectives.len == 0) + out += "EMPTY
" + else + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
" + obj_count++ + out += "Add objective

" + + out += "Announce objectives

" + + usr << browse(out, "window=edit_memory[src];size=500x600") + + +/datum/mind/Topic(href, href_list) + if(!check_rights(R_ADMIN)) return + + if (href_list["role_edit"]) + var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() + if (!new_role) return + assigned_role = new_role + + else if (href_list["memory_edit"]) + var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) + if (isnull(new_memo)) return + memory = new_memo + + else if (href_list["obj_edit"] || href_list["obj_add"]) + var/datum/objective/objective + var/objective_pos + var/def_value + + if (href_list["obj_edit"]) + objective = locate(href_list["obj_edit"]) + if (!objective) return + objective_pos = objectives.Find(objective) + + //Text strings are easy to manipulate. Revised for simplicity. + var/temp_obj_type = "[objective.type]"//Convert path into a text string. + def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. + if(!def_value)//If it's a custom objective, it will be an empty string. + def_value = "custom" + + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom","follower block (HOG)","build (HOG)","deicide (HOG)", "follower escape (HOG)", "sacrifice prophet (HOG)") + if (!new_obj_type) return + + var/datum/objective/new_objective = null + + switch (new_obj_type) + if ("assassinate","protect","debrain","maroon") + var/list/possible_targets = list("Free objective") + for(var/datum/mind/possible_target in ticker.minds) + if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) + possible_targets += possible_target.current + + var/mob/def_target = null + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon) + if (objective&&(objective.type in objective_list) && objective:target) + def_target = objective:target.current + + var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + if (!new_target) return + + var/objective_path = text2path("/datum/objective/[new_obj_type]") + if (new_target == "Free objective") + new_objective = new objective_path + new_objective.owner = src + new_objective:target = null + new_objective.explanation_text = "Free objective" + else + new_objective = new objective_path + new_objective.owner = src + new_objective:target = new_target:mind + //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. + new_objective.update_explanation_text() + + if ("destroy") + var/list/possible_targets = active_ais(1) + if(possible_targets.len) + var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets + new_objective = new /datum/objective/destroy + new_objective.target = new_target.mind + new_objective.owner = src + new_objective.update_explanation_text() + else + usr << "No active AIs with minds" + + if ("prevent") + new_objective = new /datum/objective/block + new_objective.owner = src + + if ("hijack") + new_objective = new /datum/objective/hijack + new_objective.owner = src + + if ("escape") + new_objective = new /datum/objective/escape + new_objective.owner = src + + if ("survive") + new_objective = new /datum/objective/survive + new_objective.owner = src + + if("martyr") + new_objective = new /datum/objective/martyr + new_objective.owner = src + + if ("nuclear") + new_objective = new /datum/objective/nuclear + new_objective.owner = src + + if ("steal") + if (!istype(objective, /datum/objective/steal)) + new_objective = new /datum/objective/steal + new_objective.owner = src + else + new_objective = objective + var/datum/objective/steal/steal = new_objective + if (!steal.select_target()) + return + + if("download","capture","absorb") + var/def_num + if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) + def_num = objective.target_amount + + var/target_number = input("Input target number:", "Objective", def_num) as num|null + if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. + return + + switch(new_obj_type) + if("download") + new_objective = new /datum/objective/download + new_objective.explanation_text = "Download [target_number] research levels." + if("capture") + new_objective = new /datum/objective/capture + new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more." + if("absorb") + new_objective = new /datum/objective/absorb + new_objective.explanation_text = "Absorb [target_number] compatible genomes." + new_objective.owner = src + new_objective.target_amount = target_number + + if("follower block (HOG)") + new_objective = new /datum/objective/follower_block + new_objective.owner = src + if("build (HOG)") + new_objective = new /datum/objective/build + new_objective.owner = src + if("deicide (HOG)") + new_objective = new /datum/objective/deicide + new_objective.owner = src + if("follower escape (HOG)") + new_objective = new /datum/objective/escape_followers + new_objective.owner = src + if("sacrifice prophet (HOG)") + new_objective = new /datum/objective/sacrifice_prophet + new_objective.owner = src + + if ("custom") + var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") + if (!expl) return + new_objective = new /datum/objective + new_objective.owner = src + new_objective.explanation_text = expl + + if (!new_objective) return + + if (objective) + objectives -= objective + objectives.Insert(objective_pos, new_objective) + message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") + log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") + else + objectives += new_objective + message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") + log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") + + else if (href_list["obj_delete"]) + var/datum/objective/objective = locate(href_list["obj_delete"]) + if(!istype(objective)) return + objectives -= objective + message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") + log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") + + else if(href_list["obj_completed"]) + var/datum/objective/objective = locate(href_list["obj_completed"]) + if(!istype(objective)) return + objective.completed = !objective.completed + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") + + else if (href_list["handofgod"]) + switch(href_list["handofgod"]) + if("clear") //wipe handofgod status + if((src in ticker.mode.red_deity_followers) || (src in ticker.mode.blue_deity_followers) || (src in ticker.mode.red_deity_prophets) || (src in ticker.mode.blue_deity_prophets)) + remove_hog_follower_prophet() + current << "You have been brainwashed... again! Your faith is no more!" + message_admins("[key_name_admin(usr)] has de-hand of god'ed [current].") + log_admin("[key_name(usr)] has de-hand of god'ed [current].") + + if("red follower") + make_Handofgod_follower("red") + message_admins("[key_name_admin(usr)] has red follower'ed [current].") + log_admin("[key_name(usr)] has red follower'ed [current].") + + if("red prophet") + make_Handofgod_prophet("red") + message_admins("[key_name_admin(usr)] has red prophet'ed [current].") + log_admin("[key_name(usr)] has red prophet'ed [current].") + + if("blue follower") + make_Handofgod_follower("blue") + message_admins("[key_name_admin(usr)] has blue follower'ed [current].") + log_admin("[key_name(usr)] has blue follower'ed [current].") + + if("blue prophet") + make_Handofgod_prophet("blue") + message_admins("[key_name_admin(usr)] has blue prophet'ed [current].") + log_admin("[key_name(usr)] has blue prophet'ed [current].") + + if("red god") + make_Handofgod_god("red") + message_admins("[key_name_admin(usr)] has red god'ed [current].") + log_admin("[key_name(usr)] has red god'ed [current].") + + if("blue god") + make_Handofgod_god("blue") + message_admins("[key_name_admin(usr)] has blue god'ed [current].") + log_admin("[key_name(usr)] has blue god'ed [current].") + + + else if (href_list["revolution"]) + switch(href_list["revolution"]) + if("clear") + remove_rev() + current << "You have been brainwashed! You are no longer a revolutionary!" + message_admins("[key_name_admin(usr)] has de-rev'ed [current].") + log_admin("[key_name(usr)] has de-rev'ed [current].") + if("rev") + if(src in ticker.mode.head_revolutionaries) + ticker.mode.head_revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + current << "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" + else if(!(src in ticker.mode.revolutionaries)) + current << " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" + else + return + ticker.mode.revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Revolutionary" + message_admins("[key_name_admin(usr)] has rev'ed [current].") + log_admin("[key_name(usr)] has rev'ed [current].") + + if("headrev") + if(src in ticker.mode.revolutionaries) + ticker.mode.revolutionaries -= src + ticker.mode.update_rev_icons_removed(src) + current << "You have proved your devotion to revoltion! Yea are a head revolutionary now!" + else if(!(src in ticker.mode.head_revolutionaries)) + current << "You are a member of the revolutionaries' leadership now!" + else + return + if (ticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." + objectives += rev_obj + ticker.mode.greet_revolutionary(src,0) + ticker.mode.head_revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + message_admins("[key_name_admin(usr)] has head-rev'ed [current].") + log_admin("[key_name(usr)] has head-rev'ed [current].") + + if("autoobjectives") + ticker.mode.forge_revolutionary_objectives(src) + ticker.mode.greet_revolutionary(src,0) + usr << "The objectives for revolution have been generated and shown to [key]" + + if("flash") + if (!ticker.mode.equip_revolutionary(current)) + usr << "Spawning flash failed!" + + if("takeflash") + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + usr << "Deleting flash failed!" + qdel(flash) + + if("repairflash") + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + usr << "Repairing flash failed!" + else + flash.crit_fail = 0 + flash.update_icon() + + + +//////////////////// GANG MODE + + else if (href_list["gang"]) + switch(href_list["gang"]) + if("clear") + remove_gang() + message_admins("[key_name_admin(usr)] has de-gang'ed [current].") + log_admin("[key_name(usr)] has de-gang'ed [current].") + + if("equip") + switch(ticker.mode.equip_gang(current,gang_datum)) + if(1) + usr << "Unable to equip territory spraycan!" + if(2) + usr << "Unable to equip recruitment pen and spraycan!" + if(3) + usr << "Unable to equip gangtool, pen, and spraycan!" + + if("takeequip") + var/list/L = current.get_contents() + for(var/obj/item/weapon/pen/gang/pen in L) + qdel(pen) + for(var/obj/item/device/gangtool/gangtool in L) + qdel(gangtool) + for(var/obj/item/toy/crayon/spraycan/gang/SC in L) + qdel(SC) + + if("new") + if(gang_colors_pool.len) + var/list/names = list("Random") + gang_name_pool + var/gangname = input("Pick a gang name.","Select Name") as null|anything in names + if(gangname && gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time + if(!(gangname in gang_name_pool)) + gangname = null + var/datum/gang/newgang = new(null,gangname) + ticker.mode.gangs += newgang + message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.") + log_admin("[key_name(usr)] has created the [newgang.name] Gang.") + + else if (href_list["gangboss"]) + var/datum/gang/G = locate(href_list["gangboss"]) in ticker.mode.gangs + if(!G || (src in G.bosses)) + return + ticker.mode.remove_gangster(src,0,2,1) + G.bosses += src + gang_datum = G + special_role = "[G.name] Gang Boss" + G.add_gang_hud(src) + current << "You are a [G.name] Gang Boss!" + message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.") + log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.") + ticker.mode.forge_gang_objectives(src) + ticker.mode.greet_gang(src,0) + + else if (href_list["gangster"]) + var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs + if(!G || (src in G.gangsters)) + return + ticker.mode.remove_gangster(src,0,2,1) + ticker.mode.add_gangster(src,G,0) + message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).") + log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).") + +///////////////////////////////// + + + + else if (href_list["cult"]) + switch(href_list["cult"]) + if("clear") + remove_cultist() + current << "You have been brainwashed! You are no longer a cultist!" + message_admins("[key_name_admin(usr)] has de-cult'ed [current].") + log_admin("[key_name(usr)] has de-cult'ed [current].") + if("cultist") + if(!(src in ticker.mode.cult)) + ticker.mode.add_cultist(src) + message_admins("[key_name_admin(usr)] has cult'ed [current].") + log_admin("[key_name(usr)] has cult'ed [current].") + if("equip") + if (!ticker.mode.equip_cultist(current)) + usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete." + + else if (href_list["wizard"]) + switch(href_list["wizard"]) + if("clear") + remove_wizard() + current << "You have been brainwashed! You are no longer a wizard!" + log_admin("[key_name(usr)] has de-wizard'ed [current].") + if("wizard") + if(!(src in ticker.mode.wizards)) + ticker.mode.wizards += src + special_role = "Wizard" + //ticker.mode.learn_basic_spells(current) + current << "You are the Space Wizard!" + message_admins("[key_name_admin(usr)] has wizard'ed [current].") + log_admin("[key_name(usr)] has wizard'ed [current].") + if("lair") + current.loc = pick(wizardstart) + if("dressup") + ticker.mode.equip_wizard(current) + if("name") + ticker.mode.name_wizard(current) + if("autoobjectives") + ticker.mode.forge_wizard_objectives(src) + usr << "The objectives for wizard [key] have been generated. You can edit them and anounce manually." + + else if (href_list["changeling"]) + switch(href_list["changeling"]) + if("clear") + remove_changeling() + current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" + message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") + log_admin("[key_name(usr)] has de-changeling'ed [current].") + if("changeling") + if(!(src in ticker.mode.changelings)) + ticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + current << "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!" + message_admins("[key_name_admin(usr)] has changeling'ed [current].") + log_admin("[key_name(usr)] has changeling'ed [current].") + if("autoobjectives") + ticker.mode.forge_changeling_objectives(src) + usr << "The objectives for changeling [key] have been generated. You can edit them and anounce manually." + + if("initialdna") + if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon)) + usr << "Resetting DNA failed!" + else + var/mob/living/carbon/C = current + changeling.first_prof.dna.transfer_identity(C, transfer_SE=1) + C.real_name = changeling.first_prof.name + C.updateappearance(mutcolor_update=1) + C.domutcheck() + + else if (href_list["nuclear"]) + switch(href_list["nuclear"]) + if("clear") + remove_nukeop() + current << "You have been brainwashed! You are no longer a syndicate operative!" + message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") + log_admin("[key_name(usr)] has de-nuke op'ed [current].") + if("nuclear") + if(!(src in ticker.mode.syndicates)) + ticker.mode.syndicates += src + ticker.mode.update_synd_icons_added(src) + if (ticker.mode.syndicates.len==1) + ticker.mode.prepare_syndicate_leader(src) + else + current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + special_role = "Syndicate" + assigned_role = "Syndicate" + current << "You are a [syndicate_name()] agent!" + ticker.mode.forge_syndicate_objectives(src) + ticker.mode.greet_syndicate(src) + message_admins("[key_name_admin(usr)] has nuke op'ed [current].") + log_admin("[key_name(usr)] has nuke op'ed [current].") + if("lair") + current.loc = get_turf(locate("landmark*Syndicate-Spawn")) + if("dressup") + var/mob/living/carbon/human/H = current + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) + + if (!ticker.mode.equip_syndicate(current)) + usr << "Equipping a syndicate failed!" + if("tellcode") + var/code + for (var/obj/machinery/nuclearbomb/bombue in machines) + if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") + code = bombue.r_code + break + if (code) + store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) + current << "The nuclear authorization code is: [code]" + else + usr << "No valid nuke found!" + + else if (href_list["traitor"]) + switch(href_list["traitor"]) + if("clear") + remove_traitor() + current << "You have been brainwashed! You are no longer a traitor!" + message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") + log_admin("[key_name(usr)] has de-traitor'ed [current].") + + if("traitor") + if(!(src in ticker.mode.traitors)) + ticker.mode.traitors += src + special_role = "traitor" + current << "You are a traitor!" + message_admins("[key_name_admin(usr)] has traitor'ed [current].") + log_admin("[key_name(usr)] has traitor'ed [current].") + if(isAI(current)) + var/mob/living/silicon/ai/A = current + ticker.mode.add_law_zero(A) + A.show_laws() + + if("autoobjectives") + ticker.mode.forge_traitor_objectives(src) + usr << "The objectives for traitor [key] have been generated. You can edit them and anounce manually." + + else if(href_list["shadowling"]) + switch(href_list["shadowling"]) + if("clear") + ticker.mode.update_shadow_icons_removed(src) + if(src in ticker.mode.shadows) + ticker.mode.shadows -= src + special_role = null + current << "Your powers have been quenched! You are no longer a shadowling!" + remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hatch) + remove_spell(/obj/effect/proc_holder/spell/self/shadowling_ascend) + remove_spell(/obj/effect/proc_holder/spell/targeted/enthrall) + remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hivemind) + message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].") + log_admin("[key_name(usr)] has de-shadowling'ed [current].") + else if(src in ticker.mode.thralls) + ticker.mode.remove_thrall(src,0) + message_admins("[key_name_admin(usr)] has de-thrall'ed [current].") + log_admin("[key_name(usr)] has de-thrall'ed [current].") + if("shadowling") + if(!ishuman(current)) + usr << "This only works on humans!" + return + ticker.mode.shadows += src + special_role = "shadowling" + current << "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \ + time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\ + " + ticker.mode.finalize_shadowling(src) + ticker.mode.update_shadow_icons_added(src) + if("thrall") + if(!ishuman(current)) + usr << "This only works on humans!" + return + ticker.mode.add_thrall(src) + message_admins("[key_name_admin(usr)] has thrall'ed [current].") + log_admin("[key_name(usr)] has thrall'ed [current].") + + else if(href_list["abductor"]) + switch(href_list["abductor"]) + if("clear") + usr << "Not implemented yet. Sorry!" + if("abductor") + if(!ishuman(current)) + usr << "This only works on humans!" + return + make_Abductor() + log_admin("[key_name(usr)] turned [current] into abductor.") + if("equip") + var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") + if(gear) + var/datum/game_mode/abduction/temp = new + temp.equip_common(current) + if(gear=="Agent") + temp.equip_agent(current) + else + temp.equip_scientist(current) + + else if (href_list["monkey"]) + var/mob/living/L = current + if (L.notransform) + return + switch(href_list["monkey"]) + if("healthy") + if (check_rights(R_ADMIN)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") + src = null + M = H.monkeyize() + src = M.mind + //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" + else if (istype(M) && length(M.viruses)) + for(var/datum/disease/D in M.viruses) + D.cure(0) + sleep(0) //because deleting of virus is done through spawn(0) + if("infected") + if (check_rights(R_ADMIN, 0)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]") + src = null + M = H.monkeyize() + src = M.mind + current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) + else if (istype(M)) + current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) + if("human") + if (check_rights(R_ADMIN, 0)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(M)) + for(var/datum/disease/D in M.viruses) + if (istype(D,/datum/disease/transformation/jungle_fever)) + D.cure(0) + sleep(0) //because deleting of virus is doing throught spawn(0) + log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") + H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + if(H) + src = H.mind + + else if (href_list["silicon"]) + switch(href_list["silicon"]) + if("unemag") + var/mob/living/silicon/robot/R = current + if (istype(R)) + R.SetEmagged(0) + message_admins("[key_name_admin(usr)] has unemag'ed [R].") + log_admin("[key_name(usr)] has unemag'ed [R].") + + if("unemagcyborgs") + if (istype(current, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/ai = current + for (var/mob/living/silicon/robot/R in ai.connected_robots) + R.SetEmagged(0) + message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") + log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") + + else if (href_list["common"]) + switch(href_list["common"]) + if("undress") + for(var/obj/item/W in current) + current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress. + if("takeuplink") + take_uplink() + memory = null//Remove any memory they may have had. + log_admin("[key_name(usr)] removed [current]'s uplink.") + if("crystals") + if (check_rights(R_FUN, 0)) + var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() + var/crystals + if (suplink) + crystals = suplink.uses + crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num + if (!isnull(crystals)) + if (suplink) + suplink.uses = crystals + message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") + log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") + if("uplink") + if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) + usr << "Equipping a syndicate failed!" + log_admin("[key_name(usr)] attempted to give [current] an uplink.") + + else if (href_list["obj_announce"]) + var/obj_count = 1 + current << "Your current objectives:" + for(var/datum/objective/objective in objectives) + current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + + edit_memory() + +/datum/mind/proc/find_syndicate_uplink() + var/list/L = current.get_contents() + for (var/obj/item/I in L) + if (I.hidden_uplink) + return I.hidden_uplink + return null + +/datum/mind/proc/take_uplink() + var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() + if(H) + qdel(H) + +/datum/mind/proc/make_Traitor() + if(!(src in ticker.mode.traitors)) + ticker.mode.traitors += src + special_role = "traitor" + ticker.mode.forge_traitor_objectives(src) + ticker.mode.finalize_traitor(src) + ticker.mode.greet_traitor(src) + +/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0, telecrystals = TRUE) + if(!(src in ticker.mode.syndicates)) + ticker.mode.syndicates += src + ticker.mode.update_synd_icons_added(src) + special_role = "Syndicate" + ticker.mode.forge_syndicate_objectives(src) + ticker.mode.greet_syndicate(src) + + current.loc = spawnloc + + var/mob/living/carbon/human/H = current + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) + + ticker.mode.equip_syndicate(current, telecrystals) + + if (nuke_code) + store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) + current << "The nuclear authorization code is: [nuke_code]" + + if (leader) + ticker.mode.prepare_syndicate_leader(src,nuke_code) + else + current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + +/datum/mind/proc/make_Changling() + if(!(src in ticker.mode.changelings)) + ticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + ticker.mode.forge_changeling_objectives(src) + ticker.mode.greet_changeling(src) + +/datum/mind/proc/make_Wizard() + if(!(src in ticker.mode.wizards)) + ticker.mode.wizards += src + special_role = "Wizard" + assigned_role = "Wizard" + //ticker.mode.learn_basic_spells(current) + if(!wizardstart.len) + current.loc = pick(latejoin) + current << "HOT INSERTION, GO GO GO" + else + current.loc = pick(wizardstart) + + ticker.mode.equip_wizard(current) + for(var/obj/item/weapon/spellbook/S in current.contents) + S.op = 0 + ticker.mode.name_wizard(current) + ticker.mode.forge_wizard_objectives(src) + ticker.mode.greet_wizard(src) + + +/datum/mind/proc/make_Cultist() + if(!(src in ticker.mode.cult)) + ticker.mode.cult += src + ticker.mode.update_cult_icons_added(src) + special_role = "Cultist" + current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." + current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." + current << "Your objective is to summon Nar-Sie by building and defending a suitable shell for the Geometer. Adequate supplies can be procured through human sacrifices." + ticker.mode.equip_cultist(current) + +/datum/mind/proc/make_Rev() + if (ticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." + objectives += rev_obj + ticker.mode.greet_revolutionary(src,0) + ticker.mode.head_revolutionaries += src + ticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + + ticker.mode.forge_revolutionary_objectives(src) + ticker.mode.greet_revolutionary(src,0) + + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + qdel(flash) + take_uplink() + var/fail = 0 +// fail |= !ticker.mode.equip_traitor(current, 1) + fail |= !ticker.mode.equip_revolutionary(current) + + +/datum/mind/proc/make_Gang(datum/gang/G) + special_role = "[G.name] Gang Boss" + G.bosses += src + gang_datum = G + G.add_gang_hud(src) + ticker.mode.forge_gang_objectives(src) + ticker.mode.greet_gang(src) + ticker.mode.equip_gang(current,G) + +/datum/mind/proc/make_Abductor() + var/role = alert("Abductor Role ?","Role","Agent","Scientist") + var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4) + var/teleport = alert("Teleport to ship ?","Teleport","Yes","No") + + if(!role || !team || !teleport) + return + + if(!ishuman(current)) + return + + ticker.mode.abductors |= src + + var/datum/objective/experiment/O = new + O.owner = src + objectives += O + + var/mob/living/carbon/human/H = current + + H.set_species(/datum/species/abductor) + var/datum/species/abductor/S = H.dna.species + + switch(role) + if("Agent") + S.agent = 1 + if("Scientist") + S.scientist = 1 + S.team = team + + var/list/obj/effect/landmark/abductor/agent_landmarks = new + var/list/obj/effect/landmark/abductor/scientist_landmarks = new + agent_landmarks.len = 4 + scientist_landmarks.len = 4 + for(var/obj/effect/landmark/abductor/A in landmarks_list) + if(istype(A,/obj/effect/landmark/abductor/agent)) + agent_landmarks[text2num(A.team)] = A + else if(istype(A,/obj/effect/landmark/abductor/scientist)) + scientist_landmarks[text2num(A.team)] = A + + var/obj/effect/landmark/L + if(teleport=="Yes") + switch(role) + if("Agent") + S.agent = 1 + L = agent_landmarks[team] + H.loc = L.loc + if("Scientist") + S.scientist = 1 + L = agent_landmarks[team] + H.loc = L.loc + + +/datum/mind/proc/make_Handofgod_follower(colour) + . = 0 + switch(colour) + if("red") + //Remove old allegiances + if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets) + current << "You are no longer a member of the Blue cult!" + + ticker.mode.blue_deity_followers -= src + ticker.mode.blue_deity_prophets -= src + current.faction |= "red god" + current.faction -= "blue god" + + if(src in ticker.mode.red_deity_prophets) + current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!" + ticker.mode.red_deity_prophets -= src + + ticker.mode.red_deity_followers |= src + current << "You are now a follower of the red cult's god!" + + special_role = "Hand of God: Red Follower" + . = 1 + if("blue") + //Remove old allegiances + if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets) + current << "You are no longer a member of the Red cult!" + + ticker.mode.red_deity_followers -= src + ticker.mode.red_deity_prophets -= src + current.faction -= "red god" + current.faction |= "blue god" + + if(src in ticker.mode.blue_deity_prophets) + current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!" + ticker.mode.blue_deity_prophets -= src + + ticker.mode.blue_deity_followers |= src + current << "You are now a follower of the blue cult's god!" + + special_role = "Hand of God: Blue Follower" + . = 1 + else + return 0 + + ticker.mode.update_hog_icons_removed(src,"red") + ticker.mode.update_hog_icons_removed(src,"blue") + //ticker.mode.greet_hog_follower(src,colour) + ticker.mode.update_hog_icons_added(src, colour) + +/datum/mind/proc/make_Handofgod_prophet(colour) + . = 0 + switch(colour) + if("red") + //Remove old allegiances + + if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets) + current << "You are no longer a member of the Blue cult!" + current.faction -= "blue god" + current.faction |= "red god" + + ticker.mode.blue_deity_followers -= src + ticker.mode.blue_deity_prophets -= src + ticker.mode.red_deity_followers -= src + + ticker.mode.red_deity_prophets |= src + current << "You are now a prophet of the red cult's god!" + + special_role = "Hand of God: Red Prophet" + . = 1 + if("blue") + //Remove old allegiances + + if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets) + current << "You are no longer a member of the Red cult!" + current.faction -= "red god" + current.faction |= "blue god" + + ticker.mode.red_deity_followers -= src + ticker.mode.red_deity_prophets -= src + ticker.mode.blue_deity_followers -= src + + ticker.mode.blue_deity_prophets |= src + current << "You are now a prophet of the blue cult's god!" + + special_role = "Hand of God: Blue Prophet" + . = 1 + + else + return 0 + + ticker.mode.update_hog_icons_removed(src,"red") + ticker.mode.update_hog_icons_removed(src,"blue") + ticker.mode.greet_hog_follower(src,colour) + ticker.mode.update_hog_icons_added(src, colour) + + +/datum/mind/proc/make_Handofgod_god(colour) + switch(colour) + if("red") + current.become_god("red") + ticker.mode.add_god(src,"red") + if("blue") + current.become_god("blue") + ticker.mode.add_god(src,"blue") + else + return 0 + ticker.mode.forge_deity_objectives(src) + ticker.mode.remove_hog_follower(src,0) + ticker.mode.update_hog_icons_added(src, colour) +// ticker.mode.greet_hog_follower(src,colour) + return 1 + + +/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/spell) + spell_list += spell + if(!spell.action) + spell.action = new/datum/action/spell_action + spell.action.target = spell + spell.action.name = spell.name + spell.action.button_icon = spell.action_icon + spell.action.button_icon_state = spell.action_icon_state + spell.action.background_icon_state = spell.action_background_icon_state + spell.action.Grant(current) + return +/datum/mind/proc/transfer_actions(mob/living/new_character) + if(current && current.actions) + for(var/datum/action/A in current.actions) + A.Grant(new_character) + transfer_mindbound_actions(new_character) + +/datum/mind/proc/transfer_mindbound_actions(var/mob/living/new_character) + for(var/obj/effect/proc_holder/spell/spell in spell_list) + if(!spell.action) // Unlikely but whatever + spell.action = new/datum/action/spell_action + spell.action.target = spell + spell.action.name = spell.name + spell.action.button_icon = spell.action_icon + spell.action.button_icon_state = spell.action_icon_state + spell.action.background_icon_state = spell.action_background_icon_state + spell.action.Grant(new_character) + return + +/mob/proc/sync_mind() + mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) + mind.active = 1 //indicates that the mind is currently synced with a client + +/mob/new_player/sync_mind() + return + +/mob/dead/observer/sync_mind() + return + +//Initialisation procs +/mob/proc/mind_initialize() + if(mind) + mind.key = key + + else + mind = new /datum/mind(key) + if(ticker) + ticker.minds += mind + else + spawn(0) + throw EXCEPTION("mind_initialize(): No ticker ready") + if(!mind.name) mind.name = real_name + mind.current = src + +//HUMAN +/mob/living/carbon/human/mind_initialize() + ..() + if(!mind.assigned_role) mind.assigned_role = "Assistant" //defualt + +//MONKEY +/mob/living/carbon/monkey/mind_initialize() + ..() + +//slime +/mob/living/simple_animal/slime/mind_initialize() + ..() + mind.special_role = "slime" + mind.assigned_role = "slime" + +//XENO +/mob/living/carbon/alien/mind_initialize() + ..() + mind.special_role = "Alien" + mind.assigned_role = "Alien" + //XENO HUMANOID +/mob/living/carbon/alien/humanoid/royal/queen/mind_initialize() + ..() + mind.special_role = "Queen" + +/mob/living/carbon/alien/humanoid/royal/praetorian/mind_initialize() + ..() + mind.special_role = "Praetorian" + +/mob/living/carbon/alien/humanoid/hunter/mind_initialize() + ..() + mind.special_role = "Hunter" + +/mob/living/carbon/alien/humanoid/drone/mind_initialize() + ..() + mind.special_role = "Drone" + +/mob/living/carbon/alien/humanoid/sentinel/mind_initialize() + ..() + mind.special_role = "Sentinel" + //XENO LARVA +/mob/living/carbon/alien/larva/mind_initialize() + ..() + mind.special_role = "Larva" + +//AI +/mob/living/silicon/ai/mind_initialize() + ..() + mind.assigned_role = "AI" + +//BORG +/mob/living/silicon/robot/mind_initialize() + ..() + mind.assigned_role = "Cyborg" + +//PAI +/mob/living/silicon/pai/mind_initialize() + ..() + mind.assigned_role = "pAI" + mind.special_role = "" + +//BLOB +/mob/camera/blob/mind_initialize() + ..() + mind.special_role = "Blob" + +//Animals +/mob/living/simple_animal/mind_initialize() + ..() + mind.assigned_role = "Animal" + mind.special_role = "Animal" + +/mob/living/simple_animal/pet/dog/corgi/mind_initialize() + ..() + mind.assigned_role = "Corgi" + mind.special_role = "Corgi" + +/mob/living/simple_animal/shade/mind_initialize() + ..() + mind.assigned_role = "Shade" + mind.special_role = "Shade" + +/mob/living/simple_animal/hostile/construct/mind_initialize() + ..() + mind.assigned_role = "[initial(name)]" mind.special_role = "Cultist" + diff --git a/code/datums/modules.dm b/code/datums/modules.dm deleted file mode 100644 index af693456543..00000000000 --- a/code/datums/modules.dm +++ /dev/null @@ -1,62 +0,0 @@ -// module datum. -// this is per-object instance, and shows the condition of the modules in the object -// actual modules needed is referenced through modulestypes and the object type - -/datum/module - var/status // bits set if working, 0 if broken - var/installed // bits set if installed, 0 if missing - -// moduletypes datum -// this is per-object type, and shows the modules needed for a type of object - -/datum/moduletypes - var/list/modcount = list() // assoc list of the count of modules for a type - - -var/list/modules = list( // global associative list -"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge") - - -/datum/module/New(var/obj/O) - - var/type = O.type // the type of the creating object - - var/mneed = mods.inmodlist(type) // find if this type has modules defined - - if(!mneed) // not found in module list? - qdel(src) // delete self, thus ending proc - - var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object - status = needed - installed = needed - -/datum/moduletypes/proc/addmod(type, modtextlist) - modules += type // index by type text - modules[type] = modtextlist - -/datum/moduletypes/proc/inmodlist(type) - return ("[type]" in modules) - -/datum/moduletypes/proc/getbitmask(type) - var/count = modcount["[type]"] - if(count) - return 2**count-1 - - var/modtext = modules["[type]"] - var/num = 1 - var/pos = 1 - - while(1) - pos = findtext(modtext, ",", pos, 0) - if(!pos) - break - else - pos++ - num++ - - modcount += "[type]" - modcount["[type]"] = num - - return 2**num-1 - - diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm index e471cf084a8..3ca60856192 100644 --- a/code/datums/spells/construct_spells.dm +++ b/code/datums/spells/construct_spells.dm @@ -70,6 +70,10 @@ cult_req = 1 charge_max = 4000 +/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult + summon_type = list(/obj/item/device/soulstone/anybody) + + /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall name = "Shield" diff --git a/code/datums/spells/infinite_guns.dm b/code/datums/spells/infinite_guns.dm index e74ac7af043..10b8612c858 100644 --- a/code/datums/spells/infinite_guns.dm +++ b/code/datums/spells/infinite_guns.dm @@ -6,7 +6,7 @@ range = -1 school = "conjuration" - charge_max = 300 + charge_max = 750 clothes_req = 1 cooldown_min = 10 //Gun wizard action_icon_state = "bolt_action" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index b79afa72ee4..9f1e620b033 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -63,6 +63,7 @@ var/list/uplink_items = list() var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here. var/list/excludefrom = list() //Empty list does nothing. Place the name of gamemode you don't want this item to be available in here. This is so you dont have to list EVERY mode to exclude something. var/surplus = 100 //Chance of being included in the surplus crate (when pick() selects it) + var/refundable = FALSE /datum/uplink_item/proc/spawn_item(turf/loc, obj/item/device/uplink/U) if(item) @@ -332,12 +333,7 @@ var/list/uplink_items = list() cost = 25 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 - -/datum/uplink_item/dangerous/reinforcement/spawn_item() - var/obj/item/weapon/antag_spawner/nuke_ops/T = ..() - if(istype(T)) - T.TC_cost = cost - + refundable = TRUE /datum/uplink_item/dangerous/guardian name = "Holoparasites" @@ -1049,7 +1045,7 @@ var/list/uplink_items = list() buyable_items += temp_uplink_list[category] var/list/bought_items = list() U.uses -= cost - U.used_TC = 20 + U.used_TC += 20 var/remaining_TC = 50 var/datum/uplink_item/I diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 2d979f712bf..1846247a260 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -740,7 +740,7 @@ var/list/teleportlocs = list() music = 'sound/ambience/signal.ogg' /area/medical/patients_rooms - name = "Patient's Rooms" + name = "Patients' Rooms" icon_state = "patients" /area/medical/cmo @@ -1142,7 +1142,7 @@ var/list/teleportlocs = list() icon_state = "yellow" /area/construction/quarters - name = "Engineer's Quarters" + name = "Engineers' Quarters" icon_state = "yellow" /area/construction/qmaint diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a3c326abfa1..fe2a2e34cbc 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -295,3 +295,23 @@ if(buckled_mob == mover) return 1 return ..() + + +/atom/movable/proc/get_spacemove_backup() + var/atom/movable/dense_object_backup + for(var/A in orange(1, get_turf(src))) + if(isarea(A)) + continue + else if(isturf(A)) + var/turf/turf = A + if(!turf.density) + continue + return turf + else + var/atom/movable/AM = A + if(!AM.CanPass(src) || AM.density) + if(AM.anchored) + return AM + dense_object_backup = AM + break + . = dense_object_backup \ No newline at end of file diff --git a/code/game/communications.dm b/code/game/communications.dm index d9c1595ec2e..2052b793936 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -40,7 +40,7 @@ obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) Handler from received signals. By default does nothing. Define your own for your object. - Avoid of sending signals directly from this proc, use spawn(-1). Do not use sleep() here please. + Avoid of sending signals directly from this proc, use spawn(0). Do not use sleep() here please. parameters: signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return! receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO. diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index d61bb3607e1..1fb027a8844 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -92,13 +92,14 @@ M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap." equip_antag(M) - var/mob/living/carbon/human/H = usr var/wizard_name_first = pick(wizard_first) var/wizard_name_second = pick(wizard_second) var/randomname = "[wizard_name_first] [wizard_name_second]" - var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect) - new_objective.target = H.mind - new_objective.explanation_text = "Protect [H.real_name], the wizard." + 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 ticker.mode.apprentices += M.mind M.mind.special_role = "apprentice" ticker.mode.update_wiz_icons_added(M.mind) @@ -134,7 +135,6 @@ desc = "A single-use teleporter designed to quickly reinforce operatives in the field." icon = 'icons/obj/device.dmi' icon_state = "locator" - var/TC_cost = 0 var/borg_to_spawn var/list/possible_types = list("Assault", "Medical") @@ -163,6 +163,7 @@ var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread S.set_up(4, 1, src) S.start() + qdel(src) else 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." @@ -251,9 +252,11 @@ S.mind.assigned_role = "Slaughter Demon" S.mind.special_role = "Slaughter Demon" ticker.mode.traitors += S.mind - var/datum/objective/default/assassinate/new_objective = add_objective(S.mind, /datum/objective/default/assassinate) + var/datum/objective/assassinate/new_objective = new /datum/objective/assassinate + new_objective.owner = S.mind new_objective.target = usr.mind new_objective.explanation_text = "Kill [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 = "Kill everyone else while you're at it." @@ -261,4 +264,4 @@ S << S.playstyle_string S << "You are currently not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest." S << "Objective #[1]: [new_objective.explanation_text]" - S << "Objective #[2]: [new_objective2.explanation_text]" \ No newline at end of file + S << "Objective #[2]: [new_objective2.explanation_text]" diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 5d0e61a3b11..24abe73e2b8 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -8,6 +8,7 @@ icon = 'icons/mob/blob.dmi' pass_flags = PASSBLOB faction = list("blob") + bubble_icon = "blob" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 360 diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 7771469a545..4a6d5c55481 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -8,6 +8,8 @@ explosion_block = 6 point_return = -1 atmosblock = 1 + health_regen = 0 //we regen in Life() instead of when pulsed + var/core_regen = 2 var/overmind_get_delay = 0 //we don't want to constantly try to find an overmind, this var tracks when we'll try to get an overmind again var/resource_delay = 0 var/point_rate = 2 @@ -34,9 +36,6 @@ var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay") overlays += C -/obj/effect/blob/core/PulseAnimation() - return - /obj/effect/blob/core/Destroy() blob_cores -= src if(overmind) @@ -56,9 +55,6 @@ if(overmind) //we should have an overmind, but... overmind.update_health() -/obj/effect/blob/core/RegenHealth() - return // Don't regen, we handle it in Life() - /obj/effect/blob/core/Life() if(!overmind) create_overmind() @@ -66,7 +62,7 @@ if(resource_delay <= world.time) resource_delay = world.time + 10 // 1 second overmind.add_points(point_rate) - health = min(maxhealth, health+health_regen) + health = min(maxhealth, health+core_regen) if(overmind) overmind.update_health() Pulse_Area(overmind, 12, 4, 3) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index a70842aa7c4..b6c3c879b15 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -18,22 +18,16 @@ spores = null return ..() -/obj/effect/blob/factory/PulseAnimation(activate = 0) - if(activate) - ..() - return - -/obj/effect/blob/factory/run_action() +/obj/effect/blob/factory/Be_Pulsed() + . = ..() if(spores.len >= max_spores) - return 0 + return if(spore_delay > world.time) - return 0 + return + flick("factory_glow", src) spore_delay = world.time + 100 // 10 seconds - PulseAnimation(1) var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) if(overmind) //if we don't have an overmind, we don't need to do anything but make a spore BS.overmind = overmind BS.update_icons() overmind.blob_mobs.Add(BS) - return 0 - diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 3141e98930b..0fa21158e26 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -25,9 +25,6 @@ var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") src.overlays += C -/obj/effect/blob/node/PulseAnimation() - return - /obj/effect/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) return diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index 03bb6164280..a435685eeb7 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -8,22 +8,11 @@ point_return = 15 var/resource_delay = 0 - -/obj/effect/blob/resource/PulseAnimation(activate = 0) - if(activate) - ..() - return - -/obj/effect/blob/resource/run_action() - +/obj/effect/blob/resource/Be_Pulsed() + . = ..() if(resource_delay > world.time) - return 0 - - PulseAnimation(1) - + return + flick("factory_glow", src) resource_delay = world.time + 45 // 4 and a half seconds - if(overmind) overmind.add_points(1) - return 0 - diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 2a0b8ea8575..dcf6c5747a9 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -90,11 +90,13 @@ return var/message_a = say_quote(message, get_spans()) - var/rendered = "Blob Telepathy, [name]([blob_reagent_datum.name]) [message_a]" + var/rendered = "\[Blob Telepathy\] [name]([blob_reagent_datum.name]) [message_a]" for(var/mob/M in mob_list) - if(isovermind(M) || isobserver(M) || istype(M, /mob/living/simple_animal/hostile/blob)) - M.show_message(rendered, 2) + if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob)) + M << rendered + if(isobserver(M)) + M << "(F) [rendered]" /mob/camera/blob/emote(act,m_type=1,message = null) return diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 5f92432b457..1b845d570c8 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -12,8 +12,7 @@ var/health = 30 var/maxhealth = 30 var/health_regen = 2 //how much health this blob regens when pulsed - var/health_timestamp = 0 //we got healed when? - var/pulse_timestamp = 0 //we got pulsed when? + var/pulse_timestamp = 0 //we got pulsed/healed when? var/brute_resist = 0.5 //multiplies brute damage by this var/fire_resist = 1 //multiplies burn damage by this var/atmosblock = 0 //if the blob blocks atmos and heat spread @@ -90,7 +89,6 @@ src.Be_Pulsed() if(claim_range) for(var/obj/effect/blob/B in ultra_range(claim_range, src, 1)) - B.update_icon() if(!B.overmind && !istype(B, /obj/effect/blob/core) && prob(30)) B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. B.update_icon() @@ -106,10 +104,9 @@ /obj/effect/blob/proc/Be_Pulsed() if(pulse_timestamp <= world.time) - PulseAnimation() ConsumeTile() - RegenHealth() - run_action() + health = min(maxhealth, health+health_regen) + update_icon() pulse_timestamp = world.time + 10 return 1 //we did it, we were pulsed! return 0 //oh no we failed @@ -118,21 +115,6 @@ for(var/atom/A in loc) A.blob_act() -/obj/effect/blob/proc/PulseAnimation() - flick("[icon_state]_glow", src) - return - -/obj/effect/blob/proc/RegenHealth() //when pulsed, heal! - if(health_timestamp <= world.time) - health = min(maxhealth, health+health_regen) - update_icon() - health_timestamp = world.time + 10 //1 second between heals - return 1 - return 0 - -/obj/effect/blob/proc/run_action() - return 0 - /obj/effect/blob/proc/expand(turf/T = null, prob = 1, controller = null) if(prob && !prob(health)) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 2506052b8f2..bd417180b6d 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -113,6 +113,9 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas /datum/game_mode/proc/forge_changeling_objectives(datum/mind/changeling, var/team_mode = 0) //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft". + //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting + //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone + var/escape_objective_possible = TRUE //if there's a team objective, check if it's compatible with escape objectives @@ -121,7 +124,63 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas escape_objective_possible = FALSE break - generate_objectives(changeling, 4, escape_objective_possible) + var/datum/objective/absorb/absorb_objective = new + absorb_objective.owner = changeling + absorb_objective.gen_amount_goal(6, 8) + changeling.objectives += absorb_objective + + if(prob(60)) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = changeling + steal_objective.find_target() + changeling.objectives += steal_objective + + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = changeling + destroy_objective.find_target() + changeling.objectives += destroy_objective + else + if(prob(70)) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = changeling + if(team_mode) //No backstabbing while in a team + kill_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + kill_objective.find_target() + changeling.objectives += kill_objective + else + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = changeling + if(team_mode) + maroon_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + maroon_objective.find_target() + changeling.objectives += maroon_objective + + if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible) + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + identity_theft.target = maroon_objective.target + identity_theft.update_explanation_text() + changeling.objectives += identity_theft + escape_objective_possible = FALSE + + if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible) + if(prob(50)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = changeling + changeling.objectives += escape_objective + else + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + if(team_mode) + identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + identity_theft.find_target() + changeling.objectives += identity_theft + escape_objective_possible = FALSE diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 97aa442b108..da36d8f6d96 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -157,10 +157,10 @@ var/mob/dead/observer/ghost = target.ghostize(0) user.mind.transfer_to(target) - if(ghost && ghost.mind) + if(ghost) ghost.mind.transfer_to(user) - else - user.key = ghost.key + if(ghost.key) + user.key = ghost.key user.Paralyse(2) target << "Our genes cry out as we swap our [user] form for [target]." diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 10e43124d7f..7166ef3eea8 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -20,9 +20,12 @@ user.say(message) else user.whisper(message) + var/my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]" for(var/mob/M in mob_list) - if(iscultist(M) || (M in dead_mob_list)) - M << "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]" + if(iscultist(M)) + M << my_message + if(M in dead_mob_list) + M << "(F) [my_message]" log_say("[user.real_name]/[user.key] : [message]") diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index bb84c466b3c..a1c9e0b5373 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -37,16 +37,17 @@ cult.large_shell_reference = null if(cult.eldergod) go_to_red = 0 - if(go_to_red) - priority_announce("The extra-dimensional flow has ceased. All personnel should return to their routine activities.","Central Command Higher Dimensions Affairs") - if(get_security_level() == "delta") - set_security_level("red") black_overlay = null if(timer_id) deltimer(timer_id) + if(go_to_red) + priority_announce("The extra-dimensional flow has ceased. All personnel should return to their routine activities.","Central Command Higher Dimensions Affairs") + if(get_security_level() == "delta") + set_security_level("red") SSshuttle.emergencyNoEscape = 0 - SSshuttle.emergency.mode = SHUTTLE_DOCKED - SSshuttle.emergency.timer = world.time + if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) + SSshuttle.emergency.mode = SHUTTLE_DOCKED + SSshuttle.emergency.timer = world.time ..() /obj/structure/constructshell/large/examine(mob/user) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 425a946adf8..a62e1726d33 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -461,8 +461,7 @@ continue //Dead mob, ghost abandoned else if(D.can_reenter_corpse) - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (This shouldn't appear.)\n" - continue //Lolwhat + continue //Adminghost, or cult/wizard ghost else msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n" continue //Ghosted while alive diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index 4ef55716810..bf856cce812 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -92,17 +92,16 @@ if(I != src) qdel(I) - var/success - if(target.stat != DEAD) - if(target.mind in ticker.mode.get_gangsters()) - if(ticker.mode.remove_gangster(target.mind,0,1)) - success = 1 //Was not a gang boss, convert as usual - else - success = 1 - - if(!target.mind) + if(!target.mind || target.stat == DEAD) return 0 + var/success + if(target.mind in ticker.mode.get_gangsters()) + if(ticker.mode.remove_gangster(target.mind,0,1)) + success = 1 //Was not a gang boss, convert as usual + else + success = 1 + if(ishuman(target)) if(!success) target.visible_message("[target] seems to resist the implant!", "You feel the influence of your enemies try to invade your mind!") diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 6dbe8cb927c..f5631779f09 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -358,7 +358,7 @@ if(ganger.current && (ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS)) ganger.current << ping for(var/mob/M in dead_mob_list) - M << ping + M << "(F) [ping]" log_game("[key_name(user)] Messaged [gang.name] Gang: [message].") diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 6b1041d2d2e..70cc7008be2 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -43,6 +43,10 @@ var/obj/machinery/doomsday_device/DOOM = new /obj/machinery/doomsday_device(src) doomsday_device = DOOM verbs -= /mob/living/silicon/ai/proc/nuke_station + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + for(var/mob/living/silicon/ai/A in ai_list) + if((A.stat != DEAD) && A.nuking) + point.the_disk = A //The pinpointer now tracks the AI core /obj/machinery/doomsday_device icon = 'icons/obj/machines/nuke_terminal.dmi' diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index a14280395e6..3d20fde2911 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -339,9 +339,9 @@ 2.Put the specimen on operating table
3.Apply surgical drapes preparing for dissection
4.Apply scalpel to specimen torso
- 5.Stop the bleeders and retract skin
- 6.Cut out organs you find with a scalpel
- 7.Use your hands to remove the remaining organs
+ 5.Retract skin from specimen's torso
+ 6.Apply scalpel to specimen's torso
+ 7.Search through the specimen's torso with your hands to remove any organs
8.Insert replacement gland (Retrieve one from gland storage)
9.Consider dressing the specimen back to not disturb the habitat
10.Put the specimen in the experiment machinery
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index da0a9add2ce..d317e8f25c9 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -34,6 +34,7 @@ icon = 'icons/mob/swarmer.dmi' desc = "A robot of unknown design, they seek only to consume materials and replicate themselves indefinitely." speak_emote = list("tones") + bubble_icon = "swarmer" health = 40 maxHealth = 40 status_flags = CANPUSH @@ -59,7 +60,6 @@ speed = 0 faction = list("swarmer") AIStatus = AI_OFF - projectiletype = /obj/item/projectile/beam/disabler pass_flags = PASSTABLE ventcrawler = 2 ranged = 1 @@ -290,7 +290,14 @@ var/turf/simulated/floor/F = random_location if(F.air) var/datum/gas_mixture/A = F.air - if(A.oxygen >= 16 && !A.toxins && A.carbon_dioxide < 10 && !A.trace_gases.len)//Can most things breathe in this location? + var/list/A_gases = A.gases + var/trace_gases + for(var/id in A_gases) + if(id in hardcoded_gases) + continue + trace_gases = TRUE + break + if((A_gases["o2"] && A_gases["o2"][MOLES] >= 16) && !A_gases["plasma"] && (!A_gases["co2"] || A_gases["co2"][MOLES] < 10) && !trace_gases)//Can most things breathe in this location? if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold var/pressure = A.return_pressure() if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums @@ -486,7 +493,7 @@ return src << "Attempting to repair damage to our body, stand by..." if(do_mob(src, src, 100)) - adjustBruteLoss(-100) + adjustHealth(-100) src << "We successfully repaired ourselves." /mob/living/simple_animal/hostile/swarmer/proc/ToggleLight() @@ -497,10 +504,13 @@ /mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers() var/message = input(src, "Announce to other swarmers", "Swarmer contact") + var/rendered = "Swarm communication - [src] states: [message]" if(message) for(var/mob/M in mob_list) - if(isswarmer(M) || (M in dead_mob_list)) - M << "Swarm communication - [src] states: [message]" + if(isswarmer(M)) + M << rendered + if(M in dead_mob_list) + M << "(F) [rendered]" diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index be09a38c2c1..f90b2b78bba 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -61,6 +61,13 @@ return 0 return 1 +/mob/living/simple_animal/hostile/morph/proc/eat(atom/movable/A) + if(A && A.loc != src) + visible_message("[src] swallows [A] whole!") + A.loc = src + return 1 + return 0 + /mob/living/simple_animal/hostile/morph/ShiftClickOn(atom/movable/A) if(morph_time <= world.time && !stat) if(A == src) @@ -151,16 +158,14 @@ var/mob/living/L = target if(L.stat == DEAD) if(do_after(src, 30, target = L)) - visible_message("[src] swallows [target] whole!") - L.loc = src - adjustBruteLoss(-50) + if(eat(L)) + adjustHealth(-50) return else if(istype(target,/obj/item)) // Eat items just to be annoying var/obj/item/I = target if(!I.anchored) if(do_after(src,20, target = I)) - visible_message("[src] swallows [target] whole!") - I.loc = src + eat(I) return target.attack_animal(src) diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index ed153281399..45b53e3f6f2 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -139,7 +139,7 @@ /mob/living/simple_animal/revenant/narsie_act() return //most humans will now be either bones or harvesters, but we're still un-alive. -/mob/living/simple_animal/revenant/adjustBruteLoss(amount) +/mob/living/simple_animal/revenant/adjustHealth(amount) if(!revealed) return essence = max(0, essence-amount) @@ -238,11 +238,12 @@ if(!message) return log_say("[key_name(src)] : [message]") + var/rendered = "[src] says, \"[message]\"" for(var/mob/M in mob_list) - if (istype(M, /mob/new_player)) - continue - if(istype(M, /mob/living/simple_animal/revenant) || M.stat == DEAD) - M << "[src] says, \"[message]\"" //Can commune with the dead + if(istype(M, /mob/living/simple_animal/revenant)) + M << rendered + if(isobserver(M)) + M << "(F) [rendered]" return diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 6049556edc0..e5675f6b183 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -40,7 +40,7 @@ U.hidden_uplink.uplink_owner= "[user.key]" U.hidden_uplink.uses = 280 U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Maybe we can have a special set of items for the challenge uplink eventually - config.shuttle_refuel_delay = min(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY) + config.shuttle_refuel_delay = max(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY) qdel(src) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index efafaf9b75b..ec3a854a258 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -12,8 +12,13 @@ var/obj/item/weapon/disk/nuclear/the_disk = null var/active = 0 +/obj/item/weapon/pinpointer/New() + ..() + pinpointer_list += src + /obj/item/weapon/pinpointer/Destroy() active = 0 + pinpointer_list -= src return ..() /obj/item/weapon/pinpointer/attack_self() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 073d828dc81..3490b4c750b 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -1,927 +1,838 @@ -/datum/objective - var/datum/mind/owner = null //Who owns the objective. - var/explanation_text = "Nothing" //What that person is supposed to do. - var/datum/mind/target = null //If they are focused on a particular person. - var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. - var/completed = 0 //currently only used for custom objectives. - var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory. - var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead. - var/required_role = null //If the objective can only be done by a certain role, such as absorb for changelings. - var/randomgen = 1 //Whether the objective can be generated randomly. - var/error_text = "" //Displayed to admins if the objective fails to initialize properly when editing or adding - -/proc/generate_objectives(var/datum/mind/M, var/objectives_made = 2, var/has_escape = TRUE) - var/list/objective_types = (typesof(/datum/objective/default) - /datum/objective/default) - var/list/escape_objective_types = (typesof(/datum/objective/escape_obj) - /datum/objective/escape_obj) - for(var/O in objective_types) // this is fucking hacky as shit but - var/datum/objective/obj = new O - if(M.special_role != obj.required_role && obj.required_role != null) - objective_types -= O - if(!obj.randomgen) - objective_types -= O - for(var/E in escape_objective_types) - var/datum/objective/obj = new E - if(M.special_role != obj.required_role && obj.required_role != null) - objective_types -= E - if(!obj.randomgen) - objective_types -= E - for(var/i = 1, i <= objectives_made, i++) - if(i == objectives_made && has_escape) - var/datum/objective/holder_obj = pick(escape_objective_types) - add_objective(M, holder_obj) - return - else - var/datum/objective/holder_obj = pick(objective_types) - objective_types -= holder_obj - var/datum/objective/O = new holder_obj - if(!O.martyr_compatible) - escape_objective_types -= list(/datum/objective/escape_obj/martyr) - add_objective(M, holder_obj) - - -/proc/add_objective(var/datum/mind/M, var/obj_path, var/announce_new_objectives = 0, var/replace_if_impossible = 1, var/admin=0) - var/datum/objective/objective = new obj_path() - objective.owner = M - M.objectives += objective - if(admin && check_rights(R_ADMIN)) - objective.find_target_admin() - else - objective.find_target() - - if(!objective.extra_prep()) - if(replace_if_impossible) - generate_objectives(objective.owner, 1, FALSE) // Generate another objective to replace this one. - objective.owner.objectives -= src - qdel(src) - return null - - objective.update_explanation_text() - if(announce_new_objectives) - if(M.special_role) - M.current << "You are the [M.special_role]." - var/obj_count = 1 - for(var/datum/objective/OBJ in M.objectives) - M.current << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - return objective - -/datum/objective/New(var/text) - if(text) - explanation_text = text - -/datum/objective/proc/check_completion() - return completed - -/datum/objective/proc/extra_prep() - return 1 - -/datum/objective/proc/is_unique_objective(possible_target) - for(var/datum/objective/O in owner.objectives) - if(istype(O, type) && O.get_target() == possible_target) - return 0 - return 1 - -/datum/objective/proc/get_target() - return target - -/datum/objective/proc/find_possible_targets() - var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target)) - possible_targets += possible_target - return possible_targets - -/datum/objective/proc/find_target() - var/list/possible_targets = find_possible_targets() - if(possible_targets.len > 0) - target = pick(possible_targets) - update_explanation_text() - return target - -/datum/objective/proc/find_target_admin() - target = input("Select target:", "Objective target") as null|anything in find_possible_targets() - return target - -/datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling" - for(var/datum/mind/possible_target in ticker.minds) - if((possible_target != owner) && ishuman(possible_target.current)) - var/is_role = 0 - if(role_type) - if(possible_target.special_role == role) - is_role++ - else - if(possible_target.assigned_role == role) - is_role++ - - if(invert) - if(is_role) - continue - target = possible_target - break - else if(is_role) - target = possible_target - break - - update_explanation_text() - -/datum/objective/proc/update_explanation_text() - //Default does nothing, override where needed - -/datum/objective/proc/give_special_equipment() - -// Default objectives are ones you can put on any antag type and they should be able to complete it. - -/datum/objective/default/assassinate - var/target_role_type=0 - dangerrating = 10 - martyr_compatible = 1 - -/datum/objective/default/assassinate/find_target_by_role(role, role_type=0, invert=0) - if(!invert) - target_role_type = role_type - ..() - return target - -/datum/objective/default/assassinate/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite - return 1 - return 0 - return 1 - -/datum/objective/default/assassinate/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - - -/datum/objective/mutiny - var/target_role_type=0 - martyr_compatible = 1 - -/datum/objective/mutiny/find_target_by_role(role, role_type=0,invert=0) - if(!invert) - target_role_type = role_type - ..() - return target - -/datum/objective/mutiny/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client) - return 1 - var/turf/T = get_turf(target.current) - if(T && (T.z > ZLEVEL_STATION) || target.current.client.is_afk()) //If they leave the station or go afk they count as dead for this - return 2 - return 0 - return 1 - -/datum/objective/mutiny/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Assassinate or exile [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - - - -/datum/objective/default/maroon - var/target_role_type=0 - dangerrating = 5 - martyr_compatible = 1 - -/datum/objective/default/maroon/find_target_by_role(role, role_type=0, invert=0) - if(!invert) - target_role_type = role_type - ..() - return target - -/datum/objective/default/maroon/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite - return 1 - if(target.current.onCentcom() || target.current.onSyndieBase()) - return 0 - return 1 - -/datum/objective/default/maroon/update_explanation_text() - if(target && target.current) - explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role : target.special_role], from escaping alive." - else - explanation_text = "Free Objective" - - - -/datum/objective/default/debrain//I want braaaainssss - var/target_role_type=0 - dangerrating = 20 - randomgen = 0 - -/datum/objective/default/debrain/find_target_by_role(role, role_type=0, invert=0) - if(!invert) - target_role_type = role_type - ..() - return target - -/datum/objective/default/debrain/check_completion() - if(!target)//If it's a free objective. - return 1 - if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. - return 0 - if( !target.current || !isbrain(target.current) ) - return 0 - var/atom/A = target.current - while(A.loc) //check to see if the brainmob is on our person - A = A.loc - if(A == owner.current) - return 1 - return 0 - -/datum/objective/default/debrain/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - - - -/datum/objective/default/protect//The opposite of killing a dude. - var/target_role_type=0 - dangerrating = 10 - martyr_compatible = 1 - -/datum/objective/default/protect/find_target_by_role(role, role_type=0, invert=0) - if(!invert) - target_role_type = role_type - ..() - return target - -/datum/objective/default/protect/check_completion() - if(!target) //If it's a free objective. - return 1 - if(target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) - return 0 - return 1 - return 0 - -/datum/objective/default/protect/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - - - -/datum/objective/escape_obj/hijack - explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." - dangerrating = 25 - martyr_compatible = 0 //Technically you won't get both anyway. - -/datum/objective/escape_obj/hijack/check_completion() - if(!owner.current || owner.current.stat) - return 0 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 - if(issilicon(owner.current)) - return 0 - - var/area/A = get_area(owner.current) - if(SSshuttle.emergency.areaInstance != A) - return 0 - - for(var/mob/living/player in player_list) - if(player.mind && player.mind != owner) - if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways - continue - if(get_area(player) == A) - if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) - return 0 - return 1 - -/datum/objective/hijackclone - explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape." - dangerrating = 25 - martyr_compatible = 0 - -/datum/objective/hijackclone/check_completion() - if(!owner.current) - return 0 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 - - var/area/A = SSshuttle.emergency.areaInstance - - for(var/mob/living/player in player_list) //Make sure nobody else is onboard - if(player.mind && player.mind != owner) - if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) - continue - if(get_area(player) == A) - if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) - return 0 - - for(var/mob/living/player in player_list) //Make sure at least one of you is onboard - if(player.mind && player.mind != owner) - if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) - continue - if(get_area(player) == A) - if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) - return 1 - return 0 - -/datum/objective/escape_obj/block - explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." - dangerrating = 25 - martyr_compatible = 1 - randomgen = 0 - -/datum/objective/escape_obj/block/check_completion() - if(!istype(owner.current, /mob/living/silicon)) - return 0 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 1 - - var/area/A = SSshuttle.emergency.areaInstance - - for(var/mob/living/player in player_list) - if(istype(player, /mob/living/silicon)) - continue - if(player.mind) - if(player.stat != DEAD) - if(get_area(player) == A) - return 0 - - return 1 - - -/datum/objective/escape_obj/escape - explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." - dangerrating = 5 - -/datum/objective/escape_obj/escape/check_completion() - if(issilicon(owner.current)) - return 0 - if(isbrain(owner.current)) - return 0 - if(!owner.current || owner.current.stat == DEAD) - return 0 - if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith - return 1 - if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win - return 1 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 - var/turf/location = get_turf(owner.current) - if(!location) - return 0 - - if(istype(location, /turf/simulated/floor/plasteel/shuttle/red)) // Fails traitors if they are in the shuttle brig -- Polymorph - return 0 - - if(location.onCentcom() || location.onSyndieBase()) - return 1 - - return 0 - -/datum/objective/escape_obj/escape/escape_with_identity - dangerrating = 10 - var/target_real_name // Has to be stored because the target's real_name can change over the course of the round - var/target_missing_id - required_role = "changeling" - -/datum/objective/escape_obj/escape/escape_with_identity/find_target() - target = ..() - update_explanation_text() - -/datum/objective/escape_obj/escape/escape_with_identity/update_explanation_text() - if(target && target.current) - target_real_name = target.current.real_name - explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role]" - var/mob/living/carbon/human/H - if(ishuman(target.current)) - H = target.current - if(H && H.get_id_name() != target_real_name) - target_missing_id = 1 - else - explanation_text += " while wearing their identification card" - explanation_text += "." //Proper punctuation is important! - - else - explanation_text = "Free Objective." - -/datum/objective/escape_obj/escape/escape_with_identity/check_completion() - if(!target_real_name) - return 1 - if(!ishuman(owner.current)) - return 0 - var/mob/living/carbon/human/H = owner.current - if(..()) - if(H.dna.real_name == target_real_name) - if(H.get_id_name()== target_real_name || target_missing_id) - return 1 - return 0 - - -/datum/objective/escape_obj/survive - explanation_text = "Stay alive until the end." - dangerrating = 3 - -/datum/objective/survive/check_completion() - if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) - return 0 //Brains no longer win survive objectives. --NEO - if(!is_special_character(owner.current)) //This fails borg'd traitors - return 0 - return 1 - - -/datum/objective/escape_obj/martyr - explanation_text = "Die a glorious death." - dangerrating = 1 - -/datum/objective/escape_obj/martyr/check_completion() - if(!owner.current) //Gibbed, etc. - return 1 - if(owner.current && owner.current.stat == DEAD) //You're dead! Yay! - return 1 - return 0 - - -/datum/objective/nuclear - explanation_text = "Destroy the station with a nuclear device." - martyr_compatible = 1 - -/datum/objective/nuclear/check_completion() - if(ticker && ticker.mode && ticker.mode.station_was_nuked) - return 1 - return 0 - -var/global/list/possible_items = list() -/datum/objective/default/steal - var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later. - var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums). - dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives. - martyr_compatible = 0 - -/datum/objective/default/steal/get_target() - return steal_target - -/datum/objective/default/steal/New() - ..() - if(!possible_items.len)//Only need to fill the list when it's needed. - init_subtypes(/datum/objective_item/steal,possible_items) - -/datum/objective/default/steal/find_possible_targets() - var/list/approved_targets = list() - if(check_rights(R_ADMIN)) - approved_targets += select_target() - else - for(var/datum/objective_item/possible_item in possible_items) - if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob)) - approved_targets += possible_item - return approved_targets - -/datum/objective/default/steal/find_target() - return set_target(safepick(find_possible_targets())) - -/datum/objective/default/steal/proc/set_target(datum/objective_item/item) - if(item) - targetinfo = item - - steal_target = targetinfo.targetitem - explanation_text = "Steal [targetinfo.name]." - dangerrating = targetinfo.difficulty - give_special_equipment() - return steal_target - else - explanation_text = "Free objective" - return - -/datum/objective/default/steal/proc/select_target() //For admins setting objectives manually. - var/list/possible_items_all = possible_items+"custom" - var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all - if (!new_target) - return - - if (new_target == "custom") //Can set custom items. - var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) - if (!custom_target) - return - var/custom_name = initial(custom_target.name) - custom_name = stripped_input("Enter target name:", "Objective target", custom_name) - if (!custom_name) - return - steal_target = custom_target - explanation_text = "Steal [custom_name]." - - return steal_target - -/datum/objective/default/steal/check_completion() - if(!steal_target) - return 1 - if(!isliving(owner.current)) - return 0 - var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. - - for(var/obj/I in all_items) //Check for items - if(istype(I, steal_target)) - if(!targetinfo) //If there's no targetinfo, then that means it was a custom objective. At this point, we know you have the item, so return 1. - return 1 - else if(targetinfo.check_special_completion(I))//Returns 1 by default. Items with special checks will return 1 if the conditions are fulfilled. - return 1 - - if(targetinfo && I.type in targetinfo.altitems) //Ok, so you don't have the item. Do you have an alternative, at least? - if(targetinfo.check_special_completion(I))//Yeah, we do! Don't return 0 if we don't though - then you could fail if you had 1 item that didn't pass and got checked first! - return 1 - return 0 - -/datum/objective/default/steal/give_special_equipment() - if(owner && owner.current && targetinfo) - if(istype(owner.current, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = owner.current - var/list/slots = list ("backpack" = slot_in_backpack) - for(var/eq_path in targetinfo.special_equipment) - var/obj/O = new eq_path - H.equip_in_one_of_slots(O, slots) - H.update_icons() - -var/global/list/possible_items_special = list() -/datum/objective/default/steal/special //ninjas are so special they get their own subtype good for them - randomgen = 0 -/datum/objective/default/steal/special/New() - ..() - if(!possible_items_special.len) - init_subtypes(/datum/objective_item/special,possible_items) - init_subtypes(/datum/objective_item/stack,possible_items) - -/datum/objective/default/steal/special/find_target() - return set_target(pick(possible_items_special)) - - - -/datum/objective/default/steal/exchange - dangerrating = 10 - martyr_compatible = 0 - randomgen = 0 - -/datum/objective/default/steal/exchange/proc/set_faction(faction,otheragent) - target = otheragent - if(faction == "red") - targetinfo = new/datum/objective_item/unique/docs_blue - else if(faction == "blue") - targetinfo = new/datum/objective_item/unique/docs_red - explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent" - steal_target = targetinfo.targetitem - - -/datum/objective/default/steal/exchange/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent" - else - explanation_text = "Free Objective" - - -/datum/objective/default/steal/exchange/backstab - dangerrating = 3 - randomgen = 0 - -/datum/objective/default/steal/exchange/backstab/set_faction(faction) - if(faction == "red") - targetinfo = new/datum/objective_item/unique/docs_red - else if(faction == "blue") - targetinfo = new/datum/objective_item/unique/docs_blue - explanation_text = "Do not give up or lose [targetinfo.name]." - steal_target = targetinfo.targetitem - - -/datum/objective/download - dangerrating = 10 - -/datum/objective/download/proc/gen_amount_goal() - target_amount = rand(10,20) - explanation_text = "Download [target_amount] research level\s." - return target_amount - -/datum/objective/download/check_completion()//NINJACODE - if(!ishuman(owner.current)) - return 0 - - var/mob/living/carbon/human/H = owner.current - if(!H || H.stat == DEAD) - return 0 - - if(!istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) - return 0 - - var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit - if(!SN.s_initialized) - return 0 - - var/current_amount - if(!SN.stored_research.len) - return 0 - else - for(var/datum/tech/current_data in SN.stored_research) - if(current_data.level) - current_amount += (current_data.level-1) - if(current_amount= target_amount)) - return 1 - else - return 0 - - - -/datum/objective/default/destroy - dangerrating = 10 - martyr_compatible = 1 - error_text = "No active AIs with minds." - -/datum/objective/default/destroy/find_target() - var/list/possible_targets = active_ais(1) - var/mob/living/silicon/ai/target_ai = pick(possible_targets) - target = target_ai.mind - update_explanation_text() - return target - -/datum/objective/default/destroy/check_completion() - if(target && target.current) - if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite - return 1 - return 0 - return 1 - -/datum/objective/default/destroy/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Destroy [target.name], the experimental AI." - else - explanation_text = "Free Objective" - -/datum/objective/default/destroy/extra_prep() - if(!target) - return 0 - return 1 - -/datum/objective/summon_guns - explanation_text = "Steal at least five guns!" - -/datum/objective/summon_guns/check_completion() - if(!isliving(owner.current)) return 0 - var/guncount = 0 - var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. - for(var/obj/I in all_items) //Check for guns - if(istype(I, /obj/item/weapon/gun)) - guncount++ - if(guncount >= 5) - return 1 - else - return 0 - return 0 - - - -//////////////////////////////// -// Changeling team objectives // -//////////////////////////////// - -/datum/objective/changeling_team_objective //Abstract type - martyr_compatible = 0 //Suicide is not teamwork! - explanation_text = "Changeling Friendship!" - var/min_lings = 3 //Minimum amount of lings for this team objective to be possible - var/escape_objective_compatible = FALSE - - -//Impersonate department -//Picks as many people as it can from a department (Security,Engineer,Medical,Science) -//and tasks the lings with killing and replacing them -/datum/objective/changeling_team_objective/impersonate_department - explanation_text = "Ensure X derpartment are killed, impersonated, and replaced by Changelings" - var/command_staff_only = FALSE //if this is true, it picks command staff instead - var/list/department_minds = list() - var/list/department_real_names = list() - var/department_string = "" - - -/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff() - department_minds = list() - department_real_names = list() - - var/list/departments = list("Head of Security","Research Director","Chief Engineer","Chief Medical Officer") - var/department_head = pick(departments) - switch(department_head) - if("Head of Security") - department_string = "security" - if("Research Director") - department_string = "science" - if("Chief Engineer") - department_string = "engineering" - if("Chief Medical Officer") - department_string = "medical" - - var/ling_count = ticker.mode.changelings - - for(var/datum/mind/M in ticker.minds) - if(M in ticker.mode.changelings) - continue - if(department_head in get_department_heads(M.assigned_role)) - if(ling_count) - ling_count-- - department_minds += M - department_real_names += M.current.real_name - else - break - - if(!department_minds.len) - log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally") - owner.objectives -= src - qdel(src) - return - - -/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads() - department_minds = list() - department_real_names = list() - - //Needed heads is between min_lings and the maximum possible amount of command roles - //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are - //Because you can't fill 6 head roles with 3 lings - - var/needed_heads = rand(min_lings,command_positions.len) - needed_heads = min(ticker.mode.changelings.len,needed_heads) - - var/list/heads = ticker.mode.get_living_heads() - for(var/datum/mind/head in heads) - if(head in ticker.mode.changelings) //Looking at you HoP. - continue - if(needed_heads) - department_minds += head - department_real_names += head.current.real_name - needed_heads-- - else - break - - if(!department_minds.len) - log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally") - owner.objectives -= src - qdel(src) - return - - -/datum/objective/changeling_team_objective/impersonate_department/New(var/text) - ..() - if(command_staff_only) - get_heads() - else - get_department_staff() - - update_explanation_text() - - -/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text() - ..() - if(!department_real_names.len || !department_minds.len) - explanation_text = "Free Objective" - return //Something fucked up, give them a win - - if(command_staff_only) - explanation_text = "Ensure changelings impersonate and escape as the following heads of staff: " - else - explanation_text = "Ensure changelings impersonate and escape as the following members of \the [department_string] department: " - - var/first = 1 - for(var/datum/mind/M in department_minds) - var/string = "[M.name] the [M.assigned_role]" - if(!first) - string = ", [M.name] the [M.assigned_role]" - else - first-- - explanation_text += string - - if(command_staff_only) - explanation_text += ", while the real heads are dead. This is a team objective." - else - explanation_text += ", while the real members are dead. This is a team objective." - - -/datum/objective/changeling_team_objective/impersonate_department/check_completion() - if(!department_real_names.len || !department_minds.len) - return 1 //Something fucked up, give them a win - - var/list/check_names = department_real_names.Copy() - - //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail - for(var/datum/mind/M in department_minds) - if(M in ticker.mode.changelings) //Lings aren't picked for this, but let's be safe - continue - - if(M.current) - var/turf/mloc = get_turf(M.current) - if(mloc.onCentcom() && (M.current.stat != DEAD)) - return 0 //A Non-ling living target got to centcomm, fail - - //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names - var/success = 0 - changelings: - for(var/datum/mind/changeling in ticker.mode.changelings) - if(success >= department_minds.len) //We did it, stop here! - return 1 - if(ishuman(changeling.current)) - var/mob/living/carbon/human/H = changeling.current - var/turf/cloc = get_turf(changeling.current) - if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm.... - for(var/name in check_names) //Is he (disguised as) one of the staff? - if(H.dna.real_name == name) - check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer - success++ //A living changeling staff member made it to centcomm - continue changelings - - if(success >= department_minds.len) - return 1 - return 0 - - - - -//A subtype of impersonate_derpartment -//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD) -//and tasks the lings with killing and replacing them -/datum/objective/changeling_team_objective/impersonate_department/impersonate_heads - explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead" - command_staff_only = TRUE - -/datum/objective/custom - explanation_text = "Free Objective" \ No newline at end of file +/datum/objective + var/datum/mind/owner = null //Who owns the objective. + var/explanation_text = "Nothing" //What that person is supposed to do. + var/datum/mind/target = null //If they are focused on a particular person. + var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. + var/completed = 0 //currently only used for custom objectives. + var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory. + var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead. + +/datum/objective/New(var/text) + if(text) + explanation_text = text + +/datum/objective/proc/check_completion() + return completed + +/datum/objective/proc/is_unique_objective(possible_target) + for(var/datum/objective/O in owner.objectives) + if(istype(O, type) && O.get_target() == possible_target) + return 0 + return 1 + +/datum/objective/proc/get_target() + return target + +/datum/objective/proc/find_target() + var/list/possible_targets = list() + for(var/datum/mind/possible_target in ticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target)) + possible_targets += possible_target + if(possible_targets.len > 0) + target = pick(possible_targets) + update_explanation_text() + return target + +/datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling" + for(var/datum/mind/possible_target in ticker.minds) + if((possible_target != owner) && ishuman(possible_target.current)) + var/is_role = 0 + if(role_type) + if(possible_target.special_role == role) + is_role++ + else + if(possible_target.assigned_role == role) + is_role++ + + if(invert) + if(is_role) + continue + target = possible_target + break + else if(is_role) + target = possible_target + break + + update_explanation_text() + +/datum/objective/proc/update_explanation_text() + //Default does nothing, override where needed + +/datum/objective/proc/give_special_equipment() + +/datum/objective/assassinate + var/target_role_type=0 + dangerrating = 10 + martyr_compatible = 1 + +/datum/objective/assassinate/find_target_by_role(role, role_type=0, invert=0) + if(!invert) + target_role_type = role_type + ..() + return target + +/datum/objective/assassinate/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite + return 1 + return 0 + return 1 + +/datum/objective/assassinate/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + + +/datum/objective/mutiny + var/target_role_type=0 + martyr_compatible = 1 + +/datum/objective/mutiny/find_target_by_role(role, role_type=0,invert=0) + if(!invert) + target_role_type = role_type + ..() + return target + +/datum/objective/mutiny/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client) + return 1 + var/turf/T = get_turf(target.current) + if(T && (T.z > ZLEVEL_STATION) || target.current.client.is_afk()) //If they leave the station or go afk they count as dead for this + return 2 + return 0 + return 1 + +/datum/objective/mutiny/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Assassinate or exile [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + + + +/datum/objective/maroon + var/target_role_type=0 + dangerrating = 5 + martyr_compatible = 1 + +/datum/objective/maroon/find_target_by_role(role, role_type=0, invert=0) + if(!invert) + target_role_type = role_type + ..() + return target + +/datum/objective/maroon/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite + return 1 + if(target.current.onCentcom() || target.current.onSyndieBase()) + return 0 + return 1 + +/datum/objective/maroon/update_explanation_text() + if(target && target.current) + explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role : target.special_role], from escaping alive." + else + explanation_text = "Free Objective" + + + +/datum/objective/debrain//I want braaaainssss + var/target_role_type=0 + dangerrating = 20 + +/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0) + if(!invert) + target_role_type = role_type + ..() + return target + +/datum/objective/debrain/check_completion() + if(!target)//If it's a free objective. + return 1 + if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. + return 0 + if( !target.current || !isbrain(target.current) ) + return 0 + var/atom/A = target.current + while(A.loc) //check to see if the brainmob is on our person + A = A.loc + if(A == owner.current) + return 1 + return 0 + +/datum/objective/debrain/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + + + +/datum/objective/protect//The opposite of killing a dude. + var/target_role_type=0 + dangerrating = 10 + martyr_compatible = 1 + +/datum/objective/protect/find_target_by_role(role, role_type=0, invert=0) + if(!invert) + target_role_type = role_type + ..() + return target + +/datum/objective/protect/check_completion() + if(!target) //If it's a free objective. + return 1 + if(target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) + return 0 + return 1 + return 0 + +/datum/objective/protect/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + + + +/datum/objective/hijack + explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." + dangerrating = 25 + martyr_compatible = 0 //Technically you won't get both anyway. + +/datum/objective/hijack/check_completion() + if(!owner.current || owner.current.stat) + return 0 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 + if(issilicon(owner.current)) + return 0 + + var/area/A = get_area(owner.current) + if(SSshuttle.emergency.areaInstance != A) + return 0 + + for(var/mob/living/player in player_list) + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways + continue + if(get_area(player) == A) + if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) + return 0 + return 1 + +/datum/objective/hijackclone + explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape." + dangerrating = 25 + martyr_compatible = 0 + +/datum/objective/hijackclone/check_completion() + if(!owner.current) + return 0 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 + + var/area/A = SSshuttle.emergency.areaInstance + + for(var/mob/living/player in player_list) //Make sure nobody else is onboard + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + if(istype(player, /mob/living/silicon)) + continue + if(get_area(player) == A) + if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) + return 0 + + for(var/mob/living/player in player_list) //Make sure at least one of you is onboard + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + if(istype(player, /mob/living/silicon)) + continue + if(get_area(player) == A) + if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) + return 1 + return 0 + +/datum/objective/block + explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." + dangerrating = 25 + martyr_compatible = 1 + +/datum/objective/block/check_completion() + if(!istype(owner.current, /mob/living/silicon)) + return 0 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 1 + + var/area/A = SSshuttle.emergency.areaInstance + + for(var/mob/living/player in player_list) + if(istype(player, /mob/living/silicon)) + continue + if(player.mind) + if(player.stat != DEAD) + if(get_area(player) == A) + return 0 + + return 1 + + +/datum/objective/escape + explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." + dangerrating = 5 + +/datum/objective/escape/check_completion() + if(issilicon(owner.current)) + return 0 + if(isbrain(owner.current)) + return 0 + if(!owner.current || owner.current.stat == DEAD) + return 0 + if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith + return 1 + if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win + return 1 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 + var/turf/location = get_turf(owner.current) + if(!location) + return 0 + + if(istype(location, /turf/simulated/floor/plasteel/shuttle/red)) // Fails traitors if they are in the shuttle brig -- Polymorph + return 0 + + if(location.onCentcom() || location.onSyndieBase()) + return 1 + + return 0 + +/datum/objective/escape/escape_with_identity + dangerrating = 10 + var/target_real_name // Has to be stored because the target's real_name can change over the course of the round + var/target_missing_id + +/datum/objective/escape/escape_with_identity/find_target() + target = ..() + update_explanation_text() + +/datum/objective/escape/escape_with_identity/update_explanation_text() + if(target && target.current) + target_real_name = target.current.real_name + explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role]" + var/mob/living/carbon/human/H + if(ishuman(target.current)) + H = target.current + if(H && H.get_id_name() != target_real_name) + target_missing_id = 1 + else + explanation_text += " while wearing their identification card" + explanation_text += "." //Proper punctuation is important! + + else + explanation_text = "Free Objective." + +/datum/objective/escape/escape_with_identity/check_completion() + if(!target_real_name) + return 1 + if(!ishuman(owner.current)) + return 0 + var/mob/living/carbon/human/H = owner.current + if(..()) + if(H.dna.real_name == target_real_name) + if(H.get_id_name()== target_real_name || target_missing_id) + return 1 + return 0 + + +/datum/objective/survive + explanation_text = "Stay alive until the end." + dangerrating = 3 + +/datum/objective/survive/check_completion() + if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) + return 0 //Brains no longer win survive objectives. --NEO + if(!is_special_character(owner.current)) //This fails borg'd traitors + return 0 + return 1 + + +/datum/objective/martyr + explanation_text = "Die a glorious death." + dangerrating = 1 + +/datum/objective/martyr/check_completion() + if(!owner.current) //Gibbed, etc. + return 1 + if(owner.current && owner.current.stat == DEAD) //You're dead! Yay! + return 1 + return 0 + + +/datum/objective/nuclear + explanation_text = "Destroy the station with a nuclear device." + martyr_compatible = 1 + +/datum/objective/nuclear/check_completion() + if(ticker && ticker.mode && ticker.mode.station_was_nuked) + return 1 + return 0 + + +var/global/list/possible_items = list() +/datum/objective/steal + var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later. + var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums). + dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives. + martyr_compatible = 0 + +/datum/objective/steal/get_target() + return steal_target + +/datum/objective/steal/New() + ..() + if(!possible_items.len)//Only need to fill the list when it's needed. + init_subtypes(/datum/objective_item/steal,possible_items) + +/datum/objective/steal/find_target() + var/approved_targets = list() + for(var/datum/objective_item/possible_item in possible_items) + if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob)) + approved_targets += possible_item + return set_target(safepick(approved_targets)) + +/datum/objective/steal/proc/set_target(datum/objective_item/item) + if(item) + targetinfo = item + + steal_target = targetinfo.targetitem + explanation_text = "Steal [targetinfo.name]." + dangerrating = targetinfo.difficulty + give_special_equipment() + return steal_target + else + explanation_text = "Free objective" + return + +/datum/objective/steal/proc/select_target() //For admins setting objectives manually. + var/list/possible_items_all = possible_items+"custom" + var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all + if (!new_target) return + + if (new_target == "custom") //Can set custom items. + var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) + if (!custom_target) return + var/tmp_obj = new custom_target + var/custom_name = tmp_obj:name + qdel(tmp_obj) + custom_name = stripped_input("Enter target name:", "Objective target", custom_name) + if (!custom_name) return + steal_target = custom_target + explanation_text = "Steal [custom_name]." + + else + set_target(new_target) + return steal_target + +/datum/objective/steal/check_completion() + if(!steal_target) return 1 + if(!isliving(owner.current)) return 0 + var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. + + for(var/obj/I in all_items) //Check for items + if(istype(I, steal_target)) + if(!targetinfo) //If there's no targetinfo, then that means it was a custom objective. At this point, we know you have the item, so return 1. + return 1 + else if(targetinfo.check_special_completion(I))//Returns 1 by default. Items with special checks will return 1 if the conditions are fulfilled. + return 1 + + if(targetinfo && I.type in targetinfo.altitems) //Ok, so you don't have the item. Do you have an alternative, at least? + if(targetinfo.check_special_completion(I))//Yeah, we do! Don't return 0 if we don't though - then you could fail if you had 1 item that didn't pass and got checked first! + return 1 + return 0 + +/datum/objective/steal/give_special_equipment() + if(owner && owner.current && targetinfo) + if(istype(owner.current, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + var/list/slots = list ("backpack" = slot_in_backpack) + for(var/eq_path in targetinfo.special_equipment) + var/obj/O = new eq_path + H.equip_in_one_of_slots(O, slots) + H.update_icons() + +var/global/list/possible_items_special = list() +/datum/objective/steal/special //ninjas are so special they get their own subtype good for them + +/datum/objective/steal/special/New() + ..() + if(!possible_items_special.len) + init_subtypes(/datum/objective_item/special,possible_items) + init_subtypes(/datum/objective_item/stack,possible_items) + +/datum/objective/steal/special/find_target() + return set_target(pick(possible_items_special)) + + + +/datum/objective/steal/exchange + dangerrating = 10 + martyr_compatible = 0 + +/datum/objective/steal/exchange/proc/set_faction(faction,otheragent) + target = otheragent + if(faction == "red") + targetinfo = new/datum/objective_item/unique/docs_blue + else if(faction == "blue") + targetinfo = new/datum/objective_item/unique/docs_red + explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent" + steal_target = targetinfo.targetitem + + +/datum/objective/steal/exchange/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent" + else + explanation_text = "Free Objective" + + +/datum/objective/steal/exchange/backstab + dangerrating = 3 + +/datum/objective/steal/exchange/backstab/set_faction(faction) + if(faction == "red") + targetinfo = new/datum/objective_item/unique/docs_red + else if(faction == "blue") + targetinfo = new/datum/objective_item/unique/docs_blue + explanation_text = "Do not give up or lose [targetinfo.name]." + steal_target = targetinfo.targetitem + + +/datum/objective/download + dangerrating = 10 + +/datum/objective/download/proc/gen_amount_goal() + target_amount = rand(10,20) + explanation_text = "Download [target_amount] research level\s." + return target_amount + +/datum/objective/download/check_completion()//NINJACODE + if(!ishuman(owner.current)) + return 0 + + var/mob/living/carbon/human/H = owner.current + if(!H || H.stat == DEAD) + return 0 + + if(!istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) + return 0 + + var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit + if(!SN.s_initialized) + return 0 + + var/current_amount + if(!SN.stored_research.len) + return 0 + else + for(var/datum/tech/current_data in SN.stored_research) + if(current_data.level) + current_amount += (current_data.level-1) + if(current_amount= target_amount)) + return 1 + else + return 0 + + + +/datum/objective/destroy + dangerrating = 10 + martyr_compatible = 1 + +/datum/objective/destroy/find_target() + var/list/possible_targets = active_ais(1) + var/mob/living/silicon/ai/target_ai = pick(possible_targets) + target = target_ai.mind + update_explanation_text() + return target + +/datum/objective/destroy/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite + return 1 + return 0 + return 1 + +/datum/objective/destroy/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Destroy [target.name], the experimental AI." + else + explanation_text = "Free Objective" + +/datum/objective/summon_guns + explanation_text = "Steal at least five guns!" + +/datum/objective/summon_guns/check_completion() + if(!isliving(owner.current)) return 0 + var/guncount = 0 + var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. + for(var/obj/I in all_items) //Check for guns + if(istype(I, /obj/item/weapon/gun)) + guncount++ + if(guncount >= 5) + return 1 + else + return 0 + return 0 + + + +//////////////////////////////// +// Changeling team objectives // +//////////////////////////////// + +/datum/objective/changeling_team_objective //Abstract type + martyr_compatible = 0 //Suicide is not teamwork! + explanation_text = "Changeling Friendship!" + var/min_lings = 3 //Minimum amount of lings for this team objective to be possible + var/escape_objective_compatible = FALSE + + +//Impersonate department +//Picks as many people as it can from a department (Security,Engineer,Medical,Science) +//and tasks the lings with killing and replacing them +/datum/objective/changeling_team_objective/impersonate_department + explanation_text = "Ensure X derpartment are killed, impersonated, and replaced by Changelings" + var/command_staff_only = FALSE //if this is true, it picks command staff instead + var/list/department_minds = list() + var/list/department_real_names = list() + var/department_string = "" + + +/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff() + department_minds = list() + department_real_names = list() + + var/list/departments = list("Head of Security","Research Director","Chief Engineer","Chief Medical Officer") + var/department_head = pick(departments) + switch(department_head) + if("Head of Security") + department_string = "security" + if("Research Director") + department_string = "science" + if("Chief Engineer") + department_string = "engineering" + if("Chief Medical Officer") + department_string = "medical" + + var/ling_count = ticker.mode.changelings + + for(var/datum/mind/M in ticker.minds) + if(M in ticker.mode.changelings) + continue + if(department_head in get_department_heads(M.assigned_role)) + if(ling_count) + ling_count-- + department_minds += M + department_real_names += M.current.real_name + else + break + + if(!department_minds.len) + log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally") + owner.objectives -= src + qdel(src) + return + + +/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads() + department_minds = list() + department_real_names = list() + + //Needed heads is between min_lings and the maximum possible amount of command roles + //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are + //Because you can't fill 6 head roles with 3 lings + + var/needed_heads = rand(min_lings,command_positions.len) + needed_heads = min(ticker.mode.changelings.len,needed_heads) + + var/list/heads = ticker.mode.get_living_heads() + for(var/datum/mind/head in heads) + if(head in ticker.mode.changelings) //Looking at you HoP. + continue + if(needed_heads) + department_minds += head + department_real_names += head.current.real_name + needed_heads-- + else + break + + if(!department_minds.len) + log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally") + owner.objectives -= src + qdel(src) + return + + +/datum/objective/changeling_team_objective/impersonate_department/New(var/text) + ..() + if(command_staff_only) + get_heads() + else + get_department_staff() + + update_explanation_text() + + +/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text() + ..() + if(!department_real_names.len || !department_minds.len) + explanation_text = "Free Objective" + return //Something fucked up, give them a win + + if(command_staff_only) + explanation_text = "Ensure changelings impersonate and escape as the following heads of staff: " + else + explanation_text = "Ensure changelings impersonate and escape as the following members of \the [department_string] department: " + + var/first = 1 + for(var/datum/mind/M in department_minds) + var/string = "[M.name] the [M.assigned_role]" + if(!first) + string = ", [M.name] the [M.assigned_role]" + else + first-- + explanation_text += string + + if(command_staff_only) + explanation_text += ", while the real heads are dead. This is a team objective." + else + explanation_text += ", while the real members are dead. This is a team objective." + + +/datum/objective/changeling_team_objective/impersonate_department/check_completion() + if(!department_real_names.len || !department_minds.len) + return 1 //Something fucked up, give them a win + + var/list/check_names = department_real_names.Copy() + + //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail + for(var/datum/mind/M in department_minds) + if(M in ticker.mode.changelings) //Lings aren't picked for this, but let's be safe + continue + + if(M.current) + var/turf/mloc = get_turf(M.current) + if(mloc.onCentcom() && (M.current.stat != DEAD)) + return 0 //A Non-ling living target got to centcomm, fail + + //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names + var/success = 0 + changelings: + for(var/datum/mind/changeling in ticker.mode.changelings) + if(success >= department_minds.len) //We did it, stop here! + return 1 + if(ishuman(changeling.current)) + var/mob/living/carbon/human/H = changeling.current + var/turf/cloc = get_turf(changeling.current) + if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm.... + for(var/name in check_names) //Is he (disguised as) one of the staff? + if(H.dna.real_name == name) + check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer + success++ //A living changeling staff member made it to centcomm + continue changelings + + if(success >= department_minds.len) + return 1 + return 0 + + + + +//A subtype of impersonate_derpartment +//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD) +//and tasks the lings with killing and replacing them +/datum/objective/changeling_team_objective/impersonate_department/impersonate_heads + explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead" + command_staff_only = TRUE + + + diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 9f1c99cea84..c3121978a60 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -94,7 +94,7 @@ /datum/objective_item/steal/plasma/check_special_completion(obj/item/weapon/tank/T) var/target_amount = text2num(name) var/found_amount = 0 - found_amount += T.air_contents.toxins + found_amount += T.air_contents.gases["plasma"][MOLES] return found_amount>=target_amount diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 73ab2b3423c..4cd032c07fd 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -84,7 +84,7 @@ var/hsboxspawn = 1 hsbinfo += "- Spawn Plasma Canister
" hsbinfo += "- Spawn CO2 Canister
" hsbinfo += "- Spawn Nitrogen Canister
" - hsbinfo += "- Spawn N2O Canister
" + hsbinfo += "- Spawn N2O Canister
" else hsbinfo += "Some item spawning may be disabled by the administrators.
" hsbinfo += "Only administrators may spawn dangerous canisters.
" diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 9d9457f7d7b..10ccb88d386 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -270,9 +270,13 @@ var/text = stripped_input(user, "What do you want to say your thralls and fellow shadowlings?.", "Hive Chat", "") if(!text) return + var/my_message = "\[Shadowling\] [user.real_name]: [text]" for(var/mob/M in mob_list) - if(is_shadow_or_thrall(M) || (M in dead_mob_list)) - M << "\[Shadowling\] [user.real_name]: [text]" + if(is_shadow_or_thrall(M)) + M << my_message + if(M in dead_mob_list) + M << "(F) [my_message]" + /obj/effect/proc_holder/spell/self/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor @@ -746,9 +750,12 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell var/text = stripped_input(user, "What do you want to say your masters and fellow thralls?.", "Lesser Commune", "") if(!text) return + text = "\[Thrall\] [user.real_name]: [text]" for(var/mob/M in mob_list) - if(is_shadow_or_thrall(M) || (M in dead_mob_list)) - M << "\[Thrall\] [user.real_name]: [text]" + if(is_shadow_or_thrall(M)) + M << text + if(isobserver(M)) + M << "(F) [text]" log_say("[user.real_name]/[user.key] : [text]") @@ -887,8 +894,10 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell var/text = stripped_input(user, "What do you want to say to fellow thralls and shadowlings?.", "Hive Chat", "") if(!text) return - text = "[text]" + text = "\[Ascendant\] [user.real_name]: [text]" for(var/mob/M in mob_list) - if(is_shadow_or_thrall(M) || (M in dead_mob_list)) - M << "\[Ascendant\] [user.real_name]: [text]" //Bigger text for ascendants. + if(is_shadow_or_thrall(M)) + M << text + if(isobserver(M)) + M << "(F) [text]" log_say("[user.real_name]/[user.key] : [text]") diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm index 76bcc67c856..af284603f6a 100644 --- a/code/game/gamemodes/traitor/double_agents.dm +++ b/code/game/gamemodes/traitor/double_agents.dm @@ -32,19 +32,27 @@ // Assassinate var/datum/mind/target_mind = target_list[traitor] if(issilicon(target_mind.current)) - var/datum/objective/default/destroy/destroy_objective = add_objective(traitor, /datum/objective/default/destroy) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = traitor destroy_objective.target = target_mind destroy_objective.update_explanation_text() + traitor.objectives += destroy_objective else - var/datum/objective/default/assassinate/kill_objective = add_objective(traitor, /datum/objective/default/assassinate) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor kill_objective.target = target_mind kill_objective.update_explanation_text() + traitor.objectives += kill_objective // Escape if(issilicon(traitor.current)) - add_objective(traitor, /datum/objective/escape_obj/survive) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = traitor + traitor.objectives += survive_objective else - add_objective(traitor, /datum/objective/escape_obj/escape) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = traitor + traitor.objectives += escape_objective else ..() // Give them standard objectives. diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 1efb4626f09..1fb01bba993 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -89,14 +89,25 @@ var/objective_count = 0 if(prob(10)) - add_objective(traitor, /datum/objective/escape_obj/block) + var/datum/objective/block/block_objective = new + block_objective.owner = traitor + traitor.objectives += block_objective + objective_count++ for(var/i = objective_count, i < config.traitor_objectives_amount, i++) - add_objective(traitor, /datum/objective/default/assassinate) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + + var/datum/objective/survive/survive_objective = new + survive_objective.owner = traitor + traitor.objectives += survive_objective - add_objective(traitor, /datum/objective/escape_obj/survive) else - var/objective_count = 0 + var/is_hijacker = prob(10) + var/martyr_chance = prob(20) + var/objective_count = is_hijacker //Hijacking counts towards number of objectives if(!exchange_blue && traitors.len >= 8) //Set up an exchange if there are enough traitors if(!exchange_red) exchange_red = traitor @@ -105,7 +116,56 @@ assign_exchange_role(exchange_red) assign_exchange_role(exchange_blue) objective_count += 1 //Exchange counts towards number of objectives - generate_objectives(traitor, config.traitor_objectives_amount - objective_count, TRUE) + var/list/active_ais = active_ais() + for(var/i = objective_count, i < config.traitor_objectives_amount, i++) + if(prob(50)) + if(active_ais.len && prob(100/joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = traitor + destroy_objective.find_target() + traitor.objectives += destroy_objective + else if(prob(30)) + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = traitor + maroon_objective.find_target() + traitor.objectives += maroon_objective + else + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + else + var/datum/objective/steal/steal_objective = new + steal_objective.owner = traitor + steal_objective.find_target() + traitor.objectives += steal_objective + + if(is_hijacker && objective_count <= config.traitor_objectives_amount) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount + if (!(locate(/datum/objective/hijack) in traitor.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = traitor + traitor.objectives += hijack_objective + return + + + var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead. + for(var/datum/objective/O in traitor.objectives) + if(!O.martyr_compatible) + martyr_compatibility = 0 + break + + if(martyr_compatibility && martyr_chance) + var/datum/objective/martyr/martyr_objective = new + martyr_objective.owner = traitor + traitor.objectives += martyr_objective + return + + else + if(!(locate(/datum/objective/escape) in traitor.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = traitor + traitor.objectives += escape_objective + return @@ -150,6 +210,8 @@ give_codewords(killer) killer.set_syndie_radio() killer << "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!" + killer << "In the top right corner of the screen you will find the Malfunctions tab, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices." + killer << "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 60 seconds." killer.verbs += /mob/living/silicon/ai/proc/choose_modules killer.malf_picker = new /datum/module_picker @@ -273,13 +335,13 @@ faction = "blue" //Assign objectives - var/datum/objective/default/steal/exchange/exchange_objective = new + var/datum/objective/steal/exchange/exchange_objective = new exchange_objective.set_faction(faction,((faction == "red") ? exchange_blue : exchange_red)) exchange_objective.owner = owner owner.objectives += exchange_objective if(prob(20)) - var/datum/objective/default/steal/exchange/backstab/backstab_objective = new + var/datum/objective/steal/exchange/backstab/backstab_objective = new backstab_objective.set_faction(faction) backstab_objective.owner = owner owner.objectives += backstab_objective diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 9ba6d74ce4a..e8a862d7aa4 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -254,7 +254,7 @@ var/global/list/multiverse = list() evil = TRUE else user << "With your new found power you could easily defend the station!" - var/datum/objective/escape_obj/survive/new_objective = new /datum/objective/escape_obj/survive + var/datum/objective/survive/new_objective = new /datum/objective/survive new_objective.owner = usr.mind new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." usr << "Objective #[1]: [new_objective.explanation_text]" @@ -302,15 +302,15 @@ var/global/list/multiverse = list() equip_copy(M) if(evil) - var/datum/objective/hijackclone/new_objective = add_objective(M.mind, /datum/objective/hijackclone) - new_objective.owner = M.mind - M.mind.objectives += new_objective - new_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" - M << "Objective #[1]: [new_objective.explanation_text]" + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = M.mind + M.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + M << "Objective #[1]: [hijack_objective.explanation_text]" M.mind.special_role = "multiverse traveller" log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.") else - var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect) + 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], your copy, and help them defend the innocent from the mobs of multiverse clones." diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 84b9e6da663..8ad4bf1e03f 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -177,7 +177,11 @@ makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc) if("Artificer") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) + if(iscultist(user) || iswizard(user)) + makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) + + else + makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) qdel(T) qdel(src) @@ -238,24 +242,27 @@ /obj/item/device/soulstone/proc/getCultGhost(obj/item/device/soulstone/C, mob/living/carbon/human/T, mob/U) + var/mob/dead/observer/chosen_ghost - var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100) + for(var/mob/dead/observer/ghost in player_list) //We put them back in their body + if(ghost.mind && ghost.mind.current == T && ghost.client) + chosen_ghost = ghost + break - if(!T) //target mob got soulstoned or gibbed during sleep(50) + if(!chosen_ghost) //Failing that, we grab a ghost + var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100) + if(consenting_candidates.len) + chosen_ghost = pick(consenting_candidates) + if(!T) return 0 - - if(consenting_candidates.len) - var/client/ghost = null - ghost = pick(consenting_candidates) - if(C.contents.len) //If they used the soulstone on someone else in the meantime - return 0 - if(!T.client) //If the original returns in the alloted time - T.client = ghost - for(var/obj/item/W in T) - T.unEquip(W) - init_shade(C, T, U) - qdel(T) - return 1 - else + if(!chosen_ghost) U << "The ghost has fled beyond your grasp." return 0 + if(C.contents.len) //If they used the soulstone on someone else in the meantime + return 0 + T.ckey = chosen_ghost.ckey + for(var/obj/item/W in T) + T.unEquip(W) + init_shade(C, T, U) + qdel(T) + return 1 diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9d09dbdd948..752694f86ab 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -211,6 +211,7 @@ name = "Lesser Summon Guns" spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns log_name = "IG" + cost = 4 /datum/spellbook_entry/barnyard name = "Barnyard Curse" diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index e8aa52cf4a4..1dac752b967 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -48,7 +48,51 @@ /datum/game_mode/proc/forge_wizard_objectives(datum/mind/wizard) - generate_objectives(wizard, 2) + switch(rand(1,100)) + if(1 to 30) + + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = wizard + kill_objective.find_target() + wizard.objectives += kill_objective + + if (!(locate(/datum/objective/escape) in wizard.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = wizard + wizard.objectives += escape_objective + if(31 to 60) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = wizard + steal_objective.find_target() + wizard.objectives += steal_objective + + if (!(locate(/datum/objective/escape) in wizard.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = wizard + wizard.objectives += escape_objective + + if(61 to 85) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = wizard + kill_objective.find_target() + wizard.objectives += kill_objective + + var/datum/objective/steal/steal_objective = new + steal_objective.owner = wizard + steal_objective.find_target() + wizard.objectives += steal_objective + + if (!(locate(/datum/objective/survive) in wizard.objectives)) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = wizard + wizard.objectives += survive_objective + + else + if (!(locate(/datum/objective/hijack) in wizard.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = wizard + wizard.objectives += hijack_objective + return /datum/game_mode/proc/name_wizard(mob/living/carbon/human/wizard_mob) diff --git a/code/game/jobs/job/cargo_service.dm b/code/game/jobs/job/cargo_service.dm index cd512286c10..f22bd2daed4 100644 --- a/code/game/jobs/job/cargo_service.dm +++ b/code/game/jobs/job/cargo_service.dm @@ -116,9 +116,9 @@ Bartender ears = /obj/item/device/radio/headset/headset_srv uniform = /obj/item/clothing/under/rank/bartender suit = /obj/item/clothing/suit/armor/vest - backpack_contents = list(/obj/item/ammo_casing/shotgun/beanbag=4) + backpack_contents = list(/obj/item/weapon/storage/box/beanbag=1) shoes = /obj/item/clothing/shoes/laceup - + /* Cook */ diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 922c0a71cd5..47e13d501e7 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -36,6 +36,10 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/sleeper/Destroy() + go_out() + . = ..() + /obj/machinery/sleeper/RefreshParts() var/E var/I @@ -83,10 +87,6 @@ default_deconstruction_crowbar(I) -/obj/machinery/sleeper/ex_act(severity, target) - go_out() - ..() - /obj/machinery/sleeper/emp_act(severity) if(stat & (BROKEN|NOPOWER)) ..(severity) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 9bcf2624df8..1ba91162918 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -187,10 +187,11 @@ else if (!shorted) ui_interact(user) -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "air_alarm", name, 480, 660) + ui = new(user, src, ui_key, "air_alarm", name, 440, 650, master_ui, state) ui.open() /obj/machinery/alarm/get_ui_data(mob/user) @@ -257,7 +258,8 @@ if(!location) return var/datum/gas_mixture/environment = location.return_air() - var/total = environment.oxygen + environment.nitrogen + environment.carbon_dioxide + environment.toxins + var/list/env_gases = environment.gases + var/total = environment.total_moles() var/list/environment_data = list() data["atmos_alarm"] = alarm_area.atmosalm @@ -272,26 +274,32 @@ var/pressure_danger = cur_tlv.get_danger_level(pressure) environment_data += list(list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_danger)) + environment.assert_gases(arglist(hardcoded_gases)) + cur_tlv = TLV["oxygen"] - var/oxygen_danger = cur_tlv.get_danger_level(environment.oxygen*partial_pressure) - environment_data += list(list("name" = "Oxygen", "value" = environment.oxygen / total * 100, "unit" = "%", "danger_level" = oxygen_danger)) + var/oxygen_danger = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Oxygen", "value" = env_gases["o2"][MOLES] / total * 100, "unit" = "%", "danger_level" = oxygen_danger)) cur_tlv = TLV["nitrogen"] - var/nitrogen_danger = cur_tlv.get_danger_level(environment.nitrogen*partial_pressure) - environment_data += list(list("name" = "Nitrogen", "value" = environment.nitrogen / total * 100, "unit" = "%", "danger_level" = nitrogen_danger)) + var/nitrogen_danger = cur_tlv.get_danger_level(env_gases["n2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Nitrogen", "value" = env_gases["n2"][MOLES] / total * 100, "unit" = "%", "danger_level" = nitrogen_danger)) cur_tlv = TLV["carbon dioxide"] - var/carbon_dioxide_danger = cur_tlv.get_danger_level(environment.carbon_dioxide*partial_pressure) - environment_data += list(list("name" = "Carbon Dioxide", "value" = environment.carbon_dioxide / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger)) + var/carbon_dioxide_danger = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Carbon Dioxide", "value" = env_gases["co2"][MOLES] / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger)) cur_tlv = TLV["plasma"] - var/plasma_danger = cur_tlv.get_danger_level(environment.toxins*partial_pressure) - environment_data += list(list("name" = "Toxins", "value" = environment.toxins / total * 100, "unit" = "%", "danger_level" = plasma_danger)) + var/plasma_danger = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Toxins", "value" = env_gases["plasma"][MOLES] / total * 100, "unit" = "%", "danger_level" = plasma_danger)) + + environment.garbage_collect() cur_tlv = TLV["other"] var/other_moles = 0 - for(var/datum/gas/G in environment.trace_gases) - other_moles+=G.moles + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + other_moles += env_gases[id][MOLES] var/other_danger = cur_tlv.get_danger_level(other_moles*partial_pressure) environment_data += list(list("name" = "Other", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_danger)) @@ -602,6 +610,7 @@ return 0 var/datum/gas_mixture/environment = location.return_air() + var/list/env_gases = environment.gases var/datum/tlv/cur_tlv var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume @@ -610,19 +619,25 @@ var/environment_pressure = environment.return_pressure() var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure) + environment.assert_gases(arglist(hardcoded_gases)) + cur_tlv = TLV["oxygen"] - var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP) + var/oxygen_dangerlevel = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*GET_PP) cur_tlv = TLV["carbon dioxide"] - var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP) + var/co2_dangerlevel = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*GET_PP) cur_tlv = TLV["plasma"] - var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP) + var/plasma_dangerlevel = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*GET_PP) + + environment.garbage_collect() cur_tlv = TLV["other"] var/other_moles = 0 - for(var/datum/gas/G in environment.trace_gases) - other_moles+=G.moles + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + other_moles += env_gases[id][MOLES] var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP) cur_tlv = TLV["temperature"] diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 89c4d084ced..0b9f6633758 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -37,6 +37,7 @@ signal.data["timestamp"] = world.time var/datum/gas_mixture/air_sample = return_air() + var/list/sample_gases = air_sample.gases if(output&1) signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1)) @@ -46,14 +47,16 @@ if(output>4) var/total_moles = air_sample.total_moles() if(total_moles > 0) + air_sample.assert_gases(arglist(hardcoded_gases)) if(output&4) - signal.data["oxygen"] = round(100*air_sample.oxygen/total_moles,0.1) + signal.data["oxygen"] = round(100*sample_gases["o2"][MOLES]/total_moles,0.1) if(output&8) - signal.data["toxins"] = round(100*air_sample.toxins/total_moles,0.1) + signal.data["toxins"] = round(100*sample_gases["plasma"][MOLES]/total_moles,0.1) if(output&16) - signal.data["nitrogen"] = round(100*air_sample.nitrogen/total_moles,0.1) + signal.data["nitrogen"] = round(100*sample_gases["n2"][MOLES]/total_moles,0.1) if(output&32) - signal.data["carbon_dioxide"] = round(100*air_sample.carbon_dioxide/total_moles,0.1) + signal.data["carbon_dioxide"] = round(100*sample_gases["co2"][MOLES]/total_moles,0.1) + air_sample.garbage_collect() else signal.data["oxygen"] = 0 signal.data["toxins"] = 0 diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 20eac90dae2..1318d338a08 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -9,10 +9,8 @@ icon_state = "yellow" density = 1 var/health = 100 - var/valve_open = 0 var/release_pressure = ONE_ATMOSPHERE - var/canister_color = "yellow" var/can_label = 1 var/filled = 0.5 @@ -22,40 +20,55 @@ use_power = 0 var/release_log = "" var/update_flag = 0 + var/gas_type = "" + var/static/list/label2types = list( + "caution" = /obj/machinery/portable_atmospherics/canister, + "n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, + "n2" = /obj/machinery/portable_atmospherics/canister/nitrogen, + "o2" = /obj/machinery/portable_atmospherics/canister/oxygen, + "plasma" = /obj/machinery/portable_atmospherics/canister/toxins, + "co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, + "air" = /obj/machinery/portable_atmospherics/canister/air + ) -/obj/machinery/portable_atmospherics/canister/sleeping_agent - name = "canister: \[N2O\]" +/obj/machinery/portable_atmospherics/canister/nitrous_oxide + name = "n2o canister" desc = "Nitrous oxide gas. Known to cause drowsiness." icon_state = "redws" canister_color = "redws" can_label = 0 + gas_type = "n2o" /obj/machinery/portable_atmospherics/canister/nitrogen - name = "canister: \[N2\]" + name = "n2 canister" desc = "Nitrogen gas. Reportedly useful for something." icon_state = "red" canister_color = "red" can_label = 0 + gas_type = "n2" /obj/machinery/portable_atmospherics/canister/oxygen - name = "canister: \[O2\]" + name = "o2 canister" desc = "Oxygen. Necessary for human life." icon_state = "blue" canister_color = "blue" can_label = 0 + gas_type = "o2" /obj/machinery/portable_atmospherics/canister/toxins - name = "canister \[Plasma\]" + name = "plasma canister" desc = "Plasma gas. The reason YOU are here. Highly toxic." icon_state = "orange" canister_color = "orange" can_label = 0 + gas_type = "plasma" /obj/machinery/portable_atmospherics/canister/carbon_dioxide - name = "canister \[CO2\]" + name = "co2 canister" desc = "Carbon dioxide. What the fuck is carbon dioxide?" icon_state = "black" canister_color = "black" can_label = 0 + gas_type = "co2" /obj/machinery/portable_atmospherics/canister/air - name = "canister \[Air\]" + name = "air canister" desc = "Pre-mixed air." icon_state = "grey" canister_color = "grey" @@ -273,10 +286,11 @@ update_flag return ui_interact(user) -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "canister", name, 405, 405, state = physical_state) + ui = new(user, src, ui_key, "canister", name, 405, 405, master_ui, state) ui.open() /obj/machinery/portable_atmospherics/canister/get_ui_data() @@ -305,20 +319,11 @@ update_flag switch(action) if("relabel") if(can_label) - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Plasma\]" = "orange", \ - "\[CO2\]" = "black", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = input("Label canister:", "Gas Canister") as null|anything in colors - if(label) - src.canister_color = colors[label] - src.icon_state = colors[label] - src.name = "canister: [label]" + var/label = input("Label canister:", "Gas Canister") as null|anything in label2types + var/newtype = label2types[label] + if(newtype) + new newtype (loc, 0) + qdel(src) if("pressure") switch(params["pressure"]) if("custom") @@ -344,11 +349,10 @@ update_flag logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the [holding]
" else logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the air
" - if(air_contents.toxins > 0) + if(air_contents.gases["plasma"]) message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains plasma! (JMP)") log_admin("[key_name(usr)] opened a canister that contains plasma at [x], [y], [z]") - var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air_contents.trace_gases - if(sleeping_agent && (sleeping_agent.moles > 1)) + if(air_contents.gases["n2o"]) message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains N2O! (JMP)") log_admin("[key_name(usr)] opened a canister that contains N2O at [x], [y], [z]") investigate_log(logmsg, "atmos") @@ -364,38 +368,25 @@ update_flag update_icon() return 1 -/obj/machinery/portable_atmospherics/canister/toxins/New() +/obj/machinery/portable_atmospherics/canister/New(loc, fill = 1) ..() - src.air_contents.toxins = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + if(fill) + create_gas() - src.update_icon() + update_icon() return 1 -/obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() - - src.air_contents.oxygen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/sleeping_agent/New() - ..() - - var/datum/gas/sleeping_agent/trace_gas = new - air_contents.trace_gases += trace_gas - trace_gas.moles = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 +/obj/machinery/portable_atmospherics/canister/proc/create_gas() + if(gas_type) + air_contents.assert_gas(gas_type) + air_contents.gases[gas_type][MOLES] = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) //Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 -/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New() +/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/New() ..() - var/datum/gas/sleeping_agent/trace_gas = air_contents.trace_gases[1] - trace_gas.moles = 9*4000 + air_contents.gases["n2o"][MOLES] = 9*4000 spawn(10) var/turf/simulated/location = src.loc if (istype(src.loc)) @@ -405,29 +396,7 @@ update_flag air_contents = new return 1 -/obj/machinery/portable_atmospherics/canister/nitrogen/New() - - ..() - - src.air_contents.nitrogen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - - ..() - src.air_contents.carbon_dioxide = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - - -/obj/machinery/portable_atmospherics/canister/air/New() - - ..() - src.air_contents.oxygen = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - src.air_contents.nitrogen = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 +/obj/machinery/portable_atmospherics/canister/air/create_gas() + air_contents.assert_gases("o2","n2") + air_contents.gases["o2"][MOLES] = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + air_contents.gases["n2"][MOLES] = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 5b8100857c1..2bd2649d799 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -72,27 +72,29 @@ //Filter it if (removed) var/datum/gas_mixture/filtered_out = new + var/list/filtered_gases = filtered_out.gases + var/list/removed_gases = removed.gases + + filtered_out.assert_gases(arglist(hardcoded_gases)) + removed.assert_gases(arglist(hardcoded_gases)) filtered_out.temperature = removed.temperature - filtered_out.toxins = removed.toxins - removed.toxins = 0 + filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES] + removed_gases["plasma"][MOLES] = 0 - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 + filtered_gases["co2"][MOLES] = removed_gases["co2"][MOLES] + removed_gases["co2"][MOLES] = 0 - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/sleeping_agent)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + filtered_gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES] + removed_gases["agent_b"][MOLES] = 0 - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + filtered_gases["n2o"][MOLES] = removed_gases["n2o"][MOLES] + removed_gases["n2o"][MOLES] = 0 + + filtered_out.garbage_collect() + removed.garbage_collect() //Remix the resulting gases air_contents.merge(filtered_out) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b1253d425dd..1a62efe579e 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -174,16 +174,15 @@ var/normaldoorcontrol = 0 var/specialfunctions = OPEN // Bitflag, see assembly file -/obj/machinery/button/door/New(loc, ndir = 0, built = 0) - ..() - if(id && !built && !device) +/obj/machinery/button/door/setup_device() + if(!device) if(normaldoorcontrol) var/obj/item/device/assembly/control/airlock/A = new(src) device = A A.specialfunctions = specialfunctions else device = new /obj/item/device/assembly/control(src) - + ..() /obj/machinery/button/massdriver name = "mass driver button" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 58fa41b44d9..6cd7d3e221c 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -28,7 +28,6 @@ var/view_range = 7 var/short_range = 2 - var/light_disabled = 0 var/alarm_on = 0 var/busy = 0 var/emped = 0 //Number of consecutive EMP's on this camera @@ -358,6 +357,16 @@ busy = 0 return 0 +/obj/machinery/camera/proc/Togglelight(on=0) + for(var/mob/living/silicon/ai/A in ai_list) + for(var/obj/machinery/camera/cam in A.lit_cameras) + if(cam == src) + return + if(on) + src.SetLuminosity(AI_CAMERA_LUMINOSITY) + else + src.SetLuminosity(0) + /obj/machinery/camera/bullet_act(obj/item/projectile/proj) if(proj.damage_type == BRUTE) health = max(0, health - proj.damage) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 627f5727480..8c30cfc0c41 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -186,11 +186,12 @@ H << "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
" H.hardset_dna(ui, se, H.real_name, null, mrace, features) - H.faction |= factions + if(H) + H.faction |= factions - H.set_cloned_appearance() + H.set_cloned_appearance() - H.suiciding = 0 + H.suiciding = 0 src.attempting = 0 return 1 diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 8cfd51a294f..d706a89a1bf 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -297,7 +297,8 @@ src.updateUsrDialog() return - src.active_record.fields = diskette.fields.Copy() + for(var/key in diskette.fields) + src.active_record.fields[key] = diskette.fields[key] src.temp = "Load successful." if("eject") diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 97339c1bd53..2651ed274ed 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -108,8 +108,8 @@ || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - - occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) + if(!occupant.suiciding && !(occupant.disabilities & NOCLONE)) + occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) var/obj/machinery/computer/scan_consolenew/console for(dir in list(NORTH,EAST,SOUTH,WEST)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 74869fafb76..178af87a6d3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -54,6 +54,7 @@ var/list/airlock_overlays = list() var/autoclose = 1 var/obj/item/device/doorCharge/charge = null //If applied, causes an explosion upon opening the door var/detonated = 0 + var/doorsound = 'sound/machines/airlock.ogg' var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass" var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' @@ -507,7 +508,7 @@ About the new airlock wires panel: src.aiHacking=0 return else if(!src.canAIHack()) - user << "We've lost our connection! Unable to hack airlock." + user << "Connection lost! Unable to hack airlock." src.aiHacking=0 return user << "Fault confirmed: airlock control wire disabled or cut." @@ -519,7 +520,7 @@ About the new airlock wires panel: src.aiHacking=0 return else if(!src.canAIHack()) - user << "We've lost our connection! Unable to hack airlock." + user << "Connection lost! Unable to hack airlock." src.aiHacking=0 return user << "Upload access confirmed. Loading control program into airlock software." @@ -529,7 +530,7 @@ About the new airlock wires panel: src.aiHacking=0 return else if(!src.canAIHack()) - user << "We've lost our connection! Unable to hack airlock." + user << "Connection lost! Unable to hack airlock." src.aiHacking=0 return user << "Transfer complete. Forcing airlock to execute program." @@ -657,7 +658,7 @@ About the new airlock wires panel: else if (src.normalspeed) normalspeed = 0 else - usr << text("Door timing circurity already accellerated.") + usr << text("Door timing circuitry already accelerated.") if(7) //close door @@ -762,7 +763,7 @@ About the new airlock wires panel: normalspeed = 1 src.updateUsrDialog() else - usr << text("Door timing circurity currently operating normally.") + usr << text("Door timing circuitry currently operating normally.") if(7) //open door @@ -981,12 +982,7 @@ About the new airlock wires panel: if(emagged) return 0 use_power(50) - if(istype(src, /obj/machinery/door/airlock/glass)) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - if(istype(src, /obj/machinery/door/airlock/clown)) - playsound(src.loc, 'sound/items/bikehorn.ogg', 30, 1) - else - playsound(src.loc, 'sound/machines/airlock.ogg', 30, 1) + playsound(src.loc, doorsound, 30, 1) if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density) src.closeOther.close() else @@ -1035,12 +1031,7 @@ About the new airlock wires panel: if(emagged) return use_power(50) - if(istype(src, /obj/machinery/door/airlock/glass)) - playsound(src.loc, 'sound/machines/windowdoor.ogg', 30, 1) - if(istype(src, /obj/machinery/door/airlock/clown)) - playsound(src.loc, 'sound/items/bikehorn.ogg', 30, 1) - else - playsound(src.loc, 'sound/machines/airlock.ogg', 30, 1) + playsound(src.loc, doorsound, 30, 1) else playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1) @@ -1065,9 +1056,7 @@ About the new airlock wires panel: air_update_turf(1) update_freelook_sight() if(safe) - if(locate(/mob/living) in get_turf(src)) - sleep(1) - open() + CheckForMobs() return 1 /obj/machinery/door/airlock/proc/prison_open() @@ -1176,4 +1165,4 @@ About the new airlock wires panel: lights = 0 locked = 1 loseMainPower() - loseBackupPower() + loseBackupPower() \ No newline at end of file diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 55bfc93bc04..49f7f636eb9 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -13,10 +13,11 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = hands_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, state = hands_state) + ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state) ui.open() /obj/item/weapon/electronics/airlock/get_ui_data() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 852f62ffeca..4c7a47d8488 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -183,6 +183,7 @@ desc = "Honkhonkhonk" icon = 'icons/obj/doors/airlocks/station/bananium.dmi' var/mineral = "bananium" + doorsound = 'sound/items/bikehorn.ogg' doortype = /obj/structure/door_assembly/door_assembly_clown /obj/machinery/door/airlock/sandstone @@ -209,6 +210,7 @@ overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' opacity = 0 doortype = /obj/structure/door_assembly/door_assembly_glass + doorsound = 'sound/machines/windowdoor.ogg' glass = 1 ////////////////////////////////// @@ -309,4 +311,4 @@ opacity = 0 doortype = null glass = 1 - bound_width = 64 // 2x1 + bound_width = 64 // 2x1 \ No newline at end of file diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index bf8f66cb6fa..3a67b933959 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -79,6 +79,11 @@ /obj/machinery/door/proc/CanAStarPass(var/obj/item/weapon/card/id/ID) return !density +/obj/machinery/door/proc/CheckForMobs() + if(locate(/mob/living) in get_turf(src)) + sleep(1) + open() + /obj/machinery/door/proc/bumpopen(mob/user) if(operating) return @@ -221,6 +226,7 @@ update_icon() if(visible && !glass) SetOpacity(1) + CheckForMobs() operating = 0 air_update_turf(1) update_freelook_sight() diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 236b15157c7..91c04b36e2e 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -93,6 +93,9 @@ //"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. /obj/machinery/door/poddoor/ex_act(severity, target) + if(target == src) + qdel(src) + return switch(severity) if(1) if(prob(80)) diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 1917c75065f..baa872a15f0 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -135,32 +135,32 @@ if(work_sound) playsound(src, work_sound, 50, 1) icon_state = icon_creating - spawn(30) + sleep(30) + icon_state = icon_on + metal -= metal_cost + glass -= glass_cost + if(metal < 0) + metal = 0 + if(glass < 0) + glass = 0 + if(power_used) + use_power(power_used) + new dispense_type(loc) + if(create_sound) + playsound(src, create_sound, 50, 1) + if(end_create_message) + visible_message("[src] [end_create_message]") + icon_state = icon_recharging + sleep(cooldownTime) + if(stat != BROKEN) icon_state = icon_on - metal -= metal_cost - glass -= glass_cost - if(metal < 0) - metal = 0 - if(glass < 0) - glass = 0 - if(power_used) - use_power(power_used) - new dispense_type(loc) - if(create_sound) - playsound(src, create_sound, 50, 1) - if(end_create_message) - visible_message("[src] [end_create_message]") - icon_state = icon_recharging - spawn(cooldownTime) - if(stat != BROKEN) - icon_state = icon_on - else - icon_state = icon_off - droneMadeRecently = 0 - if(recharge_sound) - playsound(src, recharge_sound, 50, 1) - if(recharge_message) - visible_message("[src] [recharge_message]") + else + icon_state = icon_off + droneMadeRecently = 0 + if(recharge_sound) + playsound(src, recharge_sound, 50, 1) + if(recharge_message) + visible_message("[src] [recharge_message]") /obj/machinery/droneDispenser/attackby(obj/item/O, mob/living/user) if(istype(O, /obj/item/stack)) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 62162225baf..d2cdf0153f1 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -504,8 +504,7 @@ if(!tryToShootAt(targets)) if(!always_up) - spawn() - popDown() // no valid targets, close the cover + popDown() // no valid targets, close the cover /obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index c8471e64002..8242bd0a562 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -153,10 +153,11 @@ /obj/machinery/space_heater/interact(mob/user) ui_interact(user) -/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "space_heater", name, 400, 305, state = physical_state) + ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state) ui.open() /obj/machinery/space_heater/ui_act(action, params) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 77fd9702487..3da70a1c3e2 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -44,9 +44,12 @@ /obj/machinery/status_display/New() ..() - spawn(5) // must wait for map loading to finish - if(SSradio) - SSradio.add_object(src, frequency) + if(SSradio) + SSradio.add_object(src, frequency) + +/obj/machinery/status_display/initialize() + if(SSradio) + SSradio.add_object(src, frequency) /obj/machinery/status_display/Destroy() if(SSradio) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index a97f4cc6bc0..d8fce89f1ea 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -80,11 +80,18 @@ custom_objective.owner = N.mind N.mind.objectives += custom_objective - add_objective(N.mind, /datum/objective/escape_obj/escape, 1) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = N.mind + N.mind.objectives += escape_objective M << "You have joined the ranks of the Syndicate and become a traitor to the station!" + var/obj_count = 1 + for(var/datum/objective/OBJ in M.mind.objectives) + M << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + src.updateUsrDialog() return diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 6f6950527ab..883013d04f0 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -114,9 +114,8 @@ wires.Interact(user) if(!open_panel) if(!active) - spawn() - settings(user) - return + settings(user) + return else if(anchored) user << "The bomb is bolted to the floor!" return diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f73c58acdd7..5b30ada2d0e 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -14,21 +14,11 @@ //6 = blood, open door //7 = blood, closed door //8 = blood, running - var/panel = 0 - //0 = closed - //1 = open - var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. - //0 = not hacked - //1 = hacked var/gibs_ready = 0 var/obj/crayon -/obj/machinery/washing_machine/verb/start() - set name = "Start Washing" - set category = "Object" - set src in oview(1) - - if(usr.stat || usr.restrained() || !usr.canmove) +/obj/machinery/washing_machine/AltClick(mob/user) + if(!user.canUseTopic(src)) return if( state != 4 ) @@ -183,12 +173,9 @@ /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state][panel]" + icon_state = "wm_[state]0" /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) - /*if(istype(W,/obj/item/weapon/screwdriver)) - panel = !panel - user << "\blue you [panel ? "open" : "close"] the [src]'s maintenance panel"*/ if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) if( state in list( 1, 3, 6 ) ) if(!crayon) @@ -201,7 +188,7 @@ else ..() else if(istype(W,/obj/item/weapon/grab)) - if( (state == 1) && hacked) + if(state == 1) var/obj/item/weapon/grab/G = W if(iscorgi(G.affecting)) G.affecting.loc = src @@ -249,9 +236,6 @@ if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) user << "This item does not fit." return -// if ( istype(W,/obj/item/clothing/head/powered ) ) -// user << "This item does not fit." -// return if ( istype(W,/obj/item/clothing/head/helmet ) ) user << "This item does not fit." return @@ -305,4 +289,4 @@ state = 1 - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 4748c08ad48..ef9962cf0b4 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -45,7 +45,14 @@ ticker.mode.traitors += user.mind user.mind.special_role = "Avatar of the Wish Granter" - add_objective(user.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/hijack/hijack = new + hijack.owner = user.mind + user.mind.objectives += hijack + + var/obj_count = 1 + for(var/datum/objective/OBJ in user.mind.objectives) + user << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ user << "You have a very bad feeling about this." diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 0f53b062e7f..a1ce789e73a 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -436,13 +436,14 @@ if(!T) return var/datum/gas_mixture/GM = new + GM.assert_gas("plasma") if(prob(10)) - GM.toxins += 100 + GM.gases["plasma"][MOLES] += 100 GM.temperature = 1500+T0C //should be enough to start a fire T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") qdel(src) else - GM.toxins += 5 + GM.gases["plasma"][MOLES] += 5 GM.temperature = istype(T) ? T.air.return_temperature() : T20C T.visible_message("The [src] suddenly disgorges a cloud of plasma.") T.assume_air(GM) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 622686e70ec..0beb82c3cdc 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -396,7 +396,7 @@ add_part_set_to_queue(filter.get("partset_to_queue")) return update_queue_on_page() if(href_list["process_queue"]) - spawn(-1) + spawn(0) if(processing_queue || being_built) return 0 processing_queue = 1 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2c892b128a9..c1ab8a6a7e6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -177,8 +177,9 @@ cabin_air = new cabin_air.temperature = T20C cabin_air.volume = 200 - cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.assert_gases("o2","n2") + cabin_air.gases["o2"][MOLES] = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.gases["n2"][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) return cabin_air /obj/mecha/proc/add_radio() @@ -344,7 +345,7 @@ if(M.client) speech_bubble_recipients.Add(M.client) spawn(0) - flick_overlay(image('icons/mob/talk.dmi', src, "hR[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) + flick_overlay(image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) return //////////////////////////// @@ -406,9 +407,17 @@ events.fireEvent("onMove",get_turf(src)) /obj/mecha/Process_Spacemove(var/movement_dir = 0) - if(occupant) - return occupant.Process_Spacemove(movement_dir) //We'll just say you used the clamp to grab the wall - return ..() + . = ..() + if(.) + return 1 + + var/atom/movable/backup = get_spacemove_backup() + if(backup) + if(istype(backup) && movement_dir && !backup.anchored) + if(backup.newtonian_move(turn(movement_dir, 180))) + if(occupant) + occupant << "You push off of [backup] to propel yourself." + return 1 /obj/mecha/relaymove(mob/user,direction) if(!direction) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/contraband.dm similarity index 100% rename from code/game/objects/effects/decals/contraband.dm rename to code/game/objects/effects/contraband.dm diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 1326a890d7d..7e358f18fb4 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -5,7 +5,6 @@ desc = "It's green and acidic. It looks like... blood?" gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 30d74ba6970..20c32cca078 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -3,7 +3,6 @@ desc = "It's red and gooey. Perhaps it's the chef's cooking?" gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/blood.dmi' icon_state = "floor1" @@ -39,7 +38,6 @@ desc = "Your instincts say you shouldn't be following these." gender = PLURAL density = 0 - anchored = 1 layer = 2 random_icon_states = null var/list/existing_dirs = list() @@ -55,7 +53,6 @@ desc = "They look bloody and gruesome." gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/blood.dmi' icon_state = "gibbl5" @@ -88,18 +85,18 @@ /obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) - for(var/datum/disease/D in src.viruses) - var/datum/disease/ND = D.Copy(1) - b.viruses += ND - ND.holder = b - if (step_to(src, get_step(src, direction), 0)) - break + set waitfor = 0 + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) + for(var/datum/disease/D in src.viruses) + var/datum/disease/ND = D.Copy(1) + b.viruses += ND + ND.holder = b + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/blood/drip name = "drips of blood" diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 21ded000917..008a0ab9084 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -3,7 +3,6 @@ desc = "Someone should clean that up." gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/obj/objects.dmi' icon_state = "shards" @@ -14,7 +13,6 @@ gender = PLURAL icon = 'icons/obj/objects.dmi' icon_state = "ash" - anchored = 1 /obj/effect/decal/cleanable/ash/New() ..() @@ -29,7 +27,6 @@ icon_state = "dirt" gender = PLURAL density = 0 - anchored = 1 layer = 2 mouse_opacity = 0 @@ -38,7 +35,6 @@ desc = "It's still good. Four second rule!" gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/effects.dmi' icon_state = "flour" @@ -48,7 +44,6 @@ desc = "Jeez. I hope that's not for lunch." gender = PLURAL density = 0 - anchored = 1 layer = 2 luminosity = 1 icon = 'icons/effects/effects.dmi' @@ -61,7 +56,6 @@ name = "cobweb" desc = "Somebody should remove that." density = 0 - anchored = 1 layer = 3 icon = 'icons/effects/effects.dmi' icon_state = "cobweb1" @@ -74,7 +68,6 @@ name = "gooey grey mass" desc = "It looks like a melted... something." density = 0 - anchored = 1 layer = 3 icon = 'icons/obj/chemical.dmi' icon_state = "molten" @@ -83,7 +76,6 @@ name = "cobweb" desc = "Somebody should remove that." density = 0 - anchored = 1 layer = 3 icon = 'icons/effects/effects.dmi' icon_state = "cobweb2" @@ -94,7 +86,6 @@ desc = "Gosh, how unpleasant." gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/blood.dmi' icon_state = "vomit_1" @@ -111,7 +102,6 @@ name = "tomato smudge" desc = "It's red." density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") @@ -120,7 +110,6 @@ name = "smashed egg" desc = "Seems like this one won't hatch." density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") @@ -129,7 +118,6 @@ name = "smashed pie" desc = "It's pie cream from a cream pie." density = 0 - anchored = 1 layer = 2 icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("smashed_pie") @@ -140,7 +128,6 @@ gender = PLURAL icon = 'icons/obj/objects.dmi' icon_state = "ash" - anchored = 1 /obj/effect/decal/cleanable/shreds name = "shreds" @@ -149,7 +136,6 @@ icon_state = "shreds" gender = PLURAL density = 0 - anchored = 1 layer = 2 /obj/effect/decal/cleanable/shreds/New() diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index becacd4d2ea..af2ff562590 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -5,7 +5,6 @@ desc = "It's a useless heap of junk... or is it?" gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/mob/robots.dmi' icon_state = "gib1" @@ -14,19 +13,19 @@ bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - if (prob(40)) - new /obj/effect/decal/cleanable/oil/streak(src.loc) - else if (prob(10)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - if (step_to(src, get_step(src, direction), 0)) - break + set waitfor = 0 + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + if (prob(40)) + new /obj/effect/decal/cleanable/oil/streak(src.loc) + else if (prob(10)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, src) + s.start() + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/robot_debris/ex_act() return @@ -45,7 +44,6 @@ desc = "It's black and greasy. Looks like Beepsky made another mess." gender = PLURAL density = 0 - anchored = 1 layer = 2 icon = 'icons/mob/robots.dmi' icon_state = "floor1" diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 488a41be821..2f5bd9ea000 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -1,10 +1,9 @@ /obj/effect/decal/cleanable/crayon name = "rune" - desc = "A rune drawn in crayon." + desc = "Graffiti. Damn kids." icon = 'icons/effects/crayondecal.dmi' icon_state = "rune1" layer = 2.1 - anchored = 1 var/do_icon_rotate = TRUE /obj/effect/decal/cleanable/crayon/examine() @@ -18,7 +17,7 @@ loc = location name = e_name - desc = "A [name] drawn in crayon." + desc = "A [name] vandalizing the station." if(type == "poseur tag") type = pick(gang_name_pool) icon_state = type @@ -30,6 +29,7 @@ color = main + /obj/effect/decal/cleanable/crayon/gang layer = 3.6 //Harder to hide do_icon_rotate = FALSE //These are designed to always face south, so no rotation please. @@ -56,4 +56,4 @@ gang.territory -= territory.type gang.territory_new -= territory.type gang.territory_lost |= list(territory.type = territory.name) - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index b9ffd568347..d9f8cde905d 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -1,6 +1,7 @@ /obj/effect/decal name = "decal" icon = 'icons/effects/effects.dmi' + anchored = 1 /obj/effect/decal/ex_act(severity, target) qdel(src) \ No newline at end of file diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index c8cb4754943..c65f5f494a0 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -3,13 +3,11 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "arrow" layer = 16 - anchored = 1 mouse_opacity = 0 // Used for spray that you spray at walls, tables, hydrovats etc /obj/effect/decal/spraystill density = 0 - anchored = 1 layer = 50 //Used by spraybottles. diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index f98e5922f82..834c3b4c7dc 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -2,7 +2,6 @@ name = "remains" gender = PLURAL icon = 'icons/effects/blood.dmi' - anchored = 1 /obj/effect/decal/remains/human desc = "They look like human remains. They have a strange aura about them." diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index cb5f4de5cdd..a3b42392f70 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -163,9 +163,12 @@ T.air_update_turf() for(var/obj/effect/hotspot/H in T) qdel(H) - if(G.toxins) - G.nitrogen += (G.toxins) - G.toxins = 0 + var/list/G_gases = G.gases + if(G_gases["plasma"]) + G.assert_gas("n2") + G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES]) + G_gases["plasma"][MOLES] = 0 + G.garbage_collect() for(var/obj/machinery/atmospherics/components/unary/U in T) if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber. U.welded = 1 diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 5b9f2917d15..3e5c5a29f55 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -39,6 +39,16 @@ spawn(duration) qdel(src) +/obj/effect/overlay/temp/guardian + randomdir = 0 + +/obj/effect/overlay/temp/guardian/phase + duration = 5 + icon_state = "phasein" + +/obj/effect/overlay/temp/guardian/phase/out + icon_state = "phaseout" + /obj/effect/overlay/temp/cult randomdir = 0 duration = 10 @@ -50,7 +60,7 @@ /obj/effect/overlay/temp/cult/turf name = "unholy glow" icon_state = "wallglow" - layer = 2.01 + layer = TURF_LAYER + 0.07 /obj/effect/overlay/temp/cult/turf/floor icon_state = "floorglow" diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 6efa75f3e21..e1a4efa2a72 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -14,9 +14,19 @@ /proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0) + set waitfor = 0 src = null //so we don't abort once src is deleted epicenter = get_turf(epicenter) + //DO NOT REMOVE THIS SLEEP, IT BREAKS THINGS + //not sleeping causes us to ex_act() the thing that triggered the explosion + //doing that might cause it to trigger another explosion + //this is bad + //I would make this not ex_act the thing that triggered the explosion, + //but everything that explodes gives us their loc or a get_turf() + //and somethings expect us to ex_act them so they can qdel() + sleep(1) //tldr, let the calling proc call qdel(src) before we explode + // Archive the uncapped explosion for the doppler array var/orig_dev_range = devastation_range var/orig_heavy_range = heavy_impact_range @@ -30,126 +40,125 @@ flash_range = min (MAX_EX_FLASH_RANGE, flash_range) flame_range = min (MAX_EX_FLAME_RANGE, flame_range) - spawn(0) - var/start = world.timeofday - if(!epicenter) return + var/start = world.timeofday + if(!epicenter) return - var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range) - var/list/cached_exp_block = list() + var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range) + var/list/cached_exp_block = list() - if(adminlog) - message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") - log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") + if(adminlog) + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") + log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") - // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. - // Stereo users will also hear the direction of the explosion! + // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. + // Stereo users will also hear the direction of the explosion! - // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions. - // 3/7/14 will calculate to 80 + 35 + // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions. + // 3/7/14 will calculate to 80 + 35 - var/far_dist = 0 - far_dist += heavy_impact_range * 5 - far_dist += devastation_range * 20 + var/far_dist = 0 + far_dist += heavy_impact_range * 5 + far_dist += devastation_range * 20 - if(!silent) - var/frequency = get_rand_frequency() - for(var/mob/M in player_list) - // Double check for client - if(M && M.client) - var/turf/M_turf = get_turf(M) - if(M_turf && M_turf.z == epicenter.z) - var/dist = get_dist(M_turf, epicenter) - // If inside the blast radius + world.view - 2 - if(dist <= round(max_range + world.view - 2, 1)) - M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound - // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. - else if(dist <= far_dist) - var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist - far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion - M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) + if(!silent) + var/frequency = get_rand_frequency() + for(var/mob/M in player_list) + // Double check for client + if(M && M.client) + var/turf/M_turf = get_turf(M) + if(M_turf && M_turf.z == epicenter.z) + var/dist = get_dist(M_turf, epicenter) + // If inside the blast radius + world.view - 2 + if(dist <= round(max_range + world.view - 2, 1)) + M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound + // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. + else if(dist <= far_dist) + var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist + far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion + M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) - //postpone processing for a bit - var/postponeCycles = max(round(devastation_range/8),1) - SSlighting.postpone(postponeCycles) - SSmachine.postpone(postponeCycles) + //postpone processing for a bit + var/postponeCycles = max(round(devastation_range/8),1) + SSlighting.postpone(postponeCycles) + SSmachine.postpone(postponeCycles) - if(heavy_impact_range > 1) - var/datum/effect_system/explosion/E = new/datum/effect_system/explosion() - E.set_up(epicenter) - E.start() + if(heavy_impact_range > 1) + var/datum/effect_system/explosion/E = new/datum/effect_system/explosion() + E.set_up(epicenter) + E.start() - var/x0 = epicenter.x - var/y0 = epicenter.y - var/z0 = epicenter.z + var/x0 = epicenter.x + var/y0 = epicenter.y + var/z0 = epicenter.z - var/list/affected_turfs = trange(max_range, epicenter) + var/list/affected_turfs = trange(max_range, epicenter) + + if(config.reactionary_explosions) + for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area + cached_exp_block[T] = 0 + if(T.density && T.explosion_block) + cached_exp_block[T] += T.explosion_block + + for(var/obj/machinery/door/D in T) + if(D.density && D.explosion_block) + cached_exp_block[T] += D.explosion_block + + for(var/obj/structure/window/W in T) + if(W.reinf && W.fulltile) + cached_exp_block[T] += W.explosion_block + + for(var/obj/effect/blob/B in T) + cached_exp_block[T] += B.explosion_block + + for(var/turf/T in affected_turfs) + + var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) if(config.reactionary_explosions) - for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area - cached_exp_block[T] = 0 - if(T.density && T.explosion_block) - cached_exp_block[T] += T.explosion_block + var/turf/Trajectory = T + while(Trajectory != epicenter) + Trajectory = get_step_towards(Trajectory, epicenter) + dist += cached_exp_block[Trajectory] - for(var/obj/machinery/door/D in T) - if(D.density && D.explosion_block) - cached_exp_block[T] += D.explosion_block + var/flame_dist = 0 + var/throw_dist = dist - for(var/obj/structure/window/W in T) - if(W.reinf && W.fulltile) - cached_exp_block[T] += W.explosion_block + if(dist < flame_range) + flame_dist = 1 - for(var/obj/effect/blob/B in T) - cached_exp_block[T] += B.explosion_block + if(dist < devastation_range) dist = 1 + else if(dist < heavy_impact_range) dist = 2 + else if(dist < light_impact_range) dist = 3 + else dist = 0 - for(var/turf/T in affected_turfs) + //------- TURF FIRES ------- - var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) + if(T) + if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density) + PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience! + if(dist > 0) + T.ex_act(dist) - if(config.reactionary_explosions) - var/turf/Trajectory = T - while(Trajectory != epicenter) - Trajectory = get_step_towards(Trajectory, epicenter) - dist += cached_exp_block[Trajectory] + //--- THROW ITEMS AROUND --- - var/flame_dist = 0 - var/throw_dist = dist - - if(dist < flame_range) - flame_dist = 1 - - if(dist < devastation_range) dist = 1 - else if(dist < heavy_impact_range) dist = 2 - else if(dist < light_impact_range) dist = 3 - else dist = 0 - - //------- TURF FIRES ------- - - if(T) - if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density) - PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience! - if(dist > 0) - T.ex_act(dist) - - //--- THROW ITEMS AROUND --- - - var/throw_dir = get_dir(epicenter,T) - for(var/obj/item/I in T) - if(I && !I.anchored) - var/throw_range = rand(throw_dist, max_range) - var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range) - I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything) - I.throw_at_fast(throw_at, throw_range, 2)//Throw it at 2 speed, this is purely visual anyway. + var/throw_dir = get_dir(epicenter,T) + for(var/obj/item/I in T) + if(I && !I.anchored) + var/throw_range = rand(throw_dist, max_range) + var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range) + I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything) + I.throw_at_fast(throw_at, throw_range, 2)//Throw it at 2 speed, this is purely visual anyway. - var/took = (world.timeofday-start)/10 - //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare - if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds." + var/took = (world.timeofday-start)/10 + //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare + if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds." + + //Machines which report explosions. + for(var/array in doppler_arrays) + var/obj/machinery/doppler_array/A = array + A.sense_explosion(epicenter,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range) - //Machines which report explosions. - for(var/array in doppler_arrays) - var/obj/machinery/doppler_array/A = array - A.sense_explosion(epicenter,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range) - return 1 diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 1171c646104..0d26ff0d940 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -59,8 +59,7 @@ if(!src.lit) src.lit = 1 //src.damtype = "fire" - for(var/mob/O in viewers(usr, null)) - O.show_message(flavor_text, 1) + usr.visible_message(flavor_text) SetLuminosity(CANDLE_LUMINOSITY) if(!infinite) SSobj.processing |= src diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index e49f4b19ace..34d8002ea9b 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -414,6 +414,7 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "Unable to obtain a reading.
" else var/datum/gas_mixture/environment = T.return_air() + var/list/env_gases = environment.gases var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() @@ -421,17 +422,11 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "Air Pressure: [round(pressure,0.1)] kPa
" if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "Nitrogen: [round(n2_level*100)]%
" - dat += "Oxygen: [round(o2_level*100)]%
" - dat += "Carbon Dioxide: [round(co2_level*100)]%
" - dat += "Plasma: [round(plasma_level*100)]%
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" + for(var/id in env_gases) + var/gas_level = env_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_level > 0.01) + dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
" + dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "
" @@ -778,7 +773,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0) for(var/mob/M in player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) - M.show_message("(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]
") + M << "(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]" /obj/item/device/pda/proc/can_send(obj/item/device/pda/P) if(!P || qdeleted(P) || P.toff) @@ -944,9 +939,9 @@ var/global/list/obj/item/device/pda/PDAs = list() switch(scanmode) if(1) - user.visible_message(text("[] has analyzed []'s vitals!", user, C)) + C.visible_message("[user] has analyzed [C]'s vitals!") healthscan(user, C, 1) - src.add_fingerprint(user) + add_fingerprint(user) if(2) // Unused diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index b6401056796..ff8428ffb48 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -241,11 +241,12 @@ /obj/item/weapon/cartridge/proc/print_to_host(text) if (!istype(loc, /obj/item/device/pda)) return - loc:cart = text + var/obj/item/device/pda/P = loc + P.cart = text for (var/mob/M in viewers(1, loc.loc)) if (M.client && M.machine == loc) - loc:attack_self(M) + P.attack_self(M) return @@ -273,6 +274,7 @@ /obj/item/weapon/cartridge/proc/generate_menu(mob/user) switch(mode) if(40) //signaller + var/obj/item/radio/integrated/signal/S = radio menu = "

Remote Signaling System

" menu += {" @@ -280,14 +282,14 @@ Frequency: - - -[format_frequency(radio:frequency)] +[format_frequency(S.frequency)] + +

Code: - - -[radio:code] +[S.code] + +
"} if (41) //crew manifest @@ -611,7 +613,7 @@ Code: active1 = find_record("id", href_list["target"], data_core.general) if(active1) active2 = find_record("id", href_list["target"], data_core.medical) - loc:mode = 441 + pda.mode = 441 mode = 441 if(!active2) active1 = null @@ -620,25 +622,28 @@ Code: active1 = find_record("id", href_list["target"], data_core.general) if(active1) active3 = find_record("id", href_list["target"], data_core.security) - loc:mode = 451 + pda.mode = 451 mode = 451 if(!active3) active1 = null if("Send Signal") spawn( 0 ) - radio:send_signal("ACTIVATE") + var/obj/item/radio/integrated/signal/S = radio + S.send_signal("ACTIVATE") return if("Signal Frequency") - var/new_frequency = sanitize_frequency(radio:frequency + text2num(href_list["sfreq"])) - radio:set_frequency(new_frequency) + var/obj/item/radio/integrated/signal/S = radio + var/new_frequency = sanitize_frequency(S.frequency + text2num(href_list["sfreq"])) + S.set_frequency(new_frequency) if("Signal Code") - radio:code += text2num(href_list["scode"]) - radio:code = round(radio:code) - radio:code = min(100, radio:code) - radio:code = max(1, radio:code) + var/obj/item/radio/integrated/signal/S = radio + S.code += text2num(href_list["scode"]) + S.code = round(S.code) + S.code = min(100, S.code) + S.code = max(1, S.code) if("Status") switch(href_list["statdisp"]) @@ -657,7 +662,7 @@ Code: if("Power Select") var/pnum = text2num(href_list["target"]) powmonitor = powermonitors[pnum] - loc:mode = 433 + pda.mode = 433 mode = 433 if("Supply Orders") @@ -762,4 +767,4 @@ Code: menu += "No bots found.
" return - return menu \ No newline at end of file + return menu diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 5e6a85914ed..a7b4d29e2e1 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -11,11 +11,12 @@ origin_tech = "syndicate=4;magnets=4" var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_item = /obj/item/weapon/cigbutt - var/saved_icon = 'icons/obj/clothing/masks.dmi' - var/saved_icon_state = "cigbutt" - var/saved_overlays = null - var/saved_underlays = null + var/saved_appearance = null + +/obj/item/device/chameleon/New() + ..() + var/obj/item/weapon/cigbutt/butt = /obj/item/weapon/cigbutt + saved_appearance = initial(butt.appearance) /obj/item/device/chameleon/dropped() disrupt() @@ -32,14 +33,13 @@ if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear)) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) user << "Scanned [target]." - saved_item = target.type - saved_icon = target.icon - saved_icon_state = target.icon_state - saved_overlays = target.overlays - saved_underlays = target.underlays + var/obj/temp = new/obj() + temp.appearance = target.appearance + temp.layer = initial(target.layer) // scanning things in your inventory + saved_appearance = temp.appearance /obj/item/device/chameleon/proc/toggle() - if(!can_use || !saved_item) return + if(!can_use || !saved_appearance) return if(active_dummy) eject_all() playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) @@ -53,11 +53,8 @@ qdel(T) else playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - var/obj/O = new saved_item(src) - if(!O) return var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc) - C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, saved_underlays, src) - qdel(O) + C.activate(usr, saved_appearance, src) usr << "You activate \the [src]." var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' @@ -89,18 +86,11 @@ name = "" desc = "" density = 0 - anchored = 1 var/can_move = 1 var/obj/item/device/chameleon/master = null -/obj/effect/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, new_underlays, obj/item/device/chameleon/C) - name = O.name - desc = O.desc - icon = new_icon - icon_state = new_iconstate - overlays = new_overlays - underlays = new_underlays - dir = O.dir +/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/device/chameleon/C) + appearance = saved_appearance M.loc = src master = C master.active_dummy = src diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 55c4ae39336..076c4385658 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -20,8 +20,7 @@ /obj/item/device/radio/intercom/attack_ai(mob/user) src.add_fingerprint(user) - spawn (0) - attack_self(user) + attack_self(user) /obj/item/device/radio/intercom/attack_paw(mob/user) return src.attack_hand(user) @@ -29,8 +28,7 @@ /obj/item/device/radio/intercom/attack_hand(mob/user) src.add_fingerprint(user) - spawn (0) - attack_self(user) + attack_self(user) /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 954302bf055..639e59c9008 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -543,10 +543,10 @@ return b_stat = !( b_stat ) if(!istype(src, /obj/item/device/radio/beacon)) - if (b_stat) - user.show_message("The radio can now be attached and modified!") + if(b_stat) + user << "The radio can now be attached and modified!" else - user.show_message("The radio can no longer be modified or attached!") + user << "The radio can no longer be modified or attached!" updateDialog() //Foreach goto(83) add_fingerprint(user) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 32fdb40f65b..6a76998e260 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -114,7 +114,8 @@ MASS SPECTROMETER // Used by the PDA medical scanner too /proc/healthscan(mob/living/user, mob/living/M, mode = 1) - + if(user.stat || user.eye_blind) + return //Damage specifics var/oxy_loss = M.getOxyLoss() var/tox_loss = M.getToxLoss() @@ -199,8 +200,8 @@ MASS SPECTROMETER if(CI.status == ORGAN_ROBOTIC) implant_detect += "[H.name] is modified with a [CI.name].
" if(implant_detect) - user.show_message("Detected cybernetic modifications:") - user.show_message("[implant_detect]") + user << "Detected cybernetic modifications:" + user << "[implant_detect]" /proc/chemscan(mob/living/user, mob/living/M) if(ishuman(M)) @@ -250,11 +251,13 @@ MASS SPECTROMETER /obj/item/device/analyzer/attack_self(mob/user) - if (user.stat) + add_fingerprint(user) + + if (user.stat || user.eye_blind) return var/turf/location = user.loc - if (!( istype(location, /turf) )) + if(!istype(location)) return var/datum/gas_mixture/environment = location.return_air() @@ -262,43 +265,46 @@ MASS SPECTROMETER var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() - user.show_message("Results:", 1) + user << "Results:" if(abs(pressure - ONE_ATMOSPHERE) < 10) - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) + user << "Pressure: [round(pressure,0.1)] kPa" else - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) + user << "Pressure: [round(pressure,0.1)] kPa" if(total_moles) - var/o2_concentration = environment.oxygen/total_moles - var/n2_concentration = environment.nitrogen/total_moles - var/co2_concentration = environment.carbon_dioxide/total_moles - var/plasma_concentration = environment.toxins/total_moles + var/list/env_gases = environment.gases + + environment.assert_gases(arglist(hardcoded_gases)) + var/o2_concentration = env_gases["o2"][MOLES]/total_moles + var/n2_concentration = env_gases["n2"][MOLES]/total_moles + var/co2_concentration = env_gases["co2"][MOLES]/total_moles + var/plasma_concentration = env_gases["plasma"][MOLES]/total_moles + environment.garbage_collect() - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration) if(abs(n2_concentration - N2STANDARD) < 20) - user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1) + user << "Nitrogen: [round(n2_concentration*100)] %" else - user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1) + user << "Nitrogen: [round(n2_concentration*100)] %" if(abs(o2_concentration - O2STANDARD) < 2) - user.show_message("Oxygen: [round(o2_concentration*100)] %", 1) + user << "Oxygen: [round(o2_concentration*100)] %" else - user.show_message("Oxygen: [round(o2_concentration*100)] %", 1) + user << "Oxygen: [round(o2_concentration*100)] %" if(co2_concentration > 0.01) - user.show_message("CO2: [round(co2_concentration*100)] %", 1) + user << "CO2: [round(co2_concentration*100)] %" else - user.show_message("CO2: [round(co2_concentration*100)] %", 1) + user << "CO2: [round(co2_concentration*100)] %" if(plasma_concentration > 0.01) - user.show_message("Plasma: [round(plasma_concentration*100)] %", 1) + user << "Plasma: [round(plasma_concentration*100)] %" - if(unknown_concentration > 0.01) - user.show_message("Unknown: [round(unknown_concentration*100)] %", 1) + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + var/gas_concentration = env_gases[id][MOLES]/total_moles + user << "[env_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %" + user << "Temperature: [round(environment.temperature-T0C)] °C" - user.show_message("Temperature: [round(environment.temperature-T0C)] °C", 1) - - src.add_fingerprint(user) - return /obj/item/device/mass_spectrometer desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." @@ -327,7 +333,7 @@ MASS SPECTROMETER icon_state = initial(icon_state) /obj/item/device/mass_spectrometer/attack_self(mob/user) - if (user.stat) + if (user.stat || user.eye_blind) return if (crit_fail) user << "This device has critically failed and is no longer functional!" @@ -340,7 +346,7 @@ MASS SPECTROMETER for(var/datum/reagent/R in reagents.reagent_list) if(R.id != "blood") reagents.clear_reagents() - user.show_message("The sample was contaminated! Please insert another sample.", 1) + user << "The sample was contaminated! Please insert another sample." return else blood_traces = params2list(R.data["trace_chem"]) @@ -367,7 +373,7 @@ MASS SPECTROMETER dat += "" user << dat reagents.clear_reagents() - return + /obj/item/device/mass_spectrometer/adv name = "advanced mass-spectrometer" @@ -389,32 +395,34 @@ MASS SPECTROMETER materials = list(MAT_METAL=30, MAT_GLASS=20) /obj/item/device/slime_scanner/attack(mob/living/M, mob/living/user) + if(user.stat || user.eye_blind) + return if (!isslime(M)) - user.show_message("This device can only scan slimes!", 1) + user << "This device can only scan slimes!" return var/mob/living/simple_animal/slime/T = M - user.show_message("Slime scan results:", 1) - user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby"), 1) - user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition()), 1) + user << "Slime scan results:" + user << "[T.colour] [T.is_adult ? "adult" : "baby"] slime" + user << "Nutrition: [T.nutrition]/[T.get_max_nutrition()]" if (T.nutrition < T.get_starve_nutrition()) - user.show_message("Warning: slime is starving!", 1) + user << "Warning: slime is starving!" else if (T.nutrition < T.get_hunger_nutrition()) - user.show_message("Warning: slime is hungry", 1) - user.show_message("Electric change strength: [T.powerlevel]", 1) - user.show_message("Health: [T.health]", 1) + user << "Warning: slime is hungry" + user << "Electric change strength: [T.powerlevel]" + user << "Health: [T.health]" if (T.slime_mutation[4] == T.colour) - user.show_message("This slime does not evolve any further.", 1) + user << "This slime does not evolve any further." else if (T.slime_mutation[3] == T.slime_mutation[4]) if (T.slime_mutation[2] == T.slime_mutation[1]) - user.show_message("Possible mutation: [T.slime_mutation[3]]", 1) - user.show_message("Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting", 1) + user << "Possible mutation: [T.slime_mutation[3]]" + user << "Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting" else - user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)", 1) - user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1) + user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)" + user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting" else - user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]", 1) - user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1) + user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]" + user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting" if (T.cores > 1) - user.show_message("Anomalious slime core amount detected", 1) - user.show_message("Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]", 1) + user << "Anomalious slime core amount detected" + user << "Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index f217989a655..af8237a5e70 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -40,16 +40,15 @@ effective or pretty fucking useless. add_logs(user, null, "knocked down people in the area", src) for(var/mob/living/carbon/human/M in ultra_range(10, user, 1)) - spawn() - if(prob(50)) + if(prob(50)) - M.Weaken(rand(10,20)) - if(prob(25)) - M.Stun(rand(5,10)) - M << "You feel a tremendous, paralyzing wave flood your mind." + M.Weaken(rand(10,20)) + if(prob(25)) + M.Stun(rand(5,10)) + M << "You feel a tremendous, paralyzing wave flood your mind." - else - M << "You feel a sudden, electric jolt travel through your head." + else + M << "You feel a sudden, electric jolt travel through your head." playsound(src.loc, 'sound/misc/interference.ogg', 50, 1) user << "You trigger [src]." diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 968ac08cf1d..218c7c72213 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -175,14 +175,15 @@ var/list/world_uplinks = list() return 0 //Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it) /obj/item/device/radio/uplink/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/antag_spawner/nuke_ops)) - var/obj/item/weapon/antag_spawner/nuke_ops/S = W - if(!S.used) - hidden_uplink.uses += S.TC_cost - qdel(S) - user << "Teleporter refunded." - else - user << "This teleporter is already used!" + if(istype(W)) + for(var/path in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/D = path + if(initial(D.item) == W.type && initial(D.refundable)) + hidden_uplink.uses += (D.cost) + hidden_uplink.used_TC -= initial(D.cost) + user << "[W] refunded." + qdel(W) + return // PRESET UPLINKS // A collection of preset uplinks. diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 46aebec6018..c1c8fef41a7 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -17,11 +17,14 @@ var/is_cyborg = 0 // It's 1 if module is used by a cyborg, and uses its storage var/datum/robot_energy_storage/source var/cost = 1 // How much energy from storage it costs + var/merge_type = null // This path and its children should merge with this stack, defaults to src.type /obj/item/stack/New(var/loc, var/amount=null) ..() if (amount) src.amount = amount + if(!merge_type) + merge_type = src.type return /obj/item/stack/Destroy() @@ -208,19 +211,19 @@ S.add(transfer) /obj/item/stack/Crossed(obj/o) - if(istype(o, src.type) && !o.throwing) + if(istype(o, merge_type) && !o.throwing) merge(o) return ..() /obj/item/stack/hitby(atom/movable/AM, skip, hitpush) - if(istype(AM, src.type)) + if(istype(AM, merge_type)) merge(AM) return ..() /obj/item/stack/attack_hand(mob/user) if (user.get_inactive_hand() == src) if(zero_amount()) return - var/obj/item/stack/F = new src.type( user, 1) + var/obj/item/stack/F = new src.type(user, 1) . = F F.copy_evidences(src) user.put_in_hands(F) @@ -234,7 +237,7 @@ return /obj/item/stack/attackby(obj/item/W, mob/user, params) - if(istype(W, src.type)) + if(istype(W, merge_type)) var/obj/item/stack/S = W merge(S) user << "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s." @@ -268,4 +271,4 @@ src.max_res_amount = max_res_amount src.time = time src.one_per_turf = one_per_turf - src.on_floor = on_floor \ No newline at end of file + src.on_floor = on_floor diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 309bea1a0de..7fce1577be4 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -422,7 +422,7 @@ if(istype(target, /obj/effect/decal/cleanable)) target = target.loc if(is_type_in_list(target,validSurfaces)) - + var/temp = "rune" if(letters.Find(drawtype)) temp = "letter" @@ -1106,13 +1106,13 @@ if (cooldown < world.time) cooldown = world.time + 1800 //3 minutes user.visible_message("[user] presses a button on [src].", "You activate [src], it plays a loud noise!", "You hear the click of a button.") - spawn(5) //gia said so - icon_state = "nuketoy" - playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0) - sleep(135) - icon_state = "nuketoycool" - sleep(cooldown - world.time) - icon_state = "nuketoyidle" + sleep(5) + icon_state = "nuketoy" + playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0) + sleep(135) + icon_state = "nuketoycool" + sleep(cooldown - world.time) + icon_state = "nuketoyidle" else var/timeleft = (cooldown - world.time) user << "Nothing happens, and '[round(timeleft/10)]' appears on a small display." diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 125ba5e8d48..3eb2d6aa3b7 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -60,13 +60,6 @@ AI MODULES user << "Upload complete. [reciever]'s laws have been modified." reciever.show_laws() reciever.law_change_counter++ - if(isAI(reciever)) - var/mob/living/silicon/ai/A = reciever - for(var/mob/living/silicon/robot/R in A.connected_robots) - if(R.lawupdate) - R << "From now on, these are your laws:" - R.show_laws() - R.law_change_counter++ var/time = time2text(world.realtime,"hh:mm:ss") lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [reciever.name]([reciever.key]).[law2log ? " The law specified [law2log]" : ""]") diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 96c48aab975..2695041736a 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -239,8 +239,9 @@ /obj/effect/chrono_field/return_air() //we always have nominal air and temperature var/datum/gas_mixture/GM = new - GM.oxygen = MOLES_O2STANDARD - GM.nitrogen = MOLES_N2STANDARD + GM.assert_gases("o2","n2") + GM.gases["o2"][MOLES] = MOLES_O2STANDARD + GM.gases["n2"][MOLES] = MOLES_N2STANDARD GM.temperature = T20C return GM diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f81fc5dd559..40f851772f4 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -450,7 +450,8 @@ busy = 0 update_icon() return - H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) + if(!H.suiciding && !(H.disabilities & NOCLONE)) + H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") busy = 1 diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 636145d7452..047aa449f2c 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -12,13 +12,24 @@ var/list/fields var/list/add_mutations = list() var/list/remove_mutations = list() + + var/list/add_mutations_static = list() + var/list/remove_mutations_static = list() + var/used = 0 /obj/item/weapon/dnainjector/attack_paw(mob/user) return attack_hand(user) +/obj/item/weapon/dnainjector/proc/prepare() + for(var/mut_key in add_mutations_static) + add_mutations.Add(mutations_list[mut_key]) + for(var/mut_key in remove_mutations_static) + remove_mutations.Add(mutations_list[mut_key]) /obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user) + prepare() + if(M.has_dna() && !(M.disabilities & NOCLONE)) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" @@ -76,170 +87,123 @@ /obj/item/weapon/dnainjector/antihulk name = "\improper DNA injector (Anti-Hulk)" desc = "Cures green skin." - New() - ..() - remove_mutations.Add(mutations_list[HULK]) + remove_mutations_static = list(HULK) /obj/item/weapon/dnainjector/hulkmut name = "\improper DNA injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." - New() - ..() - add_mutations.Add(mutations_list[HULK]) + add_mutations_static = list(HULK) + /obj/item/weapon/dnainjector/xraymut name = "\improper DNA injector (Xray)" desc = "Finally you can see what the Captain does." - New() - ..() - add_mutations.Add(mutations_list[XRAY]) + add_mutations_static = list(XRAY) /obj/item/weapon/dnainjector/antixray name = "\improper DNA injector (Anti-Xray)" desc = "It will make you see harder." - New() - ..() - remove_mutations.Add(mutations_list[XRAY]) + remove_mutations_static = list(XRAY) ///////////////////////////////////// /obj/item/weapon/dnainjector/antiglasses name = "\improper DNA injector (Anti-Glasses)" desc = "Toss away those glasses!" - New() - ..() - remove_mutations.Add(mutations_list[BADSIGHT]) + remove_mutations_static = list(BADSIGHT) /obj/item/weapon/dnainjector/glassesmut name = "\improper DNA injector (Glasses)" desc = "Will make you need dorkish glasses." - New() - ..() - add_mutations.Add(mutations_list[BADSIGHT]) + add_mutations_static = list(BADSIGHT) /obj/item/weapon/dnainjector/epimut name = "\improper DNA injector (Epi.)" desc = "Shake shake shake the room!" - New() - ..() - add_mutations.Add(mutations_list[EPILEPSY]) + add_mutations_static = list(EPILEPSY) /obj/item/weapon/dnainjector/antiepi name = "\improper DNA injector (Anti-Epi.)" desc = "Will fix you up from shaking the room." - New() - ..() - remove_mutations.Add(mutations_list[EPILEPSY]) + remove_mutations_static = list(EPILEPSY) //////////////////////////////////// /obj/item/weapon/dnainjector/anticough name = "\improper DNA injector (Anti-Cough)" desc = "Will stop that aweful noise." - New() - ..() - remove_mutations.Add(mutations_list[COUGH]) + remove_mutations_static = list(COUGH) /obj/item/weapon/dnainjector/coughmut name = "\improper DNA injector (Cough)" desc = "Will bring forth a sound of horror from your throat." - New() - ..() - add_mutations.Add(mutations_list[COUGH]) + add_mutations_static = list(COUGH) /obj/item/weapon/dnainjector/antidwarf name = "\improper DNA injector (Anti-Dwarfism)" desc = "Helps you grow big and strong." - New() - ..() - remove_mutations.Add(mutations_list[DWARFISM]) + remove_mutations_static = list(DWARFISM) /obj/item/weapon/dnainjector/dwarf name = "\improper DNA injector (Dwarfism)" desc = "Its a small world after all." - New() - ..() - add_mutations.Add(mutations_list[DWARFISM]) + add_mutations_static = list(DWARFISM) /obj/item/weapon/dnainjector/clumsymut name = "\improper DNA injector (Clumsy)" desc = "Makes clown minions." - New() - ..() - add_mutations.Add(mutations_list[CLOWNMUT]) + add_mutations_static = list(CLOWNMUT) /obj/item/weapon/dnainjector/anticlumsy name = "\improper DNA injector (Anti-Clumy)" desc = "Apply this for Security Clown." - New() - ..() - remove_mutations.Add(mutations_list[CLOWNMUT]) + remove_mutations_static = list(CLOWNMUT) /obj/item/weapon/dnainjector/antitour name = "\improper DNA injector (Anti-Tour.)" desc = "Will cure tourrets." - New() - ..() - remove_mutations.Add(mutations_list[TOURETTES]) + remove_mutations_static = list(TOURETTES) /obj/item/weapon/dnainjector/tourmut name = "\improper DNA injector (Tour.)" desc = "Gives you a nasty case off tourrets." - New() - ..() - add_mutations.Add(mutations_list[TOURETTES]) + add_mutations_static = list(TOURETTES) /obj/item/weapon/dnainjector/stuttmut name = "\improper DNA injector (Stutt.)" desc = "Makes you s-s-stuttterrr" - New() - ..() - add_mutations.Add(mutations_list[NERVOUS]) + add_mutations_static = list(NERVOUS) /obj/item/weapon/dnainjector/antistutt name = "\improper DNA injector (Anti-Stutt.)" desc = "Fixes that speaking impairment." - New() - ..() - remove_mutations.Add(mutations_list[NERVOUS]) + remove_mutations_static = list(NERVOUS) /obj/item/weapon/dnainjector/antifire name = "\improper DNA injector (Anti-Fire)" desc = "Cures fire." - New() - ..() - remove_mutations.Add(mutations_list[COLDRES]) + remove_mutations_static = list(COLDRES) /obj/item/weapon/dnainjector/firemut name = "\improper DNA injector (Fire)" desc = "Gives you fire." - New() - ..() - add_mutations.Add(mutations_list[COLDRES]) + add_mutations_static = list(COLDRES) /obj/item/weapon/dnainjector/blindmut name = "\improper DNA injector (Blind)" desc = "Makes you not see anything." - New() - ..() - add_mutations.Add(mutations_list[BLINDMUT]) + add_mutations_static = list(BLINDMUT) /obj/item/weapon/dnainjector/antiblind name = "\improper DNA injector (Anti-Blind)" desc = "ITS A MIRACLE!!!" - New() - ..() - remove_mutations.Add(mutations_list[BLINDMUT]) + remove_mutations_static = list(BLINDMUT) /obj/item/weapon/dnainjector/antitele name = "\improper DNA injector (Anti-Tele.)" desc = "Will make you not able to control your mind." - New() - ..() - remove_mutations.Add(mutations_list[TK]) + remove_mutations_static = list(TK) /obj/item/weapon/dnainjector/telemut name = "\improper DNA injector (Tele.)" desc = "Super brain man!" - New() - ..() - add_mutations.Add(mutations_list[TK]) + add_mutations_static = list(TK) /obj/item/weapon/dnainjector/telemut/darkbundle name = "\improper DNA injector" @@ -248,143 +212,101 @@ /obj/item/weapon/dnainjector/deafmut name = "\improper DNA injector (Deaf)" desc = "Sorry, what did you say?" - New() - ..() - add_mutations.Add(mutations_list[DEAFMUT]) + add_mutations_static = list(DEAFMUT) /obj/item/weapon/dnainjector/antideaf name = "\improper DNA injector (Anti-Deaf)" desc = "Will make you hear once more." - New() - ..() - remove_mutations.Add(mutations_list[DEAFMUT]) + remove_mutations_static = list(DEAFMUT) /obj/item/weapon/dnainjector/h2m name = "\improper DNA injector (Human > Monkey)" desc = "Will make you a flea bag." - New() - ..() - add_mutations.Add(mutations_list[RACEMUT]) + add_mutations_static = list(RACEMUT) /obj/item/weapon/dnainjector/m2h name = "\improper DNA injector (Monkey > Human)" desc = "Will make you...less hairy." - New() - ..() - remove_mutations.Add(mutations_list[RACEMUT]) + remove_mutations_static = list(RACEMUT) /obj/item/weapon/dnainjector/antichameleon name = "\improper DNA injector (Anti-Chameleon)" - New() - ..() - remove_mutations.Add(mutations_list[CHAMELEON]) + remove_mutations_static = list(CHAMELEON) /obj/item/weapon/dnainjector/chameleonmut name = "\improper DNA injector (Chameleon)" - New() - ..() - add_mutations.Add(mutations_list[CHAMELEON]) + add_mutations_static = list(CHAMELEON) /obj/item/weapon/dnainjector/antiwacky name = "\improper DNA injector (Anti-Wacky)" - New() - ..() - remove_mutations.Add(mutations_list[WACKY]) + remove_mutations_static = list(WACKY) /obj/item/weapon/dnainjector/wackymut name = "\improper DNA injector (Wacky)" - New() - ..() - add_mutations.Add(mutations_list[WACKY]) + add_mutations_static = list(WACKY) /obj/item/weapon/dnainjector/antimute name = "\improper DNA injector (Anti-Mute)" - New() - ..() - remove_mutations.Add(mutations_list[MUT_MUTE]) + remove_mutations_static = list(MUT_MUTE) /obj/item/weapon/dnainjector/mutemut name = "\improper DNA injector (Mute)" - New() - ..() - add_mutations.Add(mutations_list[MUT_MUTE]) + add_mutations_static = list(MUT_MUTE) /obj/item/weapon/dnainjector/antismile name = "\improper DNA injector (Anti-Smile)" - New() - ..() - remove_mutations.Add(mutations_list[SMILE]) + remove_mutations_static = list(SMILE) /obj/item/weapon/dnainjector/smilemut name = "\improper DNA injector (Smile)" - New() - ..() - add_mutations.Add(mutations_list[SMILE]) + add_mutations_static = list(SMILE) /obj/item/weapon/dnainjector/unintelligablemut name = "\improper DNA injector (Unintelligable)" - New() - ..() - add_mutations.Add(mutations_list[UNINTELLIGABLE]) + add_mutations_static = list(UNINTELLIGABLE) /obj/item/weapon/dnainjector/antiunintelligable name = "\improper DNA injector (Anti-Unintelligable)" - New() - ..() - remove_mutations.Add(mutations_list[UNINTELLIGABLE]) + remove_mutations_static = list(UNINTELLIGABLE) /obj/item/weapon/dnainjector/swedishmut name = "\improper DNA injector (Swedish)" - New() - ..() - add_mutations.Add(mutations_list[SWEDISH]) + add_mutations_static = list(SWEDISH) /obj/item/weapon/dnainjector/antiswedish name = "\improper DNA injector (Anti-Swedish)" - New() - ..() - remove_mutations.Add(mutations_list[SWEDISH]) + remove_mutations_static = list(SWEDISH) /obj/item/weapon/dnainjector/chavmut name = "\improper DNA injector (Chav)" - New() - ..() - add_mutations.Add(mutations_list[CHAV]) + add_mutations_static = list(CHAV) /obj/item/weapon/dnainjector/antichav name = "\improper DNA injector (Anti-Chav)" - New() - ..() - remove_mutations.Add(mutations_list[CHAV]) + remove_mutations_static = list(CHAV) /obj/item/weapon/dnainjector/elvismut name = "\improper DNA injector (Elvis)" - New() - ..() - add_mutations.Add(mutations_list[ELVIS]) + add_mutations_static = list(ELVIS) /obj/item/weapon/dnainjector/antielvis name = "\improper DNA injector (Anti-Elvis)" - New() - ..() - remove_mutations.Add(mutations_list[ELVIS]) + remove_mutations_static = list(ELVIS) /obj/item/weapon/dnainjector/lasereyesmut name = "\improper DNA injector (Laser Eyes)" - New() - ..() - add_mutations.Add(mutations_list[LASEREYES]) + add_mutations_static = list(LASEREYES) /obj/item/weapon/dnainjector/antilasereyes name = "\improper DNA injector (Anti-Laser Eyes)" - New() - ..() - remove_mutations.Add(mutations_list[LASEREYES]) + remove_mutations_static = list(LASEREYES) /obj/item/weapon/dnainjector/timed var/duration = 600 /obj/item/weapon/dnainjector/timed/inject(mob/living/carbon/M, mob/user) + prepare() + if(M.has_dna() && !(M.disabilities & NOCLONE)) if(M.stat == DEAD) //prevents dead people from having their DNA changed user << "You can't modify [M]'s DNA while \he's dead." @@ -436,13 +358,9 @@ /obj/item/weapon/dnainjector/timed/hulk name = "\improper DNA injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." - New() - ..() - add_mutations.Add(mutations_list[HULK]) + add_mutations_static = list(HULK) /obj/item/weapon/dnainjector/timed/h2m name = "\improper DNA injector (Human > Monkey)" desc = "Will make you a flea bag." - New() - ..() - add_mutations.Add(mutations_list[RACEMUT]) + add_mutations_static = list(RACEMUT) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 723725e46f5..44f29a96e7a 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -198,7 +198,8 @@ //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... //Transfer 5% of current tank air contents to turf var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount) - air_transfer.toxins = air_transfer.toxins * 5 + if(air_transfer.gases["plasma"]) + air_transfer.gases["plasma"][MOLES] *= 5 target.assume_air(air_transfer) //Burn it based on transfered gas target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 0d1c1723f68..8339ed98c7c 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -59,7 +59,7 @@ /obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up update_mob() - explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball. + explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. qdel(src) /obj/item/weapon/grenade/iedcasing/examine(mob/user) diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 5d73339b164..7c4e0dcce55 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -23,8 +23,7 @@ user << "You'll need to get closer to see any more." return for(var/obj/item/I in loadedItems) - spawn(0) - user << "\icon [I] It has \the [I] loaded." + user << "\icon [I] It has \the [I] loaded." if(tank) user << "\icon [tank] It has \the [tank] mounted onto it." diff --git a/code/game/objects/items/weapons/singularityhammer.dm b/code/game/objects/items/weapons/singularityhammer.dm index e8a99f1a441..e4781e32d2b 100644 --- a/code/game/objects/items/weapons/singularityhammer.dm +++ b/code/game/objects/items/weapons/singularityhammer.dm @@ -93,13 +93,12 @@ "You feel a powerful shock course through your body sending you flying!", \ "You hear a heavy electrical crack!") var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) + target.throw_at_fast(throw_target, 200, 4) return /obj/item/weapon/twohanded/mjollnir/attack(mob/M, mob/user) ..() - spawn(0) if(wielded) //if(charged == 5) //charged = 0 diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index deabe13233d..dacc3514ec2 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -328,12 +328,8 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded/New() ..() contents = list() - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) + for(var/i in 1 to 6) + new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g/buckshot(src) new /obj/item/ammo_box/magazine/m12g/stun(src) new /obj/item/ammo_box/magazine/m12g/dragon(src) @@ -398,15 +394,8 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg/New() ..() contents = list() - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) + for(var/i in 1 to 9) + new /obj/item/ammo_box/magazine/smgm45(src) return @@ -416,10 +405,8 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam/New() ..() contents = list() - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/m556(src) new /obj/item/ammo_box/magazine/m556(src) new /obj/item/ammo_box/a40mm(src) @@ -439,7 +426,7 @@ return /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle - desc = "A large dufflebag containing a M90gl, a magazine, and a stimpack." + desc = "A large dufflebag containing an M90gl, a magazine, four additional grenades, and a pack of Syndicate cigarettes." /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle/New() ..() diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 7e53d4a443d..db6b4701830 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -121,13 +121,8 @@ /obj/item/weapon/storage/belt/soulstone/full/New() ..() - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - + for(var/i in 1 to 6) + new /obj/item/device/soulstone(src) /obj/item/weapon/storage/belt/champion name = "championship belt" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index c08715a561e..aa0679e89b1 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -93,14 +93,9 @@ /obj/item/weapon/storage/box/gloves/New() ..() - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - + for(var/i in 1 to 7) + new /obj/item/clothing/gloves/color/latex(src) + /obj/item/weapon/storage/box/masks name = "box of sterile masks" desc = "This box contains sterile medical masks." @@ -108,14 +103,9 @@ /obj/item/weapon/storage/box/masks/New() ..() - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - + for(var/i in 1 to 7) + new /obj/item/clothing/mask/surgical(src) + /obj/item/weapon/storage/box/syringes name = "box of syringes" desc = "A box full of syringes." @@ -124,14 +114,9 @@ /obj/item/weapon/storage/box/syringes/New() ..() - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/syringe( src ) + /obj/item/weapon/storage/box/medipens name = "box of medipens" desc = "A box full of epinephrine MediPens." @@ -139,14 +124,9 @@ /obj/item/weapon/storage/box/medipens/New() ..() - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + /obj/item/weapon/storage/box/medipens/utility name = "stimpack value kit" desc = "A box with several stimpack medipens for the economical miner." @@ -154,39 +134,29 @@ /obj/item/weapon/storage/box/medipens/utility/New() ..() - new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) - + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src) + /obj/item/weapon/storage/box/beakers name = "box of beakers" icon_state = "beaker" /obj/item/weapon/storage/box/beakers/New() ..() - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/glass/beaker( src ) + /obj/item/weapon/storage/box/injectors name = "box of DNA injectors" desc = "This box contains injectors it seems." /obj/item/weapon/storage/box/injectors/New() ..() - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) - + for(var/i in 1 to 3) + new /obj/item/weapon/dnainjector/h2m(src) + for(var/i in 1 to 3) + new /obj/item/weapon/dnainjector/m2h(src) + /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." @@ -194,14 +164,9 @@ /obj/item/weapon/storage/box/flashbangs/New() ..() - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/grenade/flashbang(src) + /obj/item/weapon/storage/box/flashes name = "box of flashbulbs" desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required." @@ -209,13 +174,9 @@ /obj/item/weapon/storage/box/flashes/New() ..() - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/assembly/flash/handheld(src) - + for(var/i in 1 to 6) + new /obj/item/device/assembly/flash/handheld(src) + /obj/item/weapon/storage/box/teargas name = "box of tear gas grenades (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." @@ -223,14 +184,9 @@ /obj/item/weapon/storage/box/teargas/New() ..() - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/grenade/chem_grenade/teargas(src) + /obj/item/weapon/storage/box/emps name = "box of emp grenades" desc = "A box with 5 emp grenades." @@ -238,12 +194,9 @@ /obj/item/weapon/storage/box/emps/New() ..() - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - + for(var/i in 1 to 5) + new /obj/item/weapon/grenade/empgrenade(src) + /obj/item/weapon/storage/box/trackimp name = "boxed tracking implant kit" desc = "Box full of scum-bag tracking utensils." @@ -251,10 +204,8 @@ /obj/item/weapon/storage/box/trackimp/New() ..() - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) + for(var/i in 1 to 4) + new /obj/item/weapon/implantcase/tracking(src) new /obj/item/weapon/implanter(src) new /obj/item/weapon/implantpad(src) new /obj/item/weapon/locator(src) @@ -266,11 +217,8 @@ /obj/item/weapon/storage/box/chemimp/New() ..() - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) - new /obj/item/weapon/implantcase/chem(src) + for(var/i in 1 to 5) + new /obj/item/weapon/implantcase/chem(src) new /obj/item/weapon/implanter(src) new /obj/item/weapon/implantpad(src) @@ -281,11 +229,8 @@ /obj/item/weapon/storage/box/exileimp/New() ..() - new /obj/item/weapon/implantcase/exile(src) - new /obj/item/weapon/implantcase/exile(src) - new /obj/item/weapon/implantcase/exile(src) - new /obj/item/weapon/implantcase/exile(src) - new /obj/item/weapon/implantcase/exile(src) + for(var/i in 1 to 5) + new /obj/item/weapon/implantcase/exile(src) new /obj/item/weapon/implanter(src) /obj/item/weapon/storage/box/rxglasses @@ -295,39 +240,26 @@ /obj/item/weapon/storage/box/rxglasses/New() ..() - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - + for(var/i in 1 to 7) + new /obj/item/clothing/glasses/regular(src) + /obj/item/weapon/storage/box/drinkingglasses name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." /obj/item/weapon/storage/box/drinkingglasses/New() ..() - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - + for(var/i in 1 to 6) + new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) + /obj/item/weapon/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." /obj/item/weapon/storage/box/condimentbottles/New() ..() - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) + for(var/i in 1 to 6) + new /obj/item/weapon/reagent_containers/food/condiment(src) /obj/item/weapon/storage/box/cups name = "box of paper cups" @@ -335,14 +267,9 @@ /obj/item/weapon/storage/box/cups/New() ..() - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) + /obj/item/weapon/storage/box/donkpockets name = "box of donk-pockets" desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." @@ -350,12 +277,8 @@ /obj/item/weapon/storage/box/donkpockets/New() ..() - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) + for(var/i in 1 to 6) + new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) /obj/item/weapon/storage/box/monkeycubes name = "monkey cube box" @@ -378,9 +301,8 @@ /obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE ..() - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) + for(var/i in 1 to 3) + new /obj/item/areaeditor/permit(src) /obj/item/weapon/storage/box/ids @@ -390,14 +312,9 @@ /obj/item/weapon/storage/box/ids/New() ..() - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/card/id(src) + /obj/item/weapon/storage/box/silver_ids name = "box of spare silver IDs" desc = "Shiny IDs for important people." @@ -405,13 +322,8 @@ /obj/item/weapon/storage/box/silver_ids/New() ..() - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) - new /obj/item/weapon/card/id/silver(src) + for(var/i in 1 to 7) + new /obj/item/weapon/card/id/silver(src) /obj/item/weapon/storage/box/prisoner name = "box of prisoner IDs" @@ -436,12 +348,8 @@ /obj/item/weapon/storage/box/seccarts/New() ..() new /obj/item/weapon/cartridge/detective(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) + for(var/i in 1 to 6) + new /obj/item/weapon/cartridge/security(src) /obj/item/weapon/storage/box/firingpins name = "box of standard firing pins" @@ -450,14 +358,9 @@ /obj/item/weapon/storage/box/firingpins/New() ..() - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - + for(var/i in 1 to 7) + new /obj/item/device/firing_pin(src) + /obj/item/weapon/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." @@ -465,14 +368,9 @@ /obj/item/weapon/storage/box/handcuffs/New() ..() - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - new /obj/item/weapon/restraints/handcuffs(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/restraints/handcuffs(src) + /obj/item/weapon/storage/box/zipties name = "box of spare zipties" desc = "A box full of zipties." @@ -480,14 +378,9 @@ /obj/item/weapon/storage/box/zipties/New() ..() - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) + /obj/item/weapon/storage/box/alienhandcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." @@ -495,14 +388,9 @@ /obj/item/weapon/storage/box/alienhandcuffs/New() ..() - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - new /obj/item/weapon/restraints/handcuffs/alien(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/restraints/handcuffs/alien(src) + /obj/item/weapon/storage/box/fakesyndiesuit name = "boxed space suit and helmet" desc = "A sleek, sturdy box used to hold replica spacesuits." @@ -520,13 +408,9 @@ /obj/item/weapon/storage/box/mousetraps/New() ..() - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - + for(var/i in 1 to 6) + new /obj/item/device/assembly/mousetrap( src ) + /obj/item/weapon/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." @@ -534,14 +418,9 @@ /obj/item/weapon/storage/box/pillbottles/New() ..() - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - + for(var/i in 1 to 7) + new /obj/item/weapon/storage/pill_bottle( src ) + /obj/item/weapon/storage/box/snappops name = "snap pop box" desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." @@ -620,14 +499,9 @@ /obj/item/weapon/storage/box/deputy/New() ..() - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - new /obj/item/clothing/tie/armband/deputy(src) - + for(var/i in 1 to 7) + new /obj/item/clothing/tie/armband/deputy(src) + /obj/item/weapon/storage/box/metalfoam name = "box of metal foam grenades" desc = "To be used to rapidly seal hull breaches" @@ -635,15 +509,9 @@ /obj/item/weapon/storage/box/metalfoam/New() ..() - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) - - + for(var/i in 1 to 7) + new /obj/item/weapon/grenade/chem_grenade/metalfoam(src) + /obj/item/weapon/storage/box/hug name = "box of hugs" desc = "A special box for sensitive people." @@ -676,14 +544,9 @@ /obj/item/weapon/storage/box/rubbershot/New() ..() - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - + for(var/i in 1 to 7) + new /obj/item/ammo_casing/shotgun/rubbershot(src) + /obj/item/weapon/storage/box/lethalshot name = "box of lethal shotgun shots" desc = "A box full of lethal shots, designed for riot shotguns." @@ -698,3 +561,12 @@ new /obj/item/ammo_casing/shotgun/buckshot(src) new /obj/item/ammo_casing/shotgun/buckshot(src) new /obj/item/ammo_casing/shotgun/buckshot(src) + +/obj/item/weapon/storage/box/beanbag/New() + ..() + new /obj/item/ammo_casing/shotgun/beanbag(src) + new /obj/item/ammo_casing/shotgun/beanbag(src) + new /obj/item/ammo_casing/shotgun/beanbag(src) + new /obj/item/ammo_casing/shotgun/beanbag(src) + new /obj/item/ammo_casing/shotgun/beanbag(src) + new /obj/item/ammo_casing/shotgun/beanbag(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 67c4170031c..9183ffc92e5 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -42,9 +42,8 @@ ..() if(empty) return icon_state = pick("ointment","firefirstaid") - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) new /obj/item/weapon/reagent_containers/pill/oxandrolone(src) new /obj/item/weapon/reagent_containers/pill/oxandrolone(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) @@ -61,12 +60,10 @@ ..() if(empty) return icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") - new /obj/item/weapon/reagent_containers/syringe/charcoal(src) - new /obj/item/weapon/reagent_containers/syringe/charcoal(src) - new /obj/item/weapon/reagent_containers/syringe/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/syringe/charcoal(src) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) new /obj/item/device/healthanalyzer(src) return @@ -79,10 +76,8 @@ /obj/item/weapon/storage/firstaid/o2/New() ..() if(empty) return - new /obj/item/weapon/reagent_containers/pill/salbutamol(src) - new /obj/item/weapon/reagent_containers/pill/salbutamol(src) - new /obj/item/weapon/reagent_containers/pill/salbutamol(src) - new /obj/item/weapon/reagent_containers/pill/salbutamol(src) + for(var/i in 1 to 4) + new /obj/item/weapon/reagent_containers/pill/salbutamol(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) new /obj/item/device/healthanalyzer(src) @@ -97,10 +92,8 @@ /obj/item/weapon/storage/firstaid/brute/New() ..() if(empty) return - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) + for(var/i in 1 to 4) + new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) new /obj/item/stack/medical/gauze(src) new /obj/item/stack/medical/gauze(src) new /obj/item/device/healthanalyzer(src) @@ -168,79 +161,50 @@ /obj/item/weapon/storage/box/silver_sulf/New() ..() - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + /obj/item/weapon/storage/pill_bottle/charcoal name = "bottle of charcoal pills" desc = "Contains pills used to counter toxins." /obj/item/weapon/storage/pill_bottle/charcoal/New() ..() - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - new /obj/item/weapon/reagent_containers/pill/charcoal(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + /obj/item/weapon/storage/pill_bottle/epinephrine name = "bottle of epinephrine pills" desc = "Contains pills used to stabilize patients." /obj/item/weapon/storage/pill_bottle/epinephrine/New() ..() - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - new /obj/item/weapon/reagent_containers/pill/epinephrine(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + /obj/item/weapon/storage/pill_bottle/mutadone name = "bottle of mutadone pills" desc = "Contains pills used to treat genetic abnormalities." /obj/item/weapon/storage/pill_bottle/mutadone/New() ..() - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - new /obj/item/weapon/reagent_containers/pill/mutadone(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/mutadone(src) + /obj/item/weapon/storage/pill_bottle/mannitol name = "bottle of mannitol pills" desc = "Contains pills used to treat brain damage." /obj/item/weapon/storage/pill_bottle/mannitol/New() ..() - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - new /obj/item/weapon/reagent_containers/pill/mannitol(src) - + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/pill/mannitol(src) + /obj/item/weapon/storage/pill_bottle/stimulant name = "bottle of stimulant pills" desc = "Guaranteed to give you that extra burst of energy during a long shift!" /obj/item/weapon/storage/pill_bottle/stimulant/New() ..() - new /obj/item/weapon/reagent_containers/pill/stimulant(src) - new /obj/item/weapon/reagent_containers/pill/stimulant(src) - new /obj/item/weapon/reagent_containers/pill/stimulant(src) - new /obj/item/weapon/reagent_containers/pill/stimulant(src) - new /obj/item/weapon/reagent_containers/pill/stimulant(src) \ No newline at end of file + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index bab0a4e07e4..d740a80af20 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -82,9 +82,8 @@ /obj/item/weapon/storage/lockbox/loyalty/New() ..() - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) + for(var/i in 1 to 3) + new /obj/item/weapon/implantcase/loyalty(src) new /obj/item/weapon/implanter/loyalty(src) @@ -114,7 +113,6 @@ ..() new /obj/item/clothing/tie/medal/silver/valor(src) new /obj/item/clothing/tie/medal/bronze_heart(src) - new /obj/item/clothing/tie/medal/conduct(src) - new /obj/item/clothing/tie/medal/conduct(src) - new /obj/item/clothing/tie/medal/conduct(src) - new /obj/item/clothing/tie/medal/gold/captain(src) \ No newline at end of file + for(var/i in 1 to 3) + new /obj/item/clothing/tie/medal/conduct(src) + new /obj/item/clothing/tie/medal/gold/captain(src) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index a91ba35482c..a80a611d619 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -36,21 +36,21 @@ if (istype(W, /obj/item/weapon/screwdriver)) if (do_after(user, 20/W.toolspeed, target = src)) src.open =! src.open - user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) + user.show_message("You [open ? "open" : "close"] the service panel.", 1) return if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) - user.show_message(text("Now attempting to reset internal memory, please hold."), 1) + user.show_message("Now attempting to reset internal memory, please hold.", 1) src.l_hacking = 1 if (do_after(usr, 100/W.toolspeed, target = src)) if (prob(40)) src.l_setshort = 1 src.l_set = 0 - user.show_message(text("Internal memory reset. Please give it a few seconds to reinitialize."), 1) + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) sleep(80) src.l_setshort = 0 src.l_hacking = 0 else - user.show_message(text("Unable to reset internal memory."), 1) + user.show_message("Unable to reset internal memory.", 1) src.l_hacking = 0 else src.l_hacking = 0 return diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 6b2d688e5dd..6dc851cd335 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -158,16 +158,10 @@ /obj/item/weapon/storage/box/syndie_kit/bioterror/New() ..() - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/syringe/bioterror(src) return - /obj/item/weapon/storage/box/syndie_kit/imp_adrenal name = "boxed adrenal implant (with injector)" @@ -178,7 +172,6 @@ O.update_icon() return - /obj/item/weapon/storage/box/syndie_kit/imp_storage name = "boxed storage implant (with injector)" @@ -187,7 +180,6 @@ new /obj/item/weapon/implanter/storage(src) return - /obj/item/weapon/storage/box/syndie_kit/space name = "boxed space suit and helmet" can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) @@ -199,7 +191,6 @@ new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) return - /obj/item/weapon/storage/box/syndie_kit/emp name = "boxed EMP kit" @@ -241,30 +232,25 @@ new /obj/item/nuke_core_container(src) new /obj/item/weapon/paper/nuke_instructions(src) - /obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade - name = "boxed virus grenade kit" + name = "boxed virus grenade kit" -/obj/item/weapon/storage/box/virus_kit/tuberculosisgrenade/New() - ..() - new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/syringe(src) - new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) - return +/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/New() + ..() + new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src) + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) + new /obj/item/weapon/reagent_containers/syringe(src) + new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) + return /obj/item/weapon/storage/box/syndie_kit/tuberculosiskit - name = "boxed virus kit" - -/obj/item/weapon/storage/box/virus_kit/tuberculosiskit/New() - ..() - new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosis(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/syringe(src) - new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) - return + name = "boxed virus kit" +/obj/item/weapon/storage/box/syndie_kit/tuberculosiskit/New() + ..() + new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosis(src) + new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) + new /obj/item/weapon/reagent_containers/syringe(src) + new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) + return diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 6d7db63e8a8..fea4e6db9fc 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -54,7 +54,7 @@ var/datum/gas_mixture/G = src.air_contents.remove(num) - var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins //fuck trace gases -Pete + var/allgases = G.total_moles() if(allgases >= 0.005) return 1 @@ -73,7 +73,8 @@ /obj/item/weapon/tank/jetpack/void/New() ..() - air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/oxygen @@ -84,7 +85,8 @@ /obj/item/weapon/tank/jetpack/oxygen/New() ..() - air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/oxygen/harness name = "jet harness (oxygen)" @@ -114,7 +116,8 @@ ..() ion_trail = new /datum/effect_system/trail_follow/ion() ion_trail.set_up(src) - air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("co2") + air_contents.gases["co2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/suit diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 586e3a47ddc..0bc932047d5 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -14,13 +14,14 @@ name = "oxygen tank" desc = "A tank of oxygen." icon_state = "oxygen" - distribute_pressure = 16 + distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE force = 10 /obj/item/weapon/tank/internals/oxygen/New() ..() - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -45,13 +46,9 @@ /obj/item/weapon/tank/internals/anesthetic/New() ..() - - src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - - var/datum/gas/sleeping_agent/trace_gas = new() - trace_gas.moles = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD - - src.air_contents.trace_gases += trace_gas + air_contents.assert_gases("o2", "n2o") + air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gases["n2o"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD return /* @@ -66,9 +63,9 @@ /obj/item/weapon/tank/internals/air/New() ..() - - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - src.air_contents.nitrogen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.assert_gases("o2","n2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gases["n2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD return @@ -86,8 +83,8 @@ /obj/item/weapon/tank/internals/plasma/New() ..() - - src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W, mob/user, params) @@ -105,7 +102,8 @@ /obj/item/weapon/tank/internals/plasma/full/New() ..() - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -120,14 +118,14 @@ /obj/item/weapon/tank/internals/plasmaman/New() ..() - - src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/plasmaman/full/New() ..() - - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -139,8 +137,8 @@ /obj/item/weapon/tank/internals/plasmaman/belt/full/New() ..() - - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -156,13 +154,14 @@ slot_flags = SLOT_BELT w_class = 2 force = 4 - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) /obj/item/weapon/tank/internals/emergency_oxygen/New() ..() - src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/emergency_oxygen/engi diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index eff1d524c21..57054c54afa 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -1,7 +1,3 @@ -#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3) -#define TANK_MIN_RELEASE_PRESSURE 0 -#define TANK_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE*O2STANDARD) - /obj/item/weapon/tank name = "tank" icon = 'icons/obj/tank.dmi' @@ -119,10 +115,11 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = hands_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "tanks", name, 400, 200, state = inventory_state) + ui = new(user, src, ui_key, "tanks", name, 400, 200, master_ui, state) ui.open() /obj/item/weapon/tank/get_ui_data() diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 029c0fd0238..2406d7b9d7b 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -156,7 +156,7 @@ Frequency: if(turfs.len) L["None (Dangerous)"] = pick(turfs) var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L - if ((user.get_active_hand() != src || user.stat || user.restrained())) + if (user.get_active_hand() != src || user.incapacitated()) return if(active_portals >= 3) user.show_message("\The [src] is recharging!") @@ -166,7 +166,6 @@ Frequency: var/obj/effect/portal/P = new /obj/effect/portal(get_turf(src), T, src) try_move_adjacent(P) active_portals++ - src.add_fingerprint(user) - return + add_fingerprint(user) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3e716979df8..2cd7a772f8c 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -17,6 +17,7 @@ /obj/Destroy() if(!istype(src, /obj/machinery)) SSobj.processing.Remove(src) // TODO: Have a processing bitflag to reduce on unnecessary loops through the processing lists + SStgui.close_uis(src) return ..() /obj/assume_air(datum/gas_mixture/giver) @@ -194,7 +195,7 @@ /obj/proc/tesla_act(var/power) being_shocked = 1 - var/power_bounced = power / 1.3 - tesla_zap(src, 5, power_bounced) + var/power_bounced = power / 2 + tesla_zap(src, 3, power_bounced) spawn(10) being_shocked = 0 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 38a348bbfcb..cbddbfeaff7 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -33,6 +33,10 @@ if(!opened) // if closed, any item at the crate's loc is put in the contents take_contents() +/obj/structure/closet/Destroy() + dump_contents() + return ..() + /obj/structure/closet/update_icon() overlays.Cut() if(!opened) @@ -167,7 +171,6 @@ contents_explosion(severity, target) if(loc && ispath(material_drop) && !(flags & NODECONSTRUCT)) new material_drop(loc) - dump_contents() qdel(src) ..() @@ -176,7 +179,6 @@ if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) health -= Proj.damage if(health <= 0) - dump_contents() qdel(src) return @@ -184,12 +186,10 @@ if(user.environment_smash) user.do_attack_animation(src) visible_message("[user] destroys \the [src].") - dump_contents() qdel(src) /obj/structure/closet/blob_act() if(prob(75)) - dump_contents() qdel(src) diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index 46dc772b5fe..d3e7f0156ea 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -43,12 +43,10 @@ /obj/structure/closet/lasertag/red/New() ..() - new /obj/item/weapon/gun/energy/laser/redtag(src) - new /obj/item/weapon/gun/energy/laser/redtag(src) - new /obj/item/weapon/gun/energy/laser/redtag(src) - new /obj/item/clothing/suit/redtag(src) - new /obj/item/clothing/suit/redtag(src) - new /obj/item/clothing/suit/redtag(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser/redtag(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/redtag(src) new /obj/item/clothing/head/helmet/redtaghelm(src) @@ -59,10 +57,8 @@ /obj/structure/closet/lasertag/blue/New() ..() - new /obj/item/weapon/gun/energy/laser/bluetag(src) - new /obj/item/weapon/gun/energy/laser/bluetag(src) - new /obj/item/weapon/gun/energy/laser/bluetag(src) - new /obj/item/clothing/suit/bluetag(src) - new /obj/item/clothing/suit/bluetag(src) - new /obj/item/clothing/suit/bluetag(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser/bluetag(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/bluetag(src) new /obj/item/clothing/head/helmet/bluetaghelm(src) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 1b5cdee6d7e..e2d7f9c2ac1 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -22,17 +22,10 @@ /obj/structure/closet/gimmick/russian/New() ..() - new /obj/item/clothing/head/ushanka(src) - new /obj/item/clothing/head/ushanka(src) - new /obj/item/clothing/head/ushanka(src) - new /obj/item/clothing/head/ushanka(src) - new /obj/item/clothing/head/ushanka(src) - new /obj/item/clothing/under/soviet(src) - new /obj/item/clothing/under/soviet(src) - new /obj/item/clothing/under/soviet(src) - new /obj/item/clothing/under/soviet(src) - new /obj/item/clothing/under/soviet(src) - + for(var/i in 1 to 5) + new /obj/item/clothing/head/ushanka(src) + for(var/i in 1 to 5) + new /obj/item/clothing/under/soviet(src) /obj/structure/closet/gimmick/tacticool name = "tacticool gear closet" @@ -67,50 +60,38 @@ /obj/structure/closet/thunderdome/tdred/New() ..() - new /obj/item/clothing/suit/armor/tdome/red(src) - new /obj/item/clothing/suit/armor/tdome/red(src) - new /obj/item/clothing/suit/armor/tdome/red(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/tdome/red(src) + for(var/i in 1 to 3) + new /obj/item/weapon/melee/energy/sword/saber(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser(src) + for(var/i in 1 to 3) + new /obj/item/weapon/melee/baton/loaded(src) + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/flashbangs(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/thunderdome(src) + /obj/structure/closet/thunderdome/tdgreen name = "green-team Thunderdome closet" icon_door = "green" /obj/structure/closet/thunderdome/tdgreen/New() ..() - new /obj/item/clothing/suit/armor/tdome/green(src) - new /obj/item/clothing/suit/armor/tdome/green(src) - new /obj/item/clothing/suit/armor/tdome/green(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - new /obj/item/clothing/head/helmet/thunderdome(src) - + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/tdome/green(src) + for(var/i in 1 to 3) + new /obj/item/weapon/melee/energy/sword/saber(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser(src) + for(var/i in 1 to 3) + new /obj/item/weapon/melee/baton/loaded(src) + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/flashbangs(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/thunderdome(src) + /obj/structure/closet/malf/suits desc = "It's a storage unit for operational gear." icon_state = "syndicate" diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 0f2d6345066..56ca7d875d0 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -23,6 +23,10 @@ new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/weapon/reagent_containers/glass/rag(src) new /obj/item/weapon/reagent_containers/glass/rag(src) + new /obj/item/weapon/storage/box/beanbag(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/glasses/sunglasses/reagent(src) + new /obj/item/weapon/storage/belt/bandolier(src) /obj/structure/closet/chefcloset name = "\proper chef's closet" @@ -37,9 +41,8 @@ new /obj/item/device/radio/headset/headset_srv(src) new /obj/item/clothing/tie/waistcoat(src) new /obj/item/clothing/tie/waistcoat(src) - new /obj/item/clothing/suit/apron/chef(src) - new /obj/item/clothing/suit/apron/chef(src) - new /obj/item/clothing/suit/apron/chef(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/apron/chef(src) new /obj/item/clothing/head/soft/mime(src) new /obj/item/clothing/head/soft/mime(src) new /obj/item/weapon/storage/box/mousetraps(src) @@ -61,9 +64,8 @@ new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/head/soft/purple(src) new /obj/item/device/flashlight(src) - new /obj/item/weapon/caution(src) - new /obj/item/weapon/caution(src) - new /obj/item/weapon/caution(src) + for(var/i in 1 to 3) + new /obj/item/weapon/caution(src) new /obj/item/weapon/holosign_creator(src) new /obj/item/device/lightreplacer(src) new /obj/item/weapon/soap(src) @@ -132,18 +134,14 @@ new /obj/item/weapon/storage/backpack/satchel_sec(src) new /obj/item/weapon/storage/backpack/dufflebag/sec(src) new /obj/item/weapon/storage/backpack/dufflebag/sec(src) - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/under/rank/security(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/beret/sec(src) - new /obj/item/clothing/head/soft/sec(src) - new /obj/item/clothing/head/soft/sec(src) - new /obj/item/clothing/head/soft/sec(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/security(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/jackboots(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/beret/sec(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft/sec(src) new /obj/item/clothing/mask/bandana/red(src) new /obj/item/clothing/mask/bandana/red(src) return @@ -157,18 +155,14 @@ ..() contents = list() new /obj/item/clothing/suit/hooded/wintercoat/cargo(src) - new /obj/item/clothing/under/rank/cargotech(src) - new /obj/item/clothing/under/rank/cargotech(src) - new /obj/item/clothing/under/rank/cargotech(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/clothing/head/soft(src) - new /obj/item/clothing/head/soft(src) - new /obj/item/clothing/head/soft(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/cargotech(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/gloves/fingerless(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft(src) new /obj/item/device/radio/headset/headset_cargo(src) /obj/structure/closet/wardrobe/atmospherics_yellow @@ -181,15 +175,12 @@ new /obj/item/weapon/storage/backpack/dufflebag(src) new /obj/item/weapon/storage/backpack/satchel_norm(src) new /obj/item/weapon/storage/backpack(src) - new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src) - new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src) - new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src) - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/under/rank/atmospheric_technician(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/atmospheric_technician(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/black(src) return /obj/structure/closet/wardrobe/engineering_yellow @@ -203,18 +194,14 @@ new /obj/item/weapon/storage/backpack/industrial(src) new /obj/item/weapon/storage/backpack/satchel_eng(src) new /obj/item/clothing/suit/hooded/wintercoat/engineering(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/under/rank/engineer(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/suit/hazardvest(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/shoes/workboots(src) - new /obj/item/clothing/head/hardhat(src) - new /obj/item/clothing/head/hardhat(src) - new /obj/item/clothing/head/hardhat(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/engineer(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/hazardvest(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/workboots(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/hardhat(src) return /obj/structure/closet/wardrobe/white/medical @@ -232,19 +219,16 @@ new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/under/rank/medical/purple(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/suit/toggle/labcoat(src) new /obj/item/clothing/suit/toggle/labcoat(src) new /obj/item/clothing/suit/toggle/labcoat/emt(src) new /obj/item/clothing/suit/toggle/labcoat/emt(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/head/soft/emt(src) - new /obj/item/clothing/head/soft/emt(src) - new /obj/item/clothing/head/soft/emt(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/white(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft/emt(src) return /obj/structure/closet/wardrobe/robotics_black @@ -348,20 +332,16 @@ new /obj/item/weapon/storage/backpack/satchel_tox(src) new /obj/item/weapon/storage/backpack/satchel_tox(src) new /obj/item/clothing/suit/hooded/wintercoat/science(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/suit/toggle/labcoat/science(src) - new /obj/item/clothing/suit/toggle/labcoat/science(src) - new /obj/item/clothing/suit/toggle/labcoat/science(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/scientist(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/toggle/labcoat/science(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/white(src) new /obj/item/device/radio/headset/headset_sci(src) new /obj/item/device/radio/headset/headset_sci(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/mask/gas(src) + for(var/i in 1 to 3) + new /obj/item/clothing/mask/gas(src) return /obj/structure/closet/wardrobe/botanist @@ -380,9 +360,7 @@ new /obj/item/clothing/suit/apron(src) new /obj/item/clothing/suit/apron/overalls(src) new /obj/item/clothing/suit/apron/overalls(src) - new /obj/item/clothing/under/rank/hydroponics(src) - new /obj/item/clothing/under/rank/hydroponics(src) - new /obj/item/clothing/under/rank/hydroponics(src) - new /obj/item/clothing/mask/bandana(src) - new /obj/item/clothing/mask/bandana(src) - new /obj/item/clothing/mask/bandana(src) \ No newline at end of file + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/hydroponics(src) + for(var/i in 1 to 3) + new /obj/item/clothing/mask/bandana(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 7d04a6bfee6..72fc2ad7bb8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -7,13 +7,5 @@ /obj/structure/closet/secure_closet/bar/New() ..() - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + for(var/i in 1 to 10) + new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 1c9ebd16da9..3f6c5c5a31c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -34,16 +34,13 @@ ..() new /obj/item/clothing/gloves/color/yellow(src) new /obj/item/clothing/gloves/color/yellow(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/storage/toolbox/electrical(src) - new /obj/item/weapon/electronics/apc(src) - new /obj/item/weapon/electronics/apc(src) - new /obj/item/weapon/electronics/apc(src) - new /obj/item/device/multitool(src) - new /obj/item/device/multitool(src) - new /obj/item/device/multitool(src) - + for(var/i in 1 to 3) + new /obj/item/weapon/storage/toolbox/electrical(src) + for(var/i in 1 to 3) + new /obj/item/weapon/electronics/apc(src) + for(var/i in 1 to 3) + new /obj/item/device/multitool(src) + /obj/structure/closet/secure_closet/engineering_welding name = "welding supplies locker" req_access = list(access_engine_equip) @@ -52,13 +49,11 @@ /obj/structure/closet/secure_closet/engineering_welding/New() ..() - new /obj/item/clothing/head/welding(src) - new /obj/item/clothing/head/welding(src) - new /obj/item/clothing/head/welding(src) - new /obj/item/weapon/weldingtool/largetank(src) - new /obj/item/weapon/weldingtool/largetank(src) - new /obj/item/weapon/weldingtool/largetank(src) - + for(var/i in 1 to 3) + new /obj/item/clothing/head/welding(src) + for(var/i in 1 to 3) + new /obj/item/weapon/weldingtool/largetank(src) + /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" req_access = list(access_engine_equip) @@ -90,4 +85,4 @@ new /obj/item/weapon/watertank/atmos(src) new /obj/item/clothing/suit/fire/atmos(src) new /obj/item/clothing/head/hardhat/atmos(src) - new /obj/item/clothing/glasses/meson/engine/tray(src) \ No newline at end of file + new /obj/item/clothing/glasses/meson/engine/tray(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 980f7fd6c37..92eac22ab65 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -15,12 +15,10 @@ new /obj/item/weapon/reagent_containers/glass/bottle/toxin(src) new /obj/item/weapon/reagent_containers/glass/bottle/morphine(src) new /obj/item/weapon/reagent_containers/glass/bottle/morphine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src) - new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src) - new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src) new /obj/item/weapon/storage/box/rxglasses(src) /obj/structure/closet/secure_closet/medical2 @@ -30,13 +28,11 @@ /obj/structure/closet/secure_closet/medical2/New() ..() - new /obj/item/weapon/tank/internals/anesthetic(src) - new /obj/item/weapon/tank/internals/anesthetic(src) - new /obj/item/weapon/tank/internals/anesthetic(src) - new /obj/item/clothing/mask/breath/medical(src) - new /obj/item/clothing/mask/breath/medical(src) - new /obj/item/clothing/mask/breath/medical(src) - + for(var/i in 1 to 3) + new /obj/item/weapon/tank/internals/anesthetic(src) + for(var/i in 1 to 3) + new /obj/item/clothing/mask/breath/medical(src) + /obj/structure/closet/secure_closet/medical3 name = "medical doctor's locker" req_access = list(access_surgery) @@ -81,10 +77,9 @@ /obj/structure/closet/secure_closet/animal/New() ..() new /obj/item/device/assembly/signaler(src) - new /obj/item/device/electropack(src) - new /obj/item/device/electropack(src) - new /obj/item/device/electropack(src) - + for(var/i in 1 to 3) + new /obj/item/device/electropack(src) + /obj/structure/closet/secure_closet/chemical name = "chemical closet" desc = "Store dangerous chemicals in here." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm index 5ba9f4e5d5b..f75526e5790 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -62,6 +62,5 @@ new /obj/item/stack/sheet/glass(src, 50) new /obj/item/clothing/shoes/magboots(src) new /obj/item/weapon/storage/box/metalfoam(src) - new /obj/item/weapon/rcd_ammo/large(src) - new /obj/item/weapon/rcd_ammo/large(src) - new /obj/item/weapon/rcd_ammo/large(src) + for(var/i in 1 to 3) + new /obj/item/weapon/rcd_ammo/large(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 1bcd35a11b1..e161caf3ce2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -186,12 +186,9 @@ /obj/structure/closet/secure_closet/injection/New() ..() - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) - + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + /obj/structure/closet/secure_closet/brig name = "brig locker" req_access = list(access_brig) @@ -210,9 +207,8 @@ /obj/structure/closet/secure_closet/courtroom/New() ..() new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/paper/Court (src) + for(var/i in 1 to 3) + new /obj/item/weapon/paper/Court (src) new /obj/item/weapon/pen (src) new /obj/item/clothing/suit/judgerobe (src) new /obj/item/clothing/head/powdered_wig (src) @@ -226,16 +222,13 @@ /obj/structure/closet/secure_closet/armory1/New() ..() new /obj/item/clothing/suit/armor/laserproof(src) - new /obj/item/clothing/suit/armor/riot(src) - new /obj/item/clothing/suit/armor/riot(src) - new /obj/item/clothing/suit/armor/riot(src) - new /obj/item/clothing/head/helmet/riot(src) - new /obj/item/clothing/head/helmet/riot(src) - new /obj/item/clothing/head/helmet/riot(src) - new /obj/item/weapon/shield/riot(src) - new /obj/item/weapon/shield/riot(src) - new /obj/item/weapon/shield/riot(src) - + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/riot(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/riot(src) + for(var/i in 1 to 3) + new /obj/item/weapon/shield/riot(src) + /obj/structure/closet/secure_closet/armory2 name = "armory ballistics locker" req_access = list(access_armory) @@ -244,13 +237,11 @@ /obj/structure/closet/secure_closet/armory2/New() ..() new /obj/item/weapon/storage/box/firingpins(src) - new /obj/item/weapon/storage/box/rubbershot(src) - new /obj/item/weapon/storage/box/rubbershot(src) - new /obj/item/weapon/storage/box/rubbershot(src) - new /obj/item/weapon/gun/projectile/shotgun/riot(src) - new /obj/item/weapon/gun/projectile/shotgun/riot(src) - new /obj/item/weapon/gun/projectile/shotgun/riot(src) - + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/rubbershot(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/projectile/shotgun/riot(src) + /obj/structure/closet/secure_closet/armory3 name = "armory energy gun locker" req_access = list(access_armory) @@ -260,13 +251,11 @@ ..() new /obj/item/weapon/storage/box/firingpins(src) new /obj/item/weapon/gun/energy/ionrifle(src) - new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - new /obj/item/weapon/gun/energy/laser(src) - + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/gun(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser(src) + /obj/structure/closet/secure_closet/tac name = "armory tac locker" req_access = list(access_armory) @@ -286,6 +275,5 @@ /obj/structure/closet/secure_closet/lethalshots/New() ..() - new /obj/item/weapon/storage/box/lethalshot(src) - new /obj/item/weapon/storage/box/lethalshot(src) - new /obj/item/weapon/storage/box/lethalshot(src) + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/lethalshot(src) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 792d5b167b3..55ea7578571 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -23,19 +23,13 @@ /obj/structure/closet/syndicate/nuclear/New() ..() contents = list() - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) + for(var/i in 1 to 5) + new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/box/teargas(src) new /obj/item/weapon/storage/backpack/dufflebag/syndie/med(src) - new /obj/item/weapon/pinpointer/nukeop(src) - new /obj/item/weapon/pinpointer/nukeop(src) - new /obj/item/weapon/pinpointer/nukeop(src) - new /obj/item/weapon/pinpointer/nukeop(src) - new /obj/item/weapon/pinpointer/nukeop(src) + for(var/i in 1 to 5) + new /obj/item/weapon/pinpointer/nukeop(src) new /obj/item/device/pda/syndicate(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 064256f8f10..edc5b8d1dca 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -174,11 +174,5 @@ /obj/structure/closet/ammunitionlocker/New() ..() - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) + for(var/i in 1 to 8) + new /obj/item/ammo_casing/shotgun/beanbag(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 68c5a8c32d7..489defcdf07 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -5,12 +5,10 @@ /obj/structure/closet/wardrobe/New() ..() - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/under/color/blue(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/brown(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/blue(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/brown(src) return /obj/structure/closet/wardrobe/pink @@ -20,12 +18,10 @@ /obj/structure/closet/wardrobe/pink/New() ..() contents = list() - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/brown(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/pink(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/brown(src) return /obj/structure/closet/wardrobe/black @@ -35,22 +31,18 @@ /obj/structure/closet/wardrobe/black/New() ..() contents = list() - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/under/color/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/black(src) if(prob(25)) new /obj/item/clothing/suit/jacket/leather(src) if(prob(20)) new /obj/item/clothing/suit/jacket/leather/overcoat(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/that(src) - new /obj/item/clothing/head/soft/black(src) - new /obj/item/clothing/head/soft/black(src) - new /obj/item/clothing/head/soft/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/that(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft/black(src) new /obj/item/clothing/mask/bandana/black(src) new /obj/item/clothing/mask/bandana/black(src) if(prob(40)) @@ -65,12 +57,10 @@ /obj/structure/closet/wardrobe/green/New() ..() contents = list() - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/under/color/green(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/green(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/mask/bandana/green(src) new /obj/item/clothing/mask/bandana/green(src) return @@ -84,12 +74,10 @@ /obj/structure/closet/wardrobe/orange/New() ..() contents = list() - new /obj/item/clothing/under/rank/prisoner(src) - new /obj/item/clothing/under/rank/prisoner(src) - new /obj/item/clothing/under/rank/prisoner(src) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/clothing/shoes/sneakers/orange(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/rank/prisoner(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/orange(src) return @@ -100,12 +88,10 @@ /obj/structure/closet/wardrobe/yellow/New() ..() contents = list() - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/under/color/yellow(src) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/clothing/shoes/sneakers/orange(src) - new /obj/item/clothing/shoes/sneakers/orange(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/yellow(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/orange(src) new /obj/item/clothing/mask/bandana/gold(src) new /obj/item/clothing/mask/bandana/gold(src) return @@ -118,15 +104,12 @@ /obj/structure/closet/wardrobe/white/New() ..() contents = list() - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/under/color/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/head/soft/mime(src) - new /obj/item/clothing/head/soft/mime(src) - new /obj/item/clothing/head/soft/mime(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/white(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/white(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft/mime(src) return /obj/structure/closet/wardrobe/pjs @@ -140,10 +123,8 @@ new /obj/item/clothing/under/pj/red(src) new /obj/item/clothing/under/pj/blue(src) new /obj/item/clothing/under/pj/blue(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) - new /obj/item/clothing/shoes/sneakers/white(src) + for(var/i in 1 to 4) + new /obj/item/clothing/shoes/sneakers/white(src) return @@ -154,15 +135,12 @@ /obj/structure/closet/wardrobe/grey/New() ..() contents = list() - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/under/color/grey(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/head/soft/grey(src) - new /obj/item/clothing/head/soft/grey(src) - new /obj/item/clothing/head/soft/grey(src) + for(var/i in 1 to 3) + new /obj/item/clothing/under/color/grey(src) + for(var/i in 1 to 3) + new /obj/item/clothing/shoes/sneakers/black(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/soft/grey(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag(src) if(prob(40)) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 44edb4a6f24..90c267d2a2a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -50,10 +50,8 @@ /obj/structure/closet/crate/rcd/New() ..() - new /obj/item/weapon/rcd_ammo(src) - new /obj/item/weapon/rcd_ammo(src) - new /obj/item/weapon/rcd_ammo(src) - new /obj/item/weapon/rcd_ammo(src) + for(var/i in 1 to 4) + new /obj/item/weapon/rcd_ammo(src) new /obj/item/weapon/rcd(src) /obj/structure/closet/crate/freezer @@ -66,15 +64,14 @@ /obj/structure/closet/crate/freezer/return_air() var/datum/gas_mixture/gas = (..()) - if(!gas) return null + if(!gas) + return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.oxygen = gas.oxygen - newgas.carbon_dioxide = gas.carbon_dioxide - newgas.nitrogen = gas.nitrogen - newgas.toxins = gas.toxins - newgas.volume = gas.volume - newgas.temperature = gas.temperature - if(newgas.temperature <= target_temp) return + newgas.copy_from(gas) + + if(newgas.temperature <= target_temp) + return if((newgas.temperature - cooling_power) > target_temp) newgas.temperature -= cooling_power @@ -91,15 +88,10 @@ /obj/structure/closet/crate/radiation/New() ..() - new /obj/item/clothing/suit/radiation(src) - new /obj/item/clothing/head/radiation(src) - new /obj/item/clothing/suit/radiation(src) - new /obj/item/clothing/head/radiation(src) - new /obj/item/clothing/suit/radiation(src) - new /obj/item/clothing/head/radiation(src) - new /obj/item/clothing/suit/radiation(src) - new /obj/item/clothing/head/radiation(src) - + for(var/i in 1 to 4) + new /obj/item/clothing/suit/radiation(src) + new /obj/item/clothing/head/radiation(src) + /obj/structure/closet/crate/hydroponics name = "hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 521d01bfbec..175971ef2c6 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -23,10 +23,12 @@ /obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user) if(reagents.total_volume < 1) user << "[src] is out of water!" + return 0 else - reagents.trans_to(mop, 5) // + reagents.trans_to(mop, 5) user << "You wet [mop] in [src]." playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + return 1 /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) if(!user.drop_item()) @@ -43,8 +45,8 @@ if(istype(I, /obj/item/weapon/mop)) var/obj/item/weapon/mop/m=I if(m.reagents.total_volume < m.reagents.maximum_volume) - wet_mop(m, user) - return + if (wet_mop(m, user)) + return if(!mymop) m.janicart_insert(user, src) else diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index b1b3d9994bf..343cfb5d940 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -61,6 +61,7 @@ /obj/structure/mirror/attackby(obj/item/I, mob/living/user, params) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(I.damtype == STAMINA) return @@ -90,6 +91,7 @@ /obj/structure/mirror/attack_alien(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(islarva(user)) return @@ -106,6 +108,7 @@ var/mob/living/simple_animal/M = user if(M.melee_damage_upper <= 0) return + user.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) @@ -115,6 +118,7 @@ /obj/structure/mirror/attack_slime(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) @@ -246,4 +250,4 @@ if(new_eye_color) H.eye_color = sanitize_hexcolor(new_eye_color) H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - H.update_body() \ No newline at end of file + H.update_body() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 97687c2fa1f..cd8c190569e 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -180,7 +180,7 @@ var/global/list/crematoriums = new/list() update_icon() for(var/mob/living/M in contents) - if (M.stat!=2) + if (M.stat != DEAD) M.emote("scream") if(user) user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" @@ -188,8 +188,9 @@ var/global/list/crematoriums = new/list() else log_attack("\[[time_stamp()]\] UNKNOWN cremated [M]/[M.ckey]") M.death(1) - M.ghostize() - qdel(M) + if(M) //some animals get automatically deleted on death. + M.ghostize() + qdel(M) for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up if(O != connected) //Creamtorium does not burn hot enough to destroy the tray diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index aaa115bbd1b..475383d8b2b 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -128,13 +128,12 @@ return for(var/obj/structure/transit_tube_pod/pod in loc) if(!pod.moving && turn(pod.dir, (reverse_launch ? 180 : 0)) in directions()) - spawn(0) - pod_moving = 1 - close_animation() - sleep(CLOSE_DURATION + 2) - if(icon_state == "closed" && pod) - pod.follow_tube(reverse_launch) - pod_moving = 0 + pod_moving = 1 + close_animation() + sleep(CLOSE_DURATION + 2) + if(icon_state == "closed" && pod) + pod.follow_tube(reverse_launch) + pod_moving = 0 return 1 return 0 diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index a4bd81856e7..f2cd240656f 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -11,8 +11,9 @@ /obj/structure/transit_tube_pod/New(loc) ..(loc) - air_contents.oxygen = MOLES_O2STANDARD * 2 - air_contents.nitrogen = MOLES_N2STANDARD + air_contents.assert_gases("o2", "n2") + air_contents.gases["o2"][MOLES] = MOLES_O2STANDARD * 2 + air_contents.gases["n2"][MOLES] = MOLES_N2STANDARD air_contents.temperature = T20C // Give auto tubes time to align before trying to start moving @@ -61,73 +62,70 @@ else return ..() /obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch) + set waitfor = 0 if(moving) return moving = 1 - spawn() - var/obj/structure/transit_tube/current_tube = null - var/next_dir - var/next_loc - var/last_delay = 0 - var/exit_delay - if(reverse_launch) - dir = turn(dir, 180) // Back it up + var/obj/structure/transit_tube/current_tube = null + var/next_dir + var/next_loc + var/last_delay = 0 + var/exit_delay - for(var/obj/structure/transit_tube/tube in loc) - if(tube.has_exit(dir)) + if(reverse_launch) + dir = turn(dir, 180) // Back it up + + for(var/obj/structure/transit_tube/tube in loc) + if(tube.has_exit(dir)) + current_tube = tube + break + + while(current_tube) + next_dir = current_tube.get_exit(dir) + + if(!next_dir) + break + + exit_delay = current_tube.exit_delay(src, dir) + last_delay += exit_delay + + sleep(exit_delay) + + next_loc = get_step(loc, next_dir) + + current_tube = null + for(var/obj/structure/transit_tube/tube in next_loc) + if(tube.has_entrance(next_dir)) current_tube = tube break - while(current_tube) - next_dir = current_tube.get_exit(dir) - - if(!next_dir) - break - - exit_delay = current_tube.exit_delay(src, dir) - last_delay += exit_delay - - sleep(exit_delay) - - next_loc = get_step(loc, next_dir) - - current_tube = null - for(var/obj/structure/transit_tube/tube in next_loc) - if(tube.has_entrance(next_dir)) - current_tube = tube - break - - if(current_tube == null) - dir = next_dir - Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. - break - - last_delay = current_tube.enter_delay(src, next_dir) - sleep(last_delay) + if(current_tube == null) dir = next_dir - loc = next_loc // When moving from one tube to another, skip collision and such. - density = current_tube.density + Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. + break - if(current_tube && current_tube.should_stop_pod(src, next_dir)) - current_tube.pod_stopped(src, dir) - break + last_delay = current_tube.enter_delay(src, next_dir) + sleep(last_delay) + dir = next_dir + loc = next_loc // When moving from one tube to another, skip collision and such. + density = current_tube.density - density = 1 - moving = 0 + if(current_tube && current_tube.should_stop_pod(src, next_dir)) + current_tube.pod_stopped(src, dir) + break + + density = 1 + moving = 0 // Should I return a copy here? If the caller edits or del()s the returned // datum, there might be problems if I don't... /obj/structure/transit_tube_pod/return_air() var/datum/gas_mixture/GM = new() - GM.oxygen = air_contents.oxygen - GM.carbon_dioxide = air_contents.carbon_dioxide - GM.nitrogen = air_contents.nitrogen - GM.toxins = air_contents.toxins - GM.temperature = air_contents.temperature + GM.copy_from(air_contents) return GM // For now, copying what I found in an unused FEA file (and almost identical in a diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d6d2dca1ef3..58913c501ec 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -196,6 +196,7 @@ health = maxhealth playsound(loc, 'sound/items/Welder2.ogg', 50, 1) update_nearby_icons() + user << "You repair [src]." else user << "[src] is already in good condition!" return diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 4aa16f11ec1..1373a0501de 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -134,10 +134,9 @@ /turf/simulated/floor/engine/n20/New() ..() var/datum/gas_mixture/adding = new - var/datum/gas/sleeping_agent/trace_gas = new - trace_gas.moles = 6000 - adding.trace_gases += trace_gas + adding.assert_gas("n2o") + adding.gases["n2o"][MOLES] = 6000 adding.temperature = T20C assume_air(adding) @@ -193,30 +192,34 @@ SSobj.processing |= src /turf/simulated/floor/plating/lava/process() - if(!contents) + if(!burn_stuff()) processing = 0 SSobj.processing.Remove(src) - return - burn_stuff() + /turf/simulated/floor/plating/lava/proc/burn_stuff() - for(var/atom/movable/AM in contents) - if(!istype(AM)) - return - if(istype(AM, /obj)) - var/obj/O = AM + . = 0 + for(var/thing in contents) + if(istype(thing, /obj)) + var/obj/O = thing if(istype(O, /obj/effect/decal/cleanable/ash)) //So we don't get stuck burning the same ash pile forever qdel(O) - return + continue + . = 1 if(O.burn_state == FIRE_PROOF) O.burn_state = FLAMMABLE //Even fireproof things burn up in lava + O.fire_act() - else if (istype(AM, /mob/living)) - var/mob/living/L = AM + + + else if (istype(thing, /mob/living)) + . = 1 + var/mob/living/L = thing L.adjustFireLoss(20) if(L) //mobs turning into object corpses could get deleted here. L.adjust_fire_stacks(20) L.IgniteMob() + /turf/simulated/floor/plating/lava/attackby(obj/item/C, mob/user, params) //Lava isn't a good foundation to build on return @@ -241,4 +244,4 @@ /turf/simulated/floor/plating/lava/smooth/airless oxygen = 0 nitrogen = 0 - temperature = TCMB \ No newline at end of file + temperature = TCMB diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm new file mode 100644 index 00000000000..b602319fba6 --- /dev/null +++ b/code/game/turfs/simulated/river.dm @@ -0,0 +1,85 @@ +#define RANDOM_UPPER_X 200 +#define RANDOM_UPPER_Y 200 + +#define RANDOM_LOWER_X 50 +#define RANDOM_LOWER_Y 50 + +/proc/spawn_rivers(target_z = 5, nodes = 4, turf_type = /turf/simulated/floor/plating/lava/smooth) + var/list/river_nodes = list() + var/num_spawned = 0 + while(num_spawned < nodes) + var/turf/simulated/F = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), target_z) + + river_nodes += new /obj/effect/landmark/river_waypoint(F) + num_spawned++ + + //make some randomly pathing rivers + for(var/A in river_nodes) + var/obj/effect/landmark/river_waypoint/W = A + if (W.z != target_z || W.connected) + continue + W.connected = 1 + var/turf/cur_turf = get_turf(W) + cur_turf.ChangeTurf(turf_type) + var/turf/target_turf = get_turf(pick(river_nodes - W)) + if(!target_turf) + break + var/detouring = 0 + var/cur_dir = get_dir(cur_turf, target_turf) + while(cur_turf != target_turf) + + if(detouring) //randomly snake around a bit + if(prob(20)) + detouring = 0 + cur_dir = get_dir(cur_turf, target_turf) + else if(prob(20)) + detouring = 1 + if(prob(50)) + cur_dir = turn(cur_dir, 45) + else + cur_dir = turn(cur_dir, -45) + else + cur_dir = get_dir(cur_turf, target_turf) + + cur_turf = get_step(cur_turf, cur_dir) + + if(!istype(cur_turf, /turf/simulated/wall)) //Rivers will flow around walls + var/turf/simulated/river_turf = cur_turf + river_turf.ChangeTurf(turf_type) + river_turf.Spread(30, 25) + else + detouring = 0 + cur_dir = get_dir(cur_turf, target_turf) + cur_turf = get_step(cur_turf, cur_dir) + continue + + + for(var/WP in river_nodes) + qdel(WP) + + +/obj/effect/landmark/river_waypoint + name = "river waypoint" + var/connected = 0 + invisibility = 101 + + +/turf/proc/Spread(probability = 30, prob_loss = 25) + if(probability <= 0) + return + + for(var/turf/simulated/F in orange(1, src)) + + var/turf/L = F + + L.ChangeTurf(src.type) + + if(L && prob(probability)) + L.Spread(probability - prob_loss) + + +#undef RANDOM_UPPER_X +#undef RANDOM_UPPER_Y + +#undef RANDOM_LOWER_X +#undef RANDOM_LOWER_Y diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 074a31dabc3..ccb24864770 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -8,6 +8,7 @@ density = 1 blocks_air = 1 explosion_block = 1 + layer = TURF_LAYER + 0.05 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index af2e3206eac..85a846c8767 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -140,32 +140,32 @@ //////Assimilate Air////// /turf/simulated/proc/Assimilate_Air() if(air) - var/aoxy = 0//Holders to assimilate air from nearby turfs - var/anitro = 0 - var/aco = 0 - var/atox = 0 - var/atemp = 0 + var/datum/gas_mixture/a_gas_mixture = new//Holders to assimilate air from nearby turfs + var/list/a_gases = a_gas_mixture.gases var/turf_count = 0 for(var/direction in cardinal)//Only use cardinals to cut down on lag var/turf/T = get_step(src,direction) + if(istype(T,/turf/space))//Counted as no air turf_count++//Considered a valid turf for air calcs continue + else if(istype(T,/turf/simulated/floor)) var/turf/simulated/S = T if(S.air)//Add the air's contents to the holders - aoxy += S.air.oxygen - anitro += S.air.nitrogen - aco += S.air.carbon_dioxide - atox += S.air.toxins - atemp += S.air.temperature - turf_count ++ - air.oxygen = (aoxy/max(turf_count,1))//Averages contents of the turfs, ignoring walls and the like - air.nitrogen = (anitro/max(turf_count,1)) - air.carbon_dioxide = (aco/max(turf_count,1)) - air.toxins = (atox/max(turf_count,1)) - air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant + var/list/S_gases = S.air.gases + for(var/id in a_gases) + a_gases[id][MOLES] += S_gases[id][MOLES] + a_gas_mixture.temperature += S.air.temperature + turf_count++ + + air.copy_from(a_gas_mixture) + var/list/air_gases = air.gases + for(var/id in air_gases) + air_gases[id][MOLES] /= max(turf_count,1)//Averages contents of the turfs, ignoring walls and the like + + air.temperature /= max(turf_count,1) SSair.add_to_active(src) /turf/proc/ReplaceWithLattice() @@ -290,6 +290,7 @@ blocks_air = 1 opacity = 1 explosion_block = 50 + layer = TURF_LAYER + 0.05 /turf/indestructible/splashscreen name = "Space Station 13" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 735b00c6aac..a2612b46ee2 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -10,7 +10,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums name = init_name switch(name) if("Removed",null,"") - spawn(-1) + spawn(0) qdel(src) throw EXCEPTION("invalid admin-rank name") return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7c9dbc23474..d0dc7652b51 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -322,10 +322,12 @@ var/list/admin_verbs_hideable = list( if(istype(mob,/mob/dead/observer)) //re-enter var/mob/dead/observer/ghost = mob - if (!ghost.can_reenter_corpse) + if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body + return + if(!ghost.can_reenter_corpse) log_admin("[key_name(usr)] re-entered corpse") message_admins("[key_name_admin(usr)] re-entered corpse") - ghost.can_reenter_corpse = 1 //just in-case. + ghost.can_reenter_corpse = 1 //force re-entering even when otherwise not possible ghost.reenter_corpse() feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! else if(istype(mob,/mob/new_player)) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index abe7abcd91a..e7a0550b862 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -16,12 +16,12 @@ var/list/admin_datums = list() /datum/admins/New(datum/admin_rank/R, ckey) if(!ckey) - spawn(-1) + spawn(0) del(src) throw EXCEPTION("Admin datum created without a ckey") return if(!istype(R)) - spawn(-1) + spawn(0) del(src) throw EXCEPTION("Admin datum created without a rank") return diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ff02ba635d7..a2e264f8c88 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -349,7 +349,8 @@ dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" else - dat += "Nuclear Operative not found!" + dat += "[N.name]([N.key]) Nuclear Operative Body destroyed!" + dat += "PM" dat += "
" for(var/obj/item/weapon/disk/nuclear/N in poi_list) dat += "" + dat += "" + dat += "" else dat += "" dat += "" @@ -388,7 +390,8 @@ var/turf/mob_loc = get_turf(M) dat += "" else - dat += "" + dat += "" + dat += "" dat += "
Nuclear Disk(s)
[N.name], " @@ -370,7 +371,8 @@ for(var/datum/mind/N in ticker.mode.head_revolutionaries) var/mob/M = N.current if(!M) - dat += "
Head Revolutionary not found!
[N.name]([N.key])Head Revolutionary body destroyed!PM
[M.real_name] (Leader)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PM
[mob_loc.loc]
Head not found!
[N.name]([N.key])Head body destroyed!PM
" for(var/datum/gang/G in ticker.mode.gangs) @@ -396,7 +399,8 @@ for(var/datum/mind/N in G.bosses) var/mob/M = N.current if(!M) - dat += "Gang Boss not found!" + dat += "[N.name]([N.key])Gang Boss body destroyed!" + dat += "PM" else dat += "[M.real_name] (Boss)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" @@ -416,7 +420,8 @@ dat += "PM" dat += "Show Objective" else - dat += "Changeling not found!" + dat += "[changeling.name]([changeling.key])Changeling body destroyed!" + dat += "PM" dat += "" if(ticker.mode.wizards.len > 0) @@ -428,7 +433,8 @@ dat += "PM" dat += "Show Objective" else - dat += "Wizard not found!" + dat += "[wizard.name]([wizard.key])Wizard body destroyed!" + dat += "PM" dat += "" if(ticker.mode.apprentices.len > 0) @@ -440,7 +446,8 @@ dat += "PM" dat += "Show Objective" else - dat += "Apprentice not found!" + dat += "[apprentice.name]([apprentice.key])Apprentice body destroyed!!" + dat += "PM" dat += "" if(ticker.mode.cult.len) @@ -509,7 +516,8 @@ dat += "PM" dat += "Show Objective" else - dat += "Traitor not found!" + dat += "[traitor.name]([traitor.key])Traitor body destroyed!" + dat += "PM" dat += "" if(ticker.mode.shadows.len) @@ -519,6 +527,9 @@ if(M) dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" + else + dat += "[N.name]([N.key])Shadowling body destroyed!" + dat += "PM" dat += "" if(ticker.mode.thralls.len) @@ -539,7 +550,8 @@ dat += "PM" dat += "Show Objective" else - dat += "Abductor not found!" + dat += "[abductor.name]([abductor.key])Abductor body destroyed!" + dat += "PM" dat += "" dat += "
" for(var/obj/machinery/abductor/experiment/E in machines) @@ -550,7 +562,8 @@ dat += "" dat += "" else - dat += "" + dat += "" + dat += "" dat += "
Abductees
PMShow Objective
Abductee not found!
[abductee.name]([abductee.key])Abductee body destroyed!PM
" var/list/blob_minds = list() @@ -568,9 +581,10 @@ var/mob/M = blob.current if(M) dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" - dat += "PM" + dat += "PM" else - dat += "Blob not found!" + dat += "[blob.name]([blob.key])Blob not found!" + dat += "PM" dat += "" @@ -584,7 +598,8 @@ dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" else - dat += "Monkey not found!" + dat += "[eek.name]([eek.key])Monkey not found!" + dat += "PM" dat += "" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 8c42eb8261b..1bb4ef16a40 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2039,7 +2039,7 @@ else if(href_list["check_antagonist"]) if(!check_rights(R_ADMIN)) return - check_antagonists() + usr.client.check_antagonists() else if(href_list["kick_all_from_lobby"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 991ebb36886..5ab2eb7e142 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -93,14 +93,11 @@ for(var/datum/d in objs) for(var/v in call_list) - // To stop any procs which sleep from executing slowly. - if(d) - if(hascall(d, v)) - spawn() call(d, v)(arglist(args_list)) // Spawn in case the function sleeps. + SDQL_callproc(d, v, args_list) if("delete") for(var/datum/d in objs) - del d + qdel(d) if("select") var/text = "" @@ -147,6 +144,10 @@ +/proc/SDQL_callproc(thing, procname, args_list) + set waitfor = 0 + if(hascall(thing, procname)) + call(thing, procname)(arglist(args_list)) /proc/SDQL_parse(list/query_list) var/datum/SDQL_parser/parser = new() diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 93d8d3a830f..1e99c5a4ea0 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -28,72 +28,78 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/callproc() set category = "Debug" set name = "Advanced ProcCall" + set waitfor = 0 if(!check_rights(R_DEBUG)) return - spawn(0) - var/target = null - var/targetselected = 0 - var/returnval = null - var/class = null + var/target = null + var/targetselected = 0 + var/returnval = null + var/class = null - switch(alert("Proc owned by something?",,"Yes","No")) - if("Yes") - targetselected = 1 - if(src.holder && src.holder.marked_datum) - class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client","Marked datum ([holder.marked_datum.type])") - if(class == "Marked datum ([holder.marked_datum.type])") - class = "Marked datum" + switch(alert("Proc owned by something?",,"Yes","No")) + if("Yes") + targetselected = 1 + if(src.holder && src.holder.marked_datum) + class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client","Marked datum ([holder.marked_datum.type])") + if(class == "Marked datum ([holder.marked_datum.type])") + class = "Marked datum" + else + class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client") + switch(class) + if("Obj") + target = input("Enter target:","Target",usr) as obj in world + if("Mob") + target = input("Enter target:","Target",usr) as mob in world + if("Area or Turf") + target = input("Enter target:","Target",usr.loc) as area|turf in world + if("Client") + var/list/keys = list() + for(var/client/C) + keys += C + target = input("Please, select a player!", "Selection", null, null) as null|anything in keys + if("Marked datum") + target = holder.marked_datum else - class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client") - switch(class) - if("Obj") - target = input("Enter target:","Target",usr) as obj in world - if("Mob") - target = input("Enter target:","Target",usr) as mob in world - if("Area or Turf") - target = input("Enter target:","Target",usr.loc) as area|turf in world - if("Client") - var/list/keys = list() - for(var/client/C) - keys += C - target = input("Please, select a player!", "Selection", null, null) as null|anything in keys - if("Marked datum") - target = holder.marked_datum - else - return - if("No") - target = null - targetselected = 0 + return + if("No") + target = null + targetselected = 0 - var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null - if(!procname) return - if(targetselected && !hascall(target,procname)) - usr << "Error: callproc(): target has no such call [procname]." + var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null + if(!procname) return + if(targetselected && !hascall(target,procname)) + usr << "Error: callproc(): target has no such call [procname]." + return + else + var/procpath = text2path(procname) + if (!procpath) + usr << "Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)" return - var/list/lst = get_callproc_args() - if(!lst) + var/list/lst = get_callproc_args() + if(!lst) + return + + if(targetselected) + if(!target) + usr << "Error: callproc(): owner of proc no longer exists." return + log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + message_admins("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc + else + //this currently has no hascall protection. wasn't able to get it working. + log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc - if(targetselected) - if(!target) - usr << "Error: callproc(): owner of proc no longer exists." - return - log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - message_admins("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc - else - //this currently has no hascall protection. wasn't able to get it working. - log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc - - usr << "[procname] returned: [returnval ? returnval : "null"]" - feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + usr << "[procname] returned: [returnval ? returnval : "null"]" + feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/callproc_datum(A as null|area|mob|obj|turf) set category = "Debug" set name = "Atom ProcCall" + set waitfor = 0 if(!check_rights(R_DEBUG)) return @@ -113,12 +119,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") message_admins("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - spawn() - var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc - usr << "[procname] returned: [returnval ? returnval : "null"]" - feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc + usr << "[procname] returned: [returnval ? returnval : "null"]" + + + /client/proc/get_callproc_args() var/argnum = input("Number of arguments","Number:",0) as num|null if(!argnum && (argnum!=0)) return @@ -187,14 +194,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return var/datum/gas_mixture/env = T.return_air() + var/list/env_gases = env.gases var/t = "" - t+= "Nitrogen : [env.nitrogen]\n" - t+= "Oxygen : [env.oxygen]\n" - t+= "Plasma : [env.toxins]\n" - t+= "CO2: [env.carbon_dioxide]\n" + for(var/id in env_gases) + if(id in hardcoded_gases || env_gases[id][MOLES]) + t+= "[env_gases[id][GAS_NAME]] : [env_gases[id][MOLES]]\n" - usr.show_message(t, 1) + usr << t feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_robotize(mob/M in mob_list) @@ -207,7 +214,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(istype(M, /mob/living/carbon/human)) log_admin("[key_name(src)] has robotized [M.key].") var/mob/living/carbon/human/H = M - spawn(10) + spawn(0) H.Robotize() else @@ -223,7 +230,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(istype(M, /mob/living/carbon/human)) log_admin("[key_name(src)] has blobized [M.key].") var/mob/living/carbon/human/H = M - spawn(10) + spawn(0) H.Blobize() else @@ -247,7 +254,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return log_admin("[key_name(src)] has animalized [M.key].") - spawn(10) + spawn(0) M.Animalize() @@ -287,7 +294,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return if(ishuman(M)) log_admin("[key_name(src)] has alienized [M.key].") - spawn(10) + spawn(0) M:Alienize() feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] made [key_name(M)] into an alien.") @@ -304,7 +311,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return if(ishuman(M)) log_admin("[key_name(src)] has slimeized [M.key].") - spawn(10) + spawn(0) M:slimeize() feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] made [key_name(M)] into a slime.") @@ -631,7 +638,8 @@ var/global/list/g_fancy_list_of_types = null if(Rad.anchored) if(!Rad.P) var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad) - Plasma.air_contents.toxins = 70 + Plasma.air_contents.assert_gas("plasma") + Plasma.air_contents.gases["plasma"][MOLES] = 70 Rad.drainratio = 0 Rad.P = Plasma Plasma.loc = Rad diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index c1284154c64..7811b0bc3c0 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -6,15 +6,17 @@ return var/datum/gas_mixture/GM = target.return_air() + var/list/GM_gases var/burning = 0 if(istype(target, /turf/simulated)) var/turf/simulated/T = target if(T.active_hotspot) burning = 1 - usr << "@[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" - for(var/datum/gas/trace_gas in GM.trace_gases) - usr << "[trace_gas.type]: [trace_gas.moles]" + usr << "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" + for(var/id in GM_gases) + if(id in hardcoded_gases || GM_gases[id][MOLES]) + usr << "[GM_gases[id][GAS_NAME]]: [GM_gases[id][MOLES]]" feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/fix_next_move() diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 88cd7f16394..d856e5b8577 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -10,8 +10,20 @@ ticker.mode.traitors += H.mind H.mind.special_role = "traitor" - add_objective(H.mind, /datum/objective/default/steal) - add_objective(H.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = H.mind + steal_objective.set_target(new /datum/objective_item/steal/nukedisc) + H.mind.objectives += steal_objective + + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = H.mind + H.mind.objectives += hijack_objective + + H << "You are the traitor." + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ for (var/obj/item/I in H) if (istype(I, /obj/item/weapon/implant)) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 9e5cc53faf9..3a446749607 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -108,7 +108,10 @@ return /obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode - var/fuel_moles = air_contents.toxins + air_contents.oxygen/6 + air_contents.assert_gases("plasma", "o2") + var/fuel_moles = air_contents.gases["plasma"][MOLES] + air_contents.gases["o2"][MOLES]/6 + air_contents.garbage_collect() + var/strength = 1 var/turf/ground_zero = get_turf(loc) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 9e654648c2d..805acc631b1 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -76,7 +76,6 @@ if (M.id == src.id) spawn( 0 ) M.open() - return sleep(10) @@ -90,7 +89,6 @@ if (M.id == src.id) spawn( 0 ) M.close() - return sleep(10) cooldown = 0 diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index febe545a30e..34c82ac8c6b 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -74,7 +74,7 @@ if(!secured) user.show_message("The [name] is unsecured!") return 0 - var/dat = text("Health Sensor [scanning?"On":"Off"]") + var/dat = "Health Sensor [scanning?"On":"Off"]" if(scanning && health_scan) dat += "
Health: [health_scan]" user << browse(dat, "window=hscan") diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 53990197caa..bb355b97e67 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -56,7 +56,6 @@ cooldown = 2 spawn(10) process_cooldown() - return /obj/item/device/assembly/prox_sensor/process() @@ -71,15 +70,13 @@ /obj/item/device/assembly/prox_sensor/dropped() spawn(0) sense() - return - return /obj/item/device/assembly/prox_sensor/toggle_scan() if(!secured) return 0 scanning = !scanning update_icon() - return + /obj/item/device/assembly/prox_sensor/update_icon() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 463abc6c5e4..ff0396423bc 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -17,7 +17,7 @@ ..() spawn(40) set_frequency(frequency) - return + /obj/item/device/assembly/signaler/Destroy() if(SSradio) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index d6f2136eebc..a761abd4909 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -132,15 +132,15 @@ var/obj/machinery/gateway/centerstation/the_gateway = null //okay, here's the good teleporting stuff /obj/machinery/gateway/centerstation/Bumped(atom/movable/AM) - if(!ready) + if(!ready) return - if(!active) + if(!active) return - if(!awaygate || qdeleted(awaygate)) + if(!awaygate || qdeleted(awaygate)) return if(awaygate.calibrated) - AM.loc = get_step(awaygate.loc, SOUTH) + AM.forceMove(get_step(awaygate.loc, SOUTH)) AM.dir = SOUTH if (ismob(AM)) var/mob/M = AM @@ -150,7 +150,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null else var/obj/effect/landmark/dest = pick(awaydestinations) if(dest) - AM.loc = dest.loc + AM.forceMove(get_turf(dest)) AM.dir = SOUTH use_power(5000) return @@ -240,18 +240,18 @@ var/obj/machinery/gateway/centerstation/the_gateway = null /obj/machinery/gateway/centeraway/Bumped(atom/movable/AM) - if(!ready) + if(!ready) return - if(!active) + if(!active) return - if(!stationgate || qdeleted(stationgate)) + if(!stationgate || qdeleted(stationgate)) return if(istype(AM, /mob/living/carbon)) for(var/obj/item/weapon/implant/exile/E in AM)//Checking that there is an exile implant in the contents if(E.imp_in == AM)//Checking that it's actually implanted vs just in their pocket AM << "\black The station gate has detected your exile implant and is blocking your entry." return - AM.loc = get_step(stationgate.loc, SOUTH) + AM.forceMove(get_step(stationgate.loc, SOUTH)) AM.dir = SOUTH if (ismob(AM)) var/mob/M = AM diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 49948de8598..a33123bbd7a 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -298,6 +298,10 @@ var/global/dmm_suite/preloader/_preloader = null else if(copytext(trim_right,1,2) == "'") trim_right = file(copytext(trim_right,2,length(trim_right))) + //Check for path + else if(ispath(text2path(trim_right))) + trim_right = text2path(trim_right) + to_return[trim_left] = trim_right else//simple var diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 5b43288d109..d6d72ba061f 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -1,31 +1,31 @@ //Academy Areas /area/awaymission/academy - name = "\improper Academy Asteroids" + name = "Academy Asteroids" icon_state = "away" /area/awaymission/academy/headmaster - name = "\improper Academy Fore Block" + name = "Academy Fore Block" icon_state = "away1" /area/awaymission/academy/classrooms - name = "\improper Academy Classroom Block" + name = "Academy Classroom Block" icon_state = "away2" /area/awaymission/academy/academyaft - name = "\improper Academy Ship Aft Block" + name = "Academy Ship Aft Block" icon_state = "away3" /area/awaymission/academy/academygate - name = "\improper Academy Gateway" + name = "Academy Gateway" icon_state = "away4" /area/awaymission/academy/academycellar - name = "\improper Academy Cellar" + name = "Academy Cellar" icon_state = "away4" /area/awaymission/academy/academyengine - name = "\improper Academy Engine" + name = "Academy Engine" icon_state = "away4" //Academy Items @@ -102,7 +102,7 @@ /obj/structure/academy_wizard_spawner/proc/summon_wizard() var/turf/T = src.loc - + var/mob/living/carbon/human/wizbody = new(T) wizbody.equipOutfit(/datum/outfit/wizard/academy) var/obj/item/weapon/implant/exile/Implant = new/obj/item/weapon/implant/exile(wizbody) @@ -110,7 +110,7 @@ wizbody.faction |= "wizard" wizbody.real_name = "Academy Teacher" wizbody.name = "Academy Teacher" - + var/datum/mind/wizmind = new /datum/mind() wizmind.name = "Wizard Defender" wizmind.special_role = "Academy Defender" @@ -118,13 +118,13 @@ wizmind.objectives += O wizmind.transfer_to(wizbody) ticker.mode.wizards |= wizmind - + wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) wizmind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball) current_wizard = wizbody - + give_control() /obj/structure/academy_wizard_spawner/proc/update_status() diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm index b6496fe4718..1b6ffd1d0bf 100644 --- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm +++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm @@ -1,22 +1,22 @@ //Packer Ship Areas /area/awaymission/BMPship - name = "\improper BMP Asteroids" + name = "BMP Asteroids" icon_state = "away" luminosity = 0 /area/awaymission/BMPship/Aft - name = "\improper Aft Block" + name = "Aft Block" icon_state = "away1" requires_power = 1 /area/awaymission/BMPship/Midship - name = "\improper Midship Block" + name = "Midship Block" icon_state = "away2" requires_power = 1 /area/awaymission/BMPship/Fore - name = "\improper Fore Block" + name = "Fore Block" icon_state = "away3" requires_power = 1 \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 1625b3da847..724dcf434e3 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -5,7 +5,7 @@ icon_state = "away" /area/awaymission/challenge/main - name = "\improper Danger Room" + name = "Danger Room" icon_state = "away1" requires_power = 0 diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index cb9dcad479f..f93f77882fd 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -1,37 +1,37 @@ //Snow Valley Areas//-- /area/awaymission/snowdin - name = "\improper Snowdin Tundra Plains" + name = "Snowdin Tundra Plains" icon_state = "away" requires_power = 0 luminosity = 1 lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED /area/awaymission/snowdin/post - name = "\improper Snowdin Outpost" + name = "Snowdin Outpost" requires_power = 1 /area/awaymission/snowdin/igloo - name = "\improper Snowdin Igloos" + name = "Snowdin Igloos" icon_state = "away2" /area/awaymission/snowdin/cave - name = "\improper Snowdin Caves" + name = "Snowdin Caves" icon_state = "away2" luminosity = 0 /area/awaymission/snowdin/base - name = "\improper Snowdin Main Base" + name = "Snowdin Main Base" icon_state = "away3" requires_power = 1 /area/awaymission/snowdin/dungeon1 - name = "\improper Snowdin Depths" + name = "Snowdin Depths" icon_state = "away2" luminosity = 0 /area/awaymission/snowdin/sekret - name = "\improper Snowdin Operations" + name = "Snowdin Operations" icon_state = "away3" requires_power = 1 @@ -168,7 +168,6 @@ obj/item/weapon/paper/crumpled/snowdin/shovel /obj/item/weapon/twohanded/dualsaber = 15, /obj/item/organ/internal/heart/demon = 7, /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted = 16, - /obj/item/weapon/teleportation_scroll = 5, /obj/item/weapon/dice/d20/fate = 4, /obj/item/weapon/gun/magic/wand/resurrection/inert = 15, /obj/item/weapon/gun/magic/wand/resurrection = 10, diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index 9b9a70d220a..b8906c8011d 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -1,33 +1,33 @@ //Spacebattle Areas /area/awaymission/spacebattle - name = "\improper Space Battle" + name = "Space Battle" icon_state = "away" requires_power = 0 /area/awaymission/spacebattle/cruiser - name = "\improper Nanotrasen Cruiser" + name = "Nanotrasen Cruiser" /area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" + name = "Syndicate Assault Ship 1" /area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" + name = "Syndicate Assault Ship 2" /area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" + name = "Syndicate Assault Ship 3" /area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" + name = "Syndicate War Sphere 1" /area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" + name = "Syndicate War Sphere 2" /area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" + name = "Syndicate War Sphere 3" /area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" + name = "Syndicate Fighter" /area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" \ No newline at end of file + name = "Hidden Chamber" \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index dc2cdd22470..5b9153cbd2c 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -7,30 +7,30 @@ //Wild West Areas /area/awaymission/wwmines - name = "\improper Wild West Mines" + name = "Wild West Mines" icon_state = "away1" luminosity = 1 requires_power = 0 /area/awaymission/wwgov - name = "\improper Wild West Mansion" + name = "Wild West Mansion" icon_state = "away2" luminosity = 1 requires_power = 0 /area/awaymission/wwrefine - name = "\improper Wild West Refinery" + name = "Wild West Refinery" icon_state = "away3" luminosity = 1 requires_power = 0 /area/awaymission/wwvault - name = "\improper Wild West Vault" + name = "Wild West Vault" icon_state = "away3" luminosity = 0 /area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power + name = "Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" requires_power = 0 luminosity = 0 @@ -96,8 +96,14 @@ user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart." ticker.mode.traitors += user.mind user.mind.special_role = "traitor" - add_objective(user.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/hijack/hijack = new + hijack.owner = user.mind + user.mind.objectives += hijack user << "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!" + var/obj_count = 1 + for(var/datum/objective/OBJ in user.mind.objectives) + user << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ user.set_species(/datum/species/shadow) if("Peace") user << "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence." diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index ca6cd9bca4a..eb284af8c41 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -22,6 +22,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu var/file = file(map) if(isfile(file)) maploader.load_map(file) + smooth_zlevel(world.maxz) world.log << "away mission loaded: [map]" map_transition_config.Add(AWAY_MISSION_LIST) @@ -33,6 +34,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu world << "Away mission loaded." + SortAreas() //To add recently loaded areas else world << "No away missions found." return diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 6e73a0bfd97..9928eea9eda 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -131,7 +131,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the if (register_asset) register_asset(file,files[file]) send_asset(client,file) - sleep(-1) //queuing calls like this too quickly can cause issues in some client versions + sleep(0) //queuing calls like this too quickly can cause issues in some client versions //This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. //if it's an icon or something be careful, you'll have to copy it before further use. diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 73b99c574ad..6fd6d507597 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -35,10 +35,6 @@ return cmd_admin_pm(href_list["priv_msg"],null) return - // NanoUI - if(href_list["nano_error"]) - src << href_list["nano_error"] - throw EXCEPTION("NanoUI: [href_list["nano_error"]]") //Logs all hrefs if(config && config.log_hrefs && href_logfile) @@ -334,6 +330,6 @@ var/next_external_rsc = 0 'html/browser/scannernew.css', 'html/browser/playeroptions.css', ) - spawn (10) + spawn (10) //removing this spawn causes all clients to not get verbs. //Precache the client with all other assets slowly, so as to not block other browse() calls getFilesSlow(src, SSasset.cache, register_asset = FALSE) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2fdb79069e3..ef4359a5861 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -28,6 +28,7 @@ var/list/preferences_datums = list() var/UI_style = "Midnight" var/tgui_fancy = TRUE + var/tgui_lock = TRUE var/toggles = TOGGLES_DEFAULT var/chat_toggles = TOGGLES_DEFAULT_CHAT var/ghost_form = "ghost" @@ -326,6 +327,7 @@ var/list/preferences_datums = list() dat += "

General Settings

" dat += "UI Style: [UI_style]
" dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"]
" + dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"]
" dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
" dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
" dat += "Ghost ears: [(chat_toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" @@ -1008,11 +1010,17 @@ var/list/preferences_datums = list() UI_style = "Plasmafire" if("Plasmafire") UI_style = "Retro" + if("Retro") + UI_style = "Slimecore" + if("Slimecore") + UI_style = "Operative" else UI_style = "Midnight" if("tgui_fancy") tgui_fancy = !tgui_fancy + if("tgui_lock") + tgui_lock = !tgui_lock if("hear_adminhelps") toggles ^= SOUND_ADMINHELP diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 4971819a84e..0b0245f4a41 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -165,6 +165,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["lastchangelog"] >> lastchangelog S["UI_style"] >> UI_style S["tgui_fancy"] >> tgui_fancy + S["tgui_lock"] >> tgui_lock if(islist(S["be_special"])) S["be_special"] >> be_special @@ -190,8 +191,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) - UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro"), initial(UI_style)) + UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative"), initial(UI_style)) tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) + tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) toggles = sanitize_integer(toggles, 0, 65535, initial(toggles)) ghost_form = sanitize_inlist(ghost_form, ghost_forms, initial(ghost_form)) @@ -212,6 +214,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["lastchangelog"] << lastchangelog S["UI_style"] << UI_style S["tgui_fancy"] << tgui_fancy + S["tgui_lock"] << tgui_lock S["be_special"] << be_special S["default_slot"] << default_slot S["toggles"] << toggles diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 139f4812fec..88dd4e7d113 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -13,7 +13,7 @@ var/obj/item/clothing/suit/space/hardsuit/suit item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite) action_button_name = "Toggle Helmet Light" - flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP + flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -38,6 +38,15 @@ if(on) user.AddLuminosity(-brightness_on) SetLuminosity(brightness_on) + if(suit) + suit.RemoveHelmet() + +/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot) + if(slot != slot_head) + if(suit) + suit.RemoveHelmet() + else + qdel(src) /obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg) var/mob/wearer = loc @@ -178,7 +187,7 @@ on = 0 var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null action_button_name = "Toggle Helmet Mode" - flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP + flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() @@ -457,7 +466,7 @@ var/datum/effect_system/spark_spread/s = new s.set_up(2, 1, src) s.start() - owner.visible_message("The [attack_text] sparks harmlessly off [owner]'s shields!") + owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") current_charges-- recharge_cooldown = world.time + recharge_delay SSobj.processing |= src diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 89c27f94d13..caccd580ebc 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -228,7 +228,7 @@ for(var/mob/living/M in view(6, owner)) if(M == owner) continue - owner.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5) + owner.Beam(M,icon_state="lightning[rand(1, 12)]",icon='icons/effects/effects.dmi',time=5) M.adjustFireLoss(25) playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) return 1 diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 3ad99150f75..a50f174c9bc 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -137,6 +137,8 @@ helmet.attack_self(H) H.unEquip(helmet, 1) H.update_inv_wear_suit() + H << "The helmet on the hardsuit disengages." + playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) helmet.loc = src /obj/item/clothing/suit/space/hardsuit/dropped() @@ -163,6 +165,4 @@ H.update_inv_wear_suit() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) else - H << "You disengage the helmet on the hardsuit." - playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) RemoveHelmet() diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index ba20754944b..72517dce58b 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -18,7 +18,7 @@ if(turfs.len) //Pick a turf to spawn at if we can var/turf/simulated/T = pick(turfs) - spawn(0) new/obj/effect/spacevine_controller(T) //spawn a controller at turf + new/obj/effect/spacevine_controller(T) //spawn a controller at turf /datum/spacevine_mutation @@ -228,7 +228,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.oxygen = max(0, GM.oxygen - severity * holder.energy) + if(!GM.gases["o2"]) + return + GM.gases["o2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/nitro_eater name = "nitrogen consuming" @@ -240,7 +243,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.nitrogen = max(0, GM.nitrogen - severity * holder.energy) + if(!GM.gases["n2"]) + return + GM.gases["n2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/carbondioxide_eater name = "CO2 consuming" @@ -252,7 +258,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.carbon_dioxide = max(0, GM.carbon_dioxide - severity * holder.energy) + if(!GM.gases["co2"]) + return + GM.gases["co2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/plasma_eater name = "toxins consuming" @@ -264,7 +273,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.toxins = max(0, GM.toxins - severity * holder.energy) + if(!GM.gases["plasma"]) + return + GM.gases["plasma"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/thorns name = "thorny" @@ -425,6 +437,7 @@ /obj/effect/spacevine_controller + invisibility = 101 var/list/obj/effect/spacevine/vines = list() var/list/growth_queue = list() var/spread_multiplier = 5 diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm index 955fd7fd390..3b2dfe80a06 100644 --- a/code/modules/events/wizard/fakeexplosion.dm +++ b/code/modules/events/wizard/fakeexplosion.dm @@ -8,5 +8,5 @@ /datum/round_event/wizard/fake_explosion/start() for(var/mob/M in player_list) M << 'sound/machines/Alarm.ogg' - sleep(100) - ticker.station_explosion_cinematic(1,"fake") //:o) \ No newline at end of file + spawn(100) + ticker.station_explosion_cinematic(1,"fake") //:o) \ No newline at end of file diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index c260a51251c..ec6f4fa06c5 100644 --- a/code/modules/events/wizard/imposter.dm +++ b/code/modules/events/wizard/imposter.dm @@ -38,9 +38,11 @@ ticker.mode.apprentices += I.mind I.mind.special_role = "imposter" - var/datum/objective/protect_objective = add_objective(I.mind, /datum/objective/default/protect) + var/datum/objective/protect/protect_objective = new /datum/objective/protect + protect_objective.owner = I.mind protect_objective.target = W.mind protect_objective.explanation_text = "Protect [W.real_name], the wizard." + I.mind.objectives += protect_objective ticker.mode.update_wiz_icons_added(I.mind) I.attack_log += "\[[time_stamp()]\] Is an imposter!" diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index eb933f8ce7a..08fb9940f8d 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -1,4 +1,5 @@ /mob/living/carbon/proc/dream() + set waitfor = 0 dreaming = 1 var/list/dreams = list( "an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain", @@ -8,17 +9,16 @@ "a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect", "riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying" ) - spawn(0) - for(var/i = rand(1,4),i > 0, i--) - var/dream_image = pick(dreams) - dreams -= dream_image - src << "... [dream_image] ..." - sleep(rand(40,70)) - if(paralysis <= 0) - dreaming = 0 - return 0 - dreaming = 0 - return 1 + for(var/i = rand(1,4),i > 0, i--) + var/dream_image = pick(dreams) + dreams -= dream_image + src << "... [dream_image] ..." + sleep(rand(40,70)) + if(paralysis <= 0) + dreaming = 0 + return 0 + dreaming = 0 + return 1 /mob/living/carbon/proc/handle_dreams() if(prob(5) && !dreaming) dream() diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1c3365cd59a..03648956916 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -128,7 +128,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(!U.welded) src.loc = U.loc break - image_state = pick("plasma","sleeping_agent") + image_state = pick("plasma","nitrous_oxide") flood_images += image(image_icon,src,image_state,MOB_LAYER) flood_turfs += get_turf(src.loc) if(target.client) target.client.images |= flood_images diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm index e97d65fdea7..c41e3682c35 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food&drinks/drinks/drinks/bottle.dm @@ -7,6 +7,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle amount_per_transfer_from_this = 10 volume = 100 + throwforce = 15 item_state = "broken_beer" //Generic held-item sprite until unique ones are made. var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets) var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it @@ -124,8 +125,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/proc/SplashReagents(var/mob/M) if(src.reagents.total_volume) - for(var/mob/O in viewers(M, null)) - O.show_message(text("The contents of \the [src] splashes all over [M]!"), 1) + M.visible_message("The contents of \the [src] splashes all over [M]!") reagents.reaction(M, TOUCH) reagents.clear_reagents() return diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 0efe72640e1..baec9c92ea7 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -87,7 +87,7 @@ else return ..() /obj/item/weapon/deck/proc/dealTo(mob/living/target, mob/living/source) - if (!src.cards.len) + if (!cards.len) source.show_message("There are no cards in the deck.") return @@ -185,10 +185,10 @@ . = ..() if((!concealed || src.loc == usr) && cards.len) - usr.show_message("It contains: ") + usr.show_message("It contains: ", 1) for (var/datum/playingcard/card in cards) - usr.show_message("The [card.name].") + usr.show_message("The [card.name].", 1) /obj/item/weapon/hand/proc/update_conceal() if (src.concealed) src.hi.updateContent("headbar", "You are currently concealing your hand. Reveal your hand.") diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm index 6f187ea2ae9..ea41f4f1807 100644 --- a/code/modules/holiday/halloween.dm +++ b/code/modules/holiday/halloween.dm @@ -212,7 +212,7 @@ step(I,direction) return -/mob/living/simple_animal/shade/howling_ghost/adjustBruteLoss() +/mob/living/simple_animal/shade/howling_ghost/adjustHealth() return /mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -272,7 +272,7 @@ /mob/living/simple_animal/hostile/retaliate/clown/insane/AttackTarget() return -/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustBruteLoss() +/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustHealth() if(prob(5)) playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 13c40680a50..cd6ed978b57 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -377,7 +377,7 @@ harvest = 0 weedlevel = 0 // Reset - spawn(5) // Wait a while + sleep(5) // Wait a while update_icon() visible_message("[oldPlantName] suddenly mutated into [myseed.plantname]!") @@ -397,7 +397,7 @@ harvest = 0 weedlevel = 0 // Reset - spawn(5) // Wait a while + sleep(5) // Wait a while update_icon() visible_message("The mutated weeds in [src] spawned a [myseed.plantname]!") else @@ -798,8 +798,7 @@ user << "You reconnect \the [src]'s hoses." for(var/obj/machinery/hydroponics/h in range(1,src)) - spawn() - h.update_icon() + h.update_icon() return diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 044ce578d40..638ac5d5a7c 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -13,8 +13,7 @@ /obj/structure/closet/crate/secure/loot/New() ..() - var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - + var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "z") code = "" for(var/i = 0, i < codelen, i++) var/dig = pick(digits) @@ -169,7 +168,7 @@ user << "You leave the crate alone." else user << "A red light flashes." - lastattempt = input + lastattempt = replacetext(input, 0, "z") attempts-- if (attempts == 0) user << "The crate's anti-tamper system activates!" diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index de1b8269ad9..7d0e9756caf 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -655,18 +655,19 @@ wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver, /obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron, /obj/item/weapon/ore/bananium) + healable = 0 /mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = I if(W.welding && !stat) - if(AIStatus == AI_ON) + if(AIStatus != AI_OFF && AIStatus != AI_IDLE) user << "[src] is moving around too much to repair!" return if(maxHealth == health) user << "[src] is at full integrity." else - health += 10 + adjustBruteLoss(-10) user << "You repair some of the armor on [src]." return if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner)) @@ -741,7 +742,7 @@ O.loc = src.loc return -/mob/living/simple_animal/hostile/mining_drone/adjustBruteLoss() +/mob/living/simple_animal/hostile/mining_drone/adjustHealth() if(search_objects) SetOffenseBehavior() ..() diff --git a/code/modules/mining/lavaland/weather.dm b/code/modules/mining/lavaland/weather.dm index 35eb9a821ff..2d24616df50 100644 --- a/code/modules/mining/lavaland/weather.dm +++ b/code/modules/mining/lavaland/weather.dm @@ -36,9 +36,9 @@ if(M.z == target_z) M << start_up_message - sleep(start_up_time) - stage = MAIN_STAGE - weather_main() + spawn(start_up_time) + stage = MAIN_STAGE + weather_main() /datum/weather/proc/weather_main() diff --git a/code/modules/mining/lavaland/weather_types.dm b/code/modules/mining/lavaland/weather_types.dm index e32fbf4dc7a..89308d4437c 100644 --- a/code/modules/mining/lavaland/weather_types.dm +++ b/code/modules/mining/lavaland/weather_types.dm @@ -47,12 +47,13 @@ duration_overlay = "" overlay_layer = 10 -/datum/weather/advanced_darkness/advanced_darkness/update_areas() - ..() +/datum/weather/advanced_darkness/update_areas() for(var/area/A in impacted_areas) if(stage == MAIN_STAGE) + A.invisibility = 0 A.opacity = 1 else + A.invisibility = 100 A.opacity = 0 //Ash storms diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f15c5a5c37e..40c0ea1d568 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -52,6 +52,7 @@ circuit = /obj/item/weapon/circuitboard/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away" + no_destination_swap = 1 /*********************Pickaxe & Drills**************************/ @@ -257,11 +258,7 @@ A.nitrogen = 82 A.carbon_dioxide = 0 A.toxins = 0 - A.air.oxygen = 21 - A.air.carbon_dioxide = 0 - A.air.nitrogen = 82 - A.air.toxins = 0 - A.air.temperature = 293.15 + A.air.copy_from_turf(A) SSair.add_to_active(A) A.overlays.Cut() var/area/Z = get_area(A) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index ad4f5ca3d08..e8eb3462876 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -16,6 +16,7 @@ var/global/list/rockTurfEdgeCache opacity = 1 density = 1 blocks_air = 1 + layer = TURF_LAYER + 0.05 temperature = TCMB var/environment_type = "asteroid" var/turf/simulated/floor/plating/asteroid/turf_type = /turf/simulated/floor/plating/asteroid //For basalt vs normal asteroid @@ -89,7 +90,7 @@ var/global/list/rockTurfEdgeCache icon_state = "rock" return -/turf/simulated/mineral/proc/Spread(turf/T) +/turf/simulated/mineral/Spread(turf/T) new src.type(T) /turf/simulated/mineral/random @@ -284,16 +285,14 @@ var/global/list/rockTurfEdgeCache countdown(notify_admins) /turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0) - spawn(0) - while(stage == 1 && det_time > 0 && mineralAmt >= 1) - det_time-- - sleep(5) - if(stage == 1 && det_time <= 0 && mineralAmt >= 1) - var/turf/bombturf = get_turf(src) - mineralAmt = 0 - explosion(bombturf,1,3,5, adminlog = notify_admins) - if(stage == 0 || stage == 2) - return + set waitfor = 0 + while(stage == 1 && det_time > 0 && mineralAmt >= 1) + det_time-- + sleep(5) + if(stage == 1 && det_time <= 0 && mineralAmt >= 1) + var/turf/bombturf = get_turf(src) + mineralAmt = 0 + explosion(bombturf,1,3,5, adminlog = notify_admins) /turf/simulated/mineral/gibtonite/proc/defuse() if(stage == 1) @@ -685,7 +684,7 @@ var/global/list/rockTurfEdgeCache /turf/simulated/chasm/proc/drop(atom/movable/AM) visible_message("[AM] falls into [src]!") - AM.Move(locate(drop_x, drop_y, drop_z)) + AM.forceMove(locate(drop_x, drop_y, drop_z)) AM.visible_message("[AM] falls from above!") if(istype(AM, /mob/living)) var/mob/living/L = AM diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 641fa9446f5..65643040b5c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -182,9 +182,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!istype(usr, /mob/dead/observer)) usr << "Not when you're not dead!" return - usr.verbs -= /mob/dead/observer/proc/dead_tele - spawn(30) - usr.verbs += /mob/dead/observer/proc/dead_tele var/A A = input("Area to jump to", "BOOYEA", A) as null|anything in sortedAreas var/area/thearea = A diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm index 1bbb0e3ee55..44ecafca878 100644 --- a/code/modules/mob/interactive.dm +++ b/code/modules/mob/interactive.dm @@ -324,8 +324,8 @@ //proc functions for(var/Proc in functions) if(!isnotfunc()) - spawn(1) - call(src,Proc)(src) + callfunction(Proc) + //target interaction stays hardcoded @@ -411,6 +411,9 @@ tryWalk(TARGET) LAST_TARGET = TARGET +/mob/living/carbon/human/interactive/proc/callfunction(Proc) + set waitfor = 0 + call(src,Proc)(src) /mob/living/carbon/human/interactive/proc/tryWalk(turf/TARGET) if(!isnotfunc()) if(!walk2derpless(TARGET)) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index ccb3d3f8695..1d78e69955a 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -12,6 +12,7 @@ ventcrawler = 2 languages = ALIEN verb_say = "hisses" + bubble_icon = "alien" type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno var/nightvision = 1 @@ -177,6 +178,12 @@ Des: Removes all infected images from the alien. /mob/living/carbon/alien/get_standard_pixel_y_offset(lying = 0) return initial(pixel_y) +/mob/living/carbon/alien/proc/alien_evolve(mob/living/carbon/alien/new_xeno) + src << "You begin to evolve!" + visible_message("[src] begins to twist and contort!") + if(mind) + mind.transfer_to(new_xeno) + qdel(src) #undef HEAT_DAMAGE_LEVEL_1 #undef HEAT_DAMAGE_LEVEL_2 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 05bc607668b..4f01f0ca45d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -90,8 +90,7 @@ Doesn't work on other aliens/AI.*/ if(locate(/obj/structure/alien/weeds/node) in get_turf(user)) src << "There's already a weed node here." return 0 - for(var/mob/O in viewers(user, null)) - O.show_message(text("[user] has planted some alien weeds!"), 1) + user.visible_message("[user] has planted some alien weeds!") new/obj/structure/alien/weeds/node(user.loc) return 1 @@ -241,7 +240,7 @@ Doesn't work on other aliens/AI.*/ user << "There is already a resin structure there." return 0 var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in structures - if(!choice) + if(!choice) return 0 if (!cost_check(check_turf,user)) return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 8f12f2b593b..1b98f34f670 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -26,12 +26,12 @@ action_icon_state = "alien_evolve_drone" /obj/effect/proc_holder/alien/evolve/fire(mob/living/carbon/alien/user) - if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal/)) - user << "You begin to evolve!" - user.visible_message("[user] begins to twist and contort!") + if(!isturf(user.loc)) + user << "You can't evolve here!" + return 0 + if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal)) var/mob/living/carbon/alien/humanoid/royal/praetorian/new_xeno = new (user.loc) - user.mind.transfer_to(new_xeno) - qdel(user) + user.alien_evolve(new_xeno) return 1 else user << "We already have a living royal!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index b1b7efece80..b99f7eb5e88 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -4,6 +4,7 @@ maxHealth = 125 health = 125 icon_state = "alienh_s" + var/obj/screen/leap_icon = null /mob/living/carbon/alien/humanoid/hunter/New() internal_organs += new /obj/item/organ/internal/alien/plasmavessel/small @@ -37,7 +38,6 @@ //Hunter verbs - /mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(message = 1) leap_on_click = !leap_on_click leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index a493926e129..c7ce06b06b6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -54,11 +54,8 @@ /obj/effect/proc_holder/alien/royal/praetorian/evolve/fire(mob/living/carbon/alien/user) if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal/queen)) - user << "You begin to evolve!" - user.visible_message("[user] begins to twist and contort!") var/mob/living/carbon/alien/humanoid/royal/queen/new_xeno = new (user.loc) - user.mind.transfer_to(new_xeno) - qdel(user) + user.alien_evolve(new_xeno) return 1 else user << "We already have an alive queen." diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 6ed3532f9fd..2c9d6b5b156 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -149,6 +149,15 @@ /mob/living/carbon/alien/humanoid/get_permeability_protection() return 0.8 +/mob/living/carbon/alien/humanoid/alien_evolve(mob/living/carbon/alien/humanoid/new_xeno) + drop_l_hand() + drop_r_hand() + for(var/atom/movable/A in stomach_contents) + stomach_contents.Remove(A) + new_xeno.stomach_contents.Add(A) + A.loc = new_xeno + ..() + //For alien evolution/promotion procs. Checks for proc/alien_type_present(var/alienpath) for(var/mob/living/carbon/alien/humanoid/A in living_mob_list) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 25f8bf1f9bd..e8e94b0f044 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -5,8 +5,9 @@ ventcrawler = 0 //pull over that ass too fat unique_name = 0 pixel_x = -16 + bubble_icon = "alienroyal" mob_size = MOB_SIZE_LARGE - layer = 6 + layer = MOB_LAYER + 0.5 //above most mobs, but below speechbubbles pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper. butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 3f9cb657498..d575ba5f4f8 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -32,8 +32,6 @@ return var/mob/living/carbon/alien/larva/L = user - if(L.stat != CONSCIOUS) - return if(L.handcuffed || L.legcuffed) // Cuffing larvas ? Eh ? user << "You cannot evolve when you are cuffed." @@ -45,6 +43,9 @@ L << "Drones are the weakest and slowest of the castes, but can grow into the queen if there is none, and are vital to maintaining a hive with their resin secretion abilities." var/alien_caste = alert(L, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") + if(user.incapacitated()) //something happened to us while we were choosing. + return + var/mob/living/carbon/alien/humanoid/new_xeno switch(alien_caste) if("Hunter") @@ -53,8 +54,8 @@ new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(L.loc) if("Drone") new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc) - if(L.mind) L.mind.transfer_to(new_xeno) - qdel(L) + + L.alien_evolve(new_xeno) return 0 else user << "You are not fully grown." diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 4162a583675..ac23410cc38 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -9,22 +9,27 @@ var/toxins_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + var/list/breath_gases = breath.gases + + breath.assert_gases("plasma", "o2") //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + var/Toxins_pp = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure if(Toxins_pp) // Detect toxins in air - adjustPlasma(breath.toxins*250) + adjustPlasma(breath_gases["plasma"][MOLES]*250) throw_alert("alien_tox", /obj/screen/alert/alien_tox) - toxins_used = breath.toxins + toxins_used = breath_gases["plasma"][MOLES] else clear_alert("alien_tox") //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used + breath_gases["plasma"][MOLES] -= toxins_used + breath_gases["o2"][MOLES] += toxins_used + + breath.garbage_collect() //BREATH TEMPERATURE handle_breath_temperature(breath) diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 5a1746e5ed2..dec01676dd5 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -1,5 +1,5 @@ /mob/living/carbon/alien/say(message) - . = ..(message, "A") + . = ..() if(.) playsound(loc, "hiss", 25, 1, 1) //erp just isn't the same without sound feedback @@ -11,8 +11,10 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "Hivemind, [shown_name] [message_a]" for(var/mob/S in player_list) - if((!S.stat && S.hivecheck()) || (S in dead_mob_list)) + if(!S.stat && S.hivecheck()) S << rendered + if(S in dead_mob_list) + S << "(F) [rendered]" /mob/living/carbon/alien/humanoid/royal/queen/alien_talk(message, shown_name = name) shown_name = "[shown_name]" diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 27d29ef4e50..40727647cd7 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -39,7 +39,10 @@ var/global/posibrain_notif_cooldown = 0 spawn(askDelay) //Seperate from the global cooldown. notified = 0 update_icon() - visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + if(brainmob.stat == CONSCIOUS && brainmob.client) + visible_message("The positronic brain pings, and its lights start flashing. Success!") + else + visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") return //Code for deleting personalities recommended here. @@ -127,7 +130,6 @@ var/global/posibrain_notif_cooldown = 0 return /obj/item/device/mmi/posibrain/New() - brainmob = new(src) brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","ANNS","KOS","TKRG","XAL","STLP","CBOS","DNCN","FXMC","DRSD"))]-[rand(100, 999)]" brainmob.real_name = brainmob.name @@ -137,7 +139,6 @@ var/global/posibrain_notif_cooldown = 0 brainmob.silent = 0 dead_mob_list -= brainmob ping_ghosts("created") - ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 36184591213..c7d8d287697 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -364,22 +364,21 @@ var/const/GALOSHES_DONT_HELP = 4 adjustBruteLoss(10) /mob/living/carbon/proc/spin(spintime, speed) - spawn() - var/D = dir - while(spintime >= speed) - sleep(speed) - switch(D) - if(NORTH) - D = EAST - if(SOUTH) - D = WEST - if(EAST) - D = SOUTH - if(WEST) - D = NORTH - dir = D - spintime -= speed - return + set waitfor = 0 + var/D = dir + while(spintime >= speed) + sleep(speed) + switch(D) + if(NORTH) + D = EAST + if(SOUTH) + D = WEST + if(EAST) + D = SOUTH + if(WEST) + D = NORTH + dir = D + spintime -= speed /mob/living/carbon/resist_buckle() if(restrained()) diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index ae8d90f7985..d9d330e3a7a 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -46,6 +46,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 /mob/living/carbon/human/handle_blood() if(NOBLOOD in dna.species.specflags) + blood_max = 0 return if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. @@ -82,15 +83,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 update_body() var/word = pick("dizzy","woozy","faint") src << "You feel [word]." - if(oxyloss < 20) - oxyloss += 3 + oxyloss += max(0, (20-oxyloss)*0.2) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) if(!pale) pale = 1 update_body() - if(oxyloss < 50) - oxyloss += 10 - oxyloss += 1 + oxyloss += max(1, (50-oxyloss)*0.2) if(prob(5)) eye_blurry += 6 var/word = pick("dizzy","woozy","faint") @@ -309,4 +307,4 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 else B.blood_DNA[source.data["blood_DNA"]] = "O+" - return B \ No newline at end of file + return B diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d578bb03c28..891331c3cc1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -37,8 +37,6 @@ make_blood() ..() - var/mob/M = src - faction |= "\ref[M]" /mob/living/carbon/human/prepare_data_huds() //Update med hud images... diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index e3c6d588a28..d4f4e91e080 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,7 +1,12 @@ /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") ..(user, 1) + playsound(loc, user.dna.species.attack_sound, 25, 1, -1) + var/hulk_verb = pick("smash","pummel") + visible_message("[user] has [hulk_verb]ed [src]!", \ + "[user] has [hulk_verb]ed [src]!") adjustBruteLoss(15) + return 1 /mob/living/carbon/human/attack_hand(mob/living/carbon/human/M) if(..()) //to allow surgery to return properly. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 88a4581e713..27a76f7eec2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -306,6 +306,8 @@ if(head) if(head.flags & BLOCK_GAS_SMOKE_EFFECT) . = 1 + if(NOBREATH in dna.species.specflags) + . = 1 return . /mob/living/carbon/human/proc/handle_embedded_objects() for(var/obj/item/organ/limb/L in organs) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index bd834169e4e..2f00d7f0024 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -38,6 +38,7 @@ var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing var/list/no_equip = list() // slots the race can't equip stuff to var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids + var/blacklisted = 0 //Flag to exclude from green slime core species. var/dangerous_existence = null //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!" var/say_mod = "says" // affects the speech message var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have. @@ -1167,10 +1168,14 @@ var/gas_breathed = 0 + var/list/breath_gases = breath.gases + + breath.assert_gases("o2", "plasma", "co2", "n2o") + //Partial pressures in our breath - var/O2_pp = breath.get_breath_partial_pressure(breath.oxygen) - var/Toxins_pp = breath.get_breath_partial_pressure(breath.toxins) - var/CO2_pp = breath.get_breath_partial_pressure(breath.carbon_dioxide) + var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES]) + var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases["plasma"][MOLES]) + var/CO2_pp = breath.get_breath_partial_pressure(breath_gases["co2"][MOLES]) //-- OXY --// @@ -1178,7 +1183,7 @@ //Too much oxygen! //Yes, some species may not like it. if(safe_oxygen_max) if(O2_pp > safe_oxygen_max && !(NOBREATH in specflags)) - var/ratio = (breath.oxygen/safe_oxygen_max) * 10 + var/ratio = (breath_gases["o2"][MOLES]/safe_oxygen_max) * 10 H.adjustOxyLoss(Clamp(ratio,oxy_breath_dam_min,oxy_breath_dam_max)) H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) else @@ -1187,17 +1192,17 @@ //Too little oxygen! if(safe_oxygen_min) if(O2_pp < safe_oxygen_min) - gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath.oxygen) + gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath_gases["o2"][MOLES]) H.throw_alert("oxy", /obj/screen/alert/oxy) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.oxygen/6 + gas_breathed = breath_gases["o2"][MOLES]/6 H.clear_alert("oxy") //Exhale - breath.oxygen -= gas_breathed - breath.carbon_dioxide += gas_breathed + breath_gases["o2"][MOLES] -= gas_breathed + breath_gases["co2"][MOLES] += gas_breathed gas_breathed = 0 @@ -1215,7 +1220,7 @@ H.adjustOxyLoss(8) H.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2) if(prob(20)) // Lets give them some chance to know somethings not right though I guess. - spawn(0) H.emote("cough") + H.emote("cough") else H.co2overloadtime = 0 @@ -1224,17 +1229,17 @@ //Too little CO2! if(safe_co2_min) if(CO2_pp < safe_co2_min) - gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath.carbon_dioxide) + gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath_gases["co2"][MOLES]) H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.carbon_dioxide/6 + gas_breathed = breath_gases["co2"][MOLES]/6 H.clear_alert("not_enough_co2") //Exhale - breath.carbon_dioxide -= gas_breathed - breath.oxygen += gas_breathed + breath_gases["co2"][MOLES] -= gas_breathed + breath_gases["o2"][MOLES] += gas_breathed gas_breathed = 0 @@ -1243,7 +1248,7 @@ //Too much toxins! if(safe_toxins_max) if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags)) - var/ratio = (breath.toxins/safe_toxins_max) * 10 + var/ratio = (breath_gases["plasma"][MOLES]/safe_toxins_max) * 10 if(H.reagents) H.reagents.add_reagent("plasma", Clamp(ratio, tox_breath_dam_min, tox_breath_dam_max)) H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) @@ -1254,34 +1259,33 @@ //Too little toxins! if(safe_toxins_min) if(Toxins_pp < safe_toxins_min && !(NOBREATH in specflags)) - gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath.toxins) + gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath_gases["plasma"][MOLES]) H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.toxins/6 + gas_breathed = breath_gases["plasma"][MOLES]/6 H.clear_alert("not_enough_tox") //Exhale - breath.toxins -= gas_breathed - breath.carbon_dioxide += gas_breathed + breath_gases["plasma"][MOLES] -= gas_breathed + breath_gases["co2"][MOLES] += gas_breathed gas_breathed = 0 //-- TRACES --// - if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_pp = breath.get_breath_partial_pressure(SA.moles) - if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit - H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! - if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.sleeping = max(H.sleeping+2, 10) - else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning - if(prob(20)) - spawn(0) H.emote(pick("giggle", "laugh")) - - handle_breath_temperature(breath, H) + if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. + var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES]) + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! + if(SA_pp > SA_sleep_min) // Enough to make us sleep as well + H.sleeping = max(H.sleeping+2, 10) + else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + if(prob(20)) + H.emote(pick("giggle", "laugh")) + handle_breath_temperature(breath, H) + breath.garbage_collect() return 1 @@ -1294,8 +1298,7 @@ if(!(NOBREATH in specflags) || (H.health <= config.health_threshold_crit)) if(prob(20)) - spawn(0) - H.emote("gasp") + H.emote("gasp") if(breath_pp > 0) var/ratio = safe_breath_min/breath_pp H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all! diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index c8ae6d2343f..4b819853b4e 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -168,6 +168,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) darksight = 8 invis_sight = SEE_INVISIBLE_MINIMUM sexes = 0 + blacklisted = 1 ignored_by = list(/mob/living/simple_animal/hostile/faithless) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow specflags = list(NOBREATH,NOBLOOD,RADIMMUNE) @@ -343,6 +344,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) armor = 55 siemens_coeff = 0 punchmod = 5 + blacklisted = 1 no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) nojumpsuit = 1 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem @@ -387,6 +389,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) id = "skeleton" say_mod = "rattles" need_nutrition = 0 + blacklisted = 1 sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE) @@ -412,6 +415,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) id = "zombie" say_mod = "moans" sexes = 0 + blacklisted = 1 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE) @@ -453,16 +457,16 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) /datum/species/abductor/handle_speech(message) //Hacks var/mob/living/carbon/human/user = usr + var/rendered = "[user.name]: [message]" for(var/mob/living/carbon/human/H in mob_list) if(H.dna.species.id != "abductor") continue else var/datum/species/abductor/target_spec = H.dna.species if(target_spec.team == team) - H << "[user.name]: [message]" - //return - technically you can add more aliens to a team + H << rendered for(var/mob/M in dead_mob_list) - M << "[user.name]: [message]" + M << "(F) [rendered]" return "" @@ -479,6 +483,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_ safe_toxins_min = 16 //We breath THIS! safe_toxins_max = 0 dangerous_existence = 1 //So so much + blacklisted = 1 //See above need_nutrition = 0 //Hard to eat through a helmet burnmod = 2 heatmod = 2 @@ -505,7 +510,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_ if(environment) var/total_moles = environment.total_moles() if(total_moles) - if((environment.oxygen /total_moles) >= 0.01) + if(environment.gases["o2"] && (environment.gases["o2"][MOLES] /total_moles) >= 0.01) H.adjust_fire_stacks(0.5) if(!H.on_fire && H.fire_stacks > 0) H.visible_message("[H]'s body reacts with the atmosphere and bursts into flames!","Your body reacts with the atmosphere and bursts into flame!") @@ -549,6 +554,7 @@ var/global/list/synth_flesh_disguises = list() SA_para_min = 0 SA_sleep_min = 0 dangerous_existence = 1 + blacklisted = 1 need_nutrition = 0 //beep boop robots do not need sustinance meat = null var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE) //for getting these values back for assume_disguise() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index cf61c41cdab..00fbd98a442 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -48,7 +48,7 @@ if(losebreath > 0) losebreath-- if(prob(10)) - spawn emote("gasp") + emote("gasp") if(istype(loc, /obj/)) var/obj/loc_as_obj = loc loc_as_obj.handle_internal_lifeform(src,0) @@ -105,21 +105,23 @@ var/oxygen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - var/O2_partialpressure = (breath.oxygen/breath.total_moles())*breath_pressure - var/Toxins_partialpressure = (breath.toxins/breath.total_moles())*breath_pressure - var/CO2_partialpressure = (breath.carbon_dioxide/breath.total_moles())*breath_pressure + var/list/breath_gases = breath.gases + breath.assert_gases("o2","plasma","co2","n2o") + + var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure + var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure + var/CO2_partialpressure = (breath_gases["co2"][MOLES]/breath.total_moles())*breath_pressure //OXYGEN if(O2_partialpressure < safe_oxy_min) //Not enough oxygen if(prob(20)) - spawn(0) - emote("gasp") + emote("gasp") if(O2_partialpressure > 0) var/ratio = safe_oxy_min/O2_partialpressure adjustOxyLoss(min(5*ratio, 3)) failed_last_breath = 1 - oxygen_used = breath.oxygen*ratio/6 + oxygen_used = breath_gases["o2"][MOLES]*ratio/6 else adjustOxyLoss(3) failed_last_breath = 1 @@ -128,11 +130,11 @@ else //Enough oxygen failed_last_breath = 0 adjustOxyLoss(-5) - oxygen_used = breath.oxygen/6 + oxygen_used = breath_gases["o2"][MOLES]/6 clear_alert("oxy") - breath.oxygen -= oxygen_used - breath.carbon_dioxide += oxygen_used + breath_gases["o2"][MOLES] -= oxygen_used + breath_gases["co2"][MOLES] += oxygen_used //CARBON DIOXIDE if(CO2_partialpressure > safe_co2_max) @@ -144,31 +146,31 @@ if(world.time - co2overloadtime > 300) adjustOxyLoss(8) if(prob(20)) - spawn(0) emote("cough") + emote("cough") else co2overloadtime = 0 //TOXINS/PLASMA if(Toxins_partialpressure > safe_tox_max) - var/ratio = (breath.toxins/safe_tox_max) * 10 + var/ratio = (breath_gases["plasma"][MOLES]/safe_tox_max) * 10 if(reagents) reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) else clear_alert("tox_in_air") - //TRACE GASES - if(breath.trace_gases.len) - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_partialpressure = (SA.moles/breath.total_moles())*breath_pressure - if(SA_partialpressure > SA_para_min) - Paralyse(3) - if(SA_partialpressure > SA_sleep_min) - sleeping = max(sleeping+2, 10) - else if(SA_partialpressure > 0.01) - if(prob(20)) - spawn(0) emote(pick("giggle","laugh")) + //NITROUS OXIDE + if(breath_gases["n2o"]) + var/SA_partialpressure = (breath_gases["n2o"][MOLES]/breath.total_moles())*breath_pressure + if(SA_partialpressure > SA_para_min) + Paralyse(3) + if(SA_partialpressure > SA_sleep_min) + sleeping = max(sleeping+2, 10) + else if(SA_partialpressure > 0.01) + if(prob(20)) + emote(pick("giggle","laugh")) + breath.garbage_collect() //BREATH TEMPERATURE handle_breath_temperature(breath) @@ -264,21 +266,21 @@ /mob/living/carbon/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) + set waitfor = 0 + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + qdel(M) continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(SSmob.times_fired%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + if(SSmob.times_fired%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 //This updates the health and status of the mob (conscious, unconscious, dead) /mob/living/carbon/handle_regular_status_updates() @@ -320,8 +322,7 @@ adjustStaminaLoss(-10) sleeping = max(sleeping-1, 0) if( prob(10) && health && !hal_crit ) - spawn(0) - emote("snore") + emote("snore") else clear_alert("asleep") diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index db7a3cf58d7..43ab7159124 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -139,9 +139,7 @@ /mob/living/carbon/monkey/handle_random_events() if (prob(1) && prob(2)) - spawn(0) - emote("scratch") - return + emote("scratch") /mob/living/carbon/monkey/has_smoke_protection() if(wear_mask) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 85216f02e9a..b1e60e3e517 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -96,10 +96,8 @@ damage = rand(10, 15) if ( (paralysis < 5) && (health > 0) ) Paralyse(rand(10, 15)) - spawn( 0 ) - visible_message("[M] has knocked out [name]!", \ + visible_message("[M] has knocked out [name]!", \ "[M] has knocked out [name]!") - return adjustBruteLoss(damage) add_logs(M, src, "attacked") updatehealth() @@ -107,7 +105,6 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [name]!", \ "[M] has attempted to punch [name]!") - if("disarm") if (!( paralysis )) M.do_attack_animation(src) @@ -122,7 +119,6 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ "[M] has disarmed [src]!") - return /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) if(..()) //if harm or disarm intent. diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index af5c3b5e4bb..86e7256edce 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -167,7 +167,7 @@ if(recursive) for(var/obj/item/T in I) - give_action_button(I, recursive - 1) + give_action_button(T, recursive - 1) //this handles hud updates. Calls update_vision() and handle_hud_icons() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c46d0f1cfde..6af067cc65c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -23,6 +23,8 @@ Sorry Giacom. Please don't be mad :( if(unique_name) name = "[name] ([rand(1, 1000)])" real_name = name + + faction |= "\ref[src]" /mob/living/Destroy() @@ -160,10 +162,10 @@ Sorry Giacom. Please don't be mad :( set name = "Pull" set category = "Object" - if(pulling == AM) + if(AM.Adjacent(src)) + start_pulling(AM) + else stop_pulling() - else if(AM.Adjacent(src)) - src.start_pulling(AM) //same as above /mob/living/pointed(atom/A as mob|obj|turf in view()) @@ -235,7 +237,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustBruteLoss(amount) if(status_flags & GODMODE) return 0 - bruteloss = min(max(bruteloss + amount, 0),(maxHealth*2)) + bruteloss = Clamp(bruteloss + amount, 0, maxHealth*2) handle_regular_status_updates() //we update our health right away. /mob/living/proc/getOxyLoss() @@ -243,7 +245,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustOxyLoss(amount) if(status_flags & GODMODE) return 0 - oxyloss = min(max(oxyloss + amount, 0),(maxHealth*2)) + oxyloss = Clamp(oxyloss + amount, 0, maxHealth*2) handle_regular_status_updates() /mob/living/proc/setOxyLoss(amount) @@ -256,7 +258,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustToxLoss(amount) if(status_flags & GODMODE) return 0 - toxloss = min(max(toxloss + amount, 0),(maxHealth*2)) + toxloss = Clamp(toxloss + amount, 0, maxHealth*2) handle_regular_status_updates() /mob/living/proc/setToxLoss(amount) @@ -269,7 +271,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustFireLoss(amount) if(status_flags & GODMODE) return 0 - fireloss = min(max(fireloss + amount, 0),(maxHealth*2)) + fireloss = Clamp(fireloss + amount, 0, maxHealth*2) handle_regular_status_updates() //we update our health right away. /mob/living/proc/getCloneLoss() @@ -277,7 +279,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustCloneLoss(amount) if(status_flags & GODMODE) return 0 - cloneloss = min(max(cloneloss + amount, 0),(maxHealth*2)) + cloneloss = Clamp(cloneloss + amount, 0, maxHealth*2) handle_regular_status_updates() /mob/living/proc/setCloneLoss(amount) @@ -290,7 +292,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustBrainLoss(amount) if(status_flags & GODMODE) return 0 - brainloss = min(max(brainloss + amount, 0),(maxHealth*2)) + brainloss = Clamp(brainloss + amount, 0, maxHealth*2) handle_regular_status_updates() /mob/living/proc/setBrainLoss(amount) @@ -303,7 +305,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustStaminaLoss(amount) if(status_flags & GODMODE) return 0 - staminaloss = min(max(staminaloss + amount, 0),(maxHealth*2)) + staminaloss = Clamp(staminaloss + amount, 0, maxHealth*2) /mob/living/proc/setStaminaLoss(amount) if(status_flags & GODMODE) return 0 @@ -438,6 +440,7 @@ Sorry Giacom. Please don't be mad :( eye_blurry = 0 ear_deaf = 0 ear_damage = 0 + hallucination = 0 heal_overall_damage(1000, 1000) ExtinguishMob() fire_stacks = 0 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 1af50b500f1..a41f907d439 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -142,7 +142,7 @@ ExtinguishMob() return var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment - if(G.oxygen < 1) + if(!G.gases["o2"] || G.gases["o2"][MOLES] < 1) ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire return var/turf/location = get_turf(src) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 27bd2ccb751..4d70e5f0a6a 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -50,6 +50,8 @@ var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" + var/bubble_icon = "default" //what icon the mob uses for speechbubbles + var/last_bumped = 0 var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a95d8be0c5d..c273cf9371f 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -142,7 +142,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) show_message(message, 2, deaf_message, deaf_type) return message -/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type, list/spans) +/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type = bubble_icon, list/spans) var/list/listening = get_hearers_in_view(message_range, source) for(var/mob/M in player_list) if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice @@ -158,7 +158,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(M.client) speech_bubble_recipients.Add(M.client) spawn(0) - flick_overlay(image('icons/mob/talk.dmi', src, "h[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30) + flick_overlay(image('icons/mob/talk.dmi', src, "[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30) /mob/proc/binarycheck() return 0 @@ -208,7 +208,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) log_say("[mind.changeling.changelingID]/[src.key] : [message]") for(var/mob/M in mob_list) if(M in dead_mob_list) - M << msg + M << "(F) [msg]" else switch(M.lingcheck()) if(2) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 9a4875bfe9a..3be94e46b2f 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -764,7 +764,7 @@ var/list/ai_list = list() var/list/obj/machinery/camera/visible = list() for (var/datum/camerachunk/CC in eyeobj.visibleCameraChunks) for (var/obj/machinery/camera/C in CC.cameras) - if (!C.can_use() || C.light_disabled || get_dist(C, eyeobj) > 7) + if (!C.can_use() || get_dist(C, eyeobj) > 7) continue visible |= C @@ -772,10 +772,10 @@ var/list/ai_list = list() remove = lit_cameras - visible for (var/obj/machinery/camera/C in remove) - C.SetLuminosity(0) - lit_cameras -= C + lit_cameras -= C //Removed from list before turning off the light so that it doesn't check the AI looking away. + C.Togglelight(0) for (var/obj/machinery/camera/C in add) - C.SetLuminosity(AI_CAMERA_LUMINOSITY) + C.Togglelight(1) lit_cameras |= C /mob/living/silicon/ai/proc/control_integrated_radio() diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index af6786025bc..df7fe9f149c 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -31,6 +31,8 @@ SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + point.the_disk = null //Point back to the disk. if(doomsday_device) doomsday_device.timing = 0 @@ -41,7 +43,6 @@ for(var/obj/machinery/ai_status_display/O in world) //change status if(src.key) - spawn( 0 ) O.mode = 2 if (istype(loc, /obj/item/device/aicard)) loc.icon_state = "aicard-404" diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 50c188ca629..9f11d34359b 100644 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -17,3 +17,10 @@ src.laws_sanity_check() src.laws.show_laws(who) + if(!everyone) + for(var/mob/living/silicon/robot/R in connected_robots) + if(R.lawupdate) + R.lawsync() + R.show_laws() + R.law_change_counter++ + diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 93e1147d746..baeed877e6f 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -161,7 +161,7 @@ sleep(2) //bring up APC dialog apc_override = 1 - theAPC.attack_ai(src) + theAPC.ui_interact(src, state = conscious_state) apc_override = 0 src:aiRestorePowerRoutine = 3 src << "Here are your current laws:" diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 014dd45b84c..b43ef3552f4 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -49,7 +49,7 @@ var/obj/machinery/hologram/holopad/T = current if(istype(T) && T.masters[src])//If there is a hologram and its master is the user. - send_speech(message, 7, T, "R", get_spans()) + send_speech(message, 7, T, "robot", get_spans()) src << "Holopad transmitted, [real_name] \"[message]\""//The AI can "hear" its own message. else src << "No holopad connected." diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index c1ea89972d6..3c11b2851a8 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -190,6 +190,10 @@ CRASH("pAI without card") loc = card +/mob/living/silicon/pai/canUseTopic(atom/movable/M) + return 1 + + //Addition by Mord_Sith to define AI's network change ability /* /mob/living/silicon/pai/proc/pai_network_change() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 4aea4929e76..c10a41e6a78 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -260,8 +260,7 @@ if(href_list["cable"]) var/turf/T = get_turf(src.loc) src.cable = new /obj/item/weapon/pai_cable(T) - for (var/mob/M in viewers(T)) - M.show_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "You hear the soft click of something light and hard falling to the ground.", 2) + T.visible_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", "You hear the soft click of something light and hard falling to the ground.") //src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window src.paiInterface() // So we'll just call the update directly rather than doing some default checks return @@ -527,6 +526,7 @@ dat += "Unable to obtain a reading.
" else var/datum/gas_mixture/environment = T.return_air() + var/list/env_gases = environment.gases var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() @@ -534,17 +534,10 @@ dat += "Air Pressure: [round(pressure,0.1)] kPa
" if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "Nitrogen: [round(n2_level*100)]%
" - dat += "Oxygen: [round(o2_level*100)]%
" - dat += "Carbon Dioxide: [round(co2_level*100)]%
" - dat += "Plasma: [round(plasma_level*100)]%
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" + for(var/id in env_gases) + var/gas_level = env_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_level > 0.01) + dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
" dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "Refresh Reading
" dat += "
" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 51ffa99333c..bfcebcb0ce5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1,10 +1,11 @@ /mob/living/silicon/robot name = "Cyborg" real_name = "Cyborg" - icon = 'icons/mob/robots.dmi'// + icon = 'icons/mob/robots.dmi' icon_state = "robot" maxHealth = 100 health = 100 + bubble_icon = "robot" var/sight_mode = 0 var/custom_name = "" designation = "Default" //used for displaying the prefix & getting the current module of cyborg @@ -1109,6 +1110,7 @@ scrambledcodes = 1 modtype = "Synd" faction = list("syndicate") + bubble_icon = "syndibot" designation = "Syndicate Assault" req_access = list(access_syndicate) var/playstyle_string = "You are a Syndicate assault cyborg!
\ diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 90ba92dd0f6..2d8e31e3c97 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -1,5 +1,3 @@ -/mob/living/silicon/say(message) - return ..(message, "R") /mob/living/silicon/get_spans() return ..() | SPAN_ROBOT @@ -13,12 +11,14 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "Robotic Talk, [name] [message_a]" for(var/mob/M in player_list) - if(M.binarycheck() || (M in dead_mob_list)) + if(M.binarycheck()) if(istype(M, /mob/living/silicon/ai)) var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" M << renderedAI else M << rendered + if(M in dead_mob_list) + M << "(F) [rendered]" /mob/living/silicon/binarycheck() return 1 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b4604dbc0b9..fb71eca98c0 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -7,6 +7,7 @@ verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" + bubble_icon = "machine" var/syndicate = 0 var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS var/list/alarms_to_show = list() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index d03ed22c237..8e18387a10a 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -15,6 +15,9 @@ sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush + speak_emote = list("states") + bubble_icon = "machine" + var/obj/machinery/bot_core/bot_core = null var/bot_core_type = /obj/machinery/bot_core var/list/users = list() //for dialog updates @@ -105,7 +108,7 @@ Radio = new/obj/item/device/radio(src) if(radio_key) Radio.keyslot = new radio_key - Radio.canhear_range = 1 // 0 ? + Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. Radio.recalculateChannels() bot_core = new bot_core_type(src) @@ -163,12 +166,7 @@ else user << "[src] is in pristine condition." -/mob/living/simple_animal/bot/adjustBruteLoss(amount) - if(amount>0 && prob(10)) - new /obj/effect/decal/cleanable/oil(loc) - return ..(amount) - -/mob/living/simple_animal/bot/adjustFireLoss(amount) +/mob/living/simple_animal/bot/adjustHealth(amount) if(amount>0 && prob(10)) new /obj/effect/decal/cleanable/oil(loc) return ..(amount) @@ -293,9 +291,6 @@ say(message) return -/mob/living/simple_animal/bot/say(message) - return ..(message, "R") - /mob/living/simple_animal/bot/get_spans() return ..() | SPAN_ROBOT @@ -332,7 +327,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r */ /mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) var/final_result - for (var/scan in view (scan_range, src) ) //Search for something in range! + for (var/scan in shuffle(view(scan_range, src))) //Search for something in range! if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! continue //If not, keep searching! if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness @@ -710,12 +705,12 @@ Pass a positive integer as an argument to override a bot's default speed. if(usr in users) users.Remove(usr) return 1 - + if(topic_denied(usr)) usr << "[src]'s interface is not responding!" return 1 add_fingerprint(usr) - + if((href_list["power"]) && (bot_core.allowed(usr) || !locked)) if (on) turn_off() @@ -786,3 +781,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/Logout() . = ..() bot_reset() + +/mob/living/simple_animal/bot/revive() + ..() + update_icon() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 9e5386a65d9..bf77108174d 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -153,7 +153,7 @@ dat += "Critical Patient Alerts: [declare_crit ? "Yes" : "No"]
" dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
" dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
" - + return dat /mob/living/simple_animal/bot/medbot/Topic(href, href_list) @@ -229,8 +229,7 @@ declare_crit = 0 if(user) user << "You short out [src]'s reagent synthesis circuits." - spawn(0) - audible_message("[src] buzzes oddly!") + audible_message("[src] buzzes oddly!") flick("medibot_spark", src) if(user) oldpatient = user diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index fc0d4bab71c..46d8832ddd8 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -43,7 +43,6 @@ var/global/mulebot_count = 0 var/reached_target = 1 //true if already reached the target - var/refresh = 1 // true to refresh dialogue var/auto_return = 1 // true if auto return to home beacon after unload var/auto_pickup = 1 // true if auto-pickup at beacon var/report_delivery = 1 // true if bot will announce an arrival to a location. @@ -214,8 +213,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
" dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
" dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
" - dat += "Toggle Interface Refreshing ([refresh ? "On" : "Off"])
" - if(load) dat += "Unload Now
" dat += "
The maintenance hatch is closed.
" @@ -297,11 +294,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() return switch(command) - - if("autorefresh") - refresh = !refresh - update_controls() - if("stop") if(mode >= BOT_DELIVER) bot_reset() @@ -318,26 +310,21 @@ mob/living/simple_animal/bot/mulebot/bot_reset() update_controls() if("destination") - refresh=0 var/new_dest = input(user, "Select M.U.L.E. Destination", "Mulebot [suffix ? "([suffix])" : ""]", destination) as null|anything in deliverybeacontags - refresh=1 if(new_dest) set_destination(new_dest) + update_controls() if("setid") - refresh=0 var/new_id = stripped_input(user, "Enter new bot ID", "Mulebot [suffix ? "([suffix])" : ""]", suffix, MAX_NAME_LEN) - refresh=1 if(new_id) suffix = new_id name = "\improper Mulebot ([suffix])" update_controls() if("sethome") - refresh=0 var/new_home = stripped_input(user, "Enter new home tag", "Mulebot [suffix ? "([suffix])" : ""]", home_destination) - refresh=1 if(new_home) home_destination = new_home update_controls() @@ -512,8 +499,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() sleep(2) process_bot() - if(refresh) update_controls() - /mob/living/simple_animal/bot/mulebot/proc/process_bot() if(!on) return diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index a0d0ef6b331..eec5a954e23 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -184,6 +184,16 @@ Auto Patrol: []"}, else ..() + +/mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0) + if(istype(AM, /obj/item)) + var/obj/item/I = AM + if(I.throwforce < src.health && I.thrownby && (istype(I.thrownby, /mob/living/carbon/human))) + var/mob/living/carbon/human/H = I.thrownby + retaliate(H) + ..() + + /mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C) mode = BOT_ARREST playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index ee584f7cbbe..c7ed281b154 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -57,7 +57,7 @@ /mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) if(health < maxHealth) - adjustBruteLoss(-5) + adjustHealth(-5) if(src != M) Beam(M,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=4) M.visible_message("[M] repairs some of \the [src]'s dents.", \ @@ -231,6 +231,18 @@ + + + +/////////////////////////////Non-cult Artificer///////////////////////// +/mob/living/simple_animal/hostile/construct/builder/noncult + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, + /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, + /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, + /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, + /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) + + /////////////////////////////Harvester///////////////////////// /mob/living/simple_animal/hostile/construct/harvester name = "Harvester" diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 940d574b346..0deb6c4289a 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -52,4 +52,4 @@ desc = "One bug squashed. Four more will rise in its place." icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" - random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") + random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index a040346808d..9fcc023c4b2 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -119,16 +119,9 @@ switch(remove_from) if("head") if(inventory_head) - name = real_name - desc = initial(desc) - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") - speak_emote = list("barks", "woofs") - emote_hear = list("barks", "woofs", "yaps","pants") - emote_see = list("shakes its head", "shivers") - desc = "It's a corgi." - SetLuminosity(0) inventory_head.loc = src.loc inventory_head = null + update_corgi_fluff() regenerate_icons() else usr << "There is nothing to remove from its [remove_from]." @@ -137,6 +130,7 @@ if(inventory_back) inventory_back.loc = src.loc inventory_back = null + update_corgi_fluff() regenerate_icons() else usr << "There is nothing to remove from its [remove_from]." @@ -198,6 +192,7 @@ usr.drop_item() item_to_add.loc = src src.inventory_back = item_to_add + update_corgi_fluff() regenerate_icons() show_inv(usr) @@ -239,7 +234,7 @@ /obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard, /obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat, /obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero, - /obj/item/clothing/head/hopcap, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad, /obj/item/clothing/mask/gas/clown_hat) + /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat) valid = 1 if(valid) @@ -271,115 +266,139 @@ return valid /mob/living/simple_animal/pet/dog/corgi/proc/update_corgi_fluff() - if(!inventory_head) - return - switch(inventory_head.type) - if(/obj/item/clothing/head/helmet) - name = "Sergeant [real_name]" - desc = "The ever-loyal, the ever-vigilant." + var/special_hat = 0 + if(inventory_head) + special_hat = 1 + switch(inventory_head.type) + if(/obj/item/clothing/head/helmet) + name = "Sergeant [real_name]" + desc = "The ever-loyal, the ever-vigilant." - if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) - name = "Sous chef [real_name]" - desc = "Your food will be taste-tested. All of it." + if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) + name = "Sous chef [real_name]" + desc = "Your food will be taste-tested. All of it." - if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) - name = "Captain [real_name]" - desc = "Probably better than the last captain." + if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) + name = "Captain [real_name]" + desc = "Probably better than the last captain." - if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) - name = "Runtime" - emote_see = list("coughs up a furball", "stretches") - emote_hear = list("purrs") - speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") - desc = "It's a cute little kitty-cat! ... wait ... what the hell?" + if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) + name = "Runtime" + emote_see = list("coughs up a furball", "stretches") + emote_hear = list("purrs") + speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") + desc = "It's a cute little kitty-cat! ... wait ... what the hell?" - if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) - name = "Hoppy" - emote_see = list("twitches its nose", "hops around a bit") - desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) + name = "Hoppy" + emote_see = list("twitches its nose", "hops around a bit") + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" - if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) - name = "Yann" - desc = "Mon dieu! C'est un chien!" - speak = list("le woof!", "le bark!", "JAPPE!!") - emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") + if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) + name = "Yann" + desc = "Mon dieu! C'est un chien!" + speak = list("le woof!", "le bark!", "JAPPE!!") + emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") - if(/obj/item/clothing/head/det_hat) - name = "Detective [real_name]" - desc = "[name] sees through your lies..." - emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.") + if(/obj/item/clothing/head/det_hat) + name = "Detective [real_name]" + desc = "[name] sees through your lies..." + emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.") - if(/obj/item/clothing/head/nursehat) - name = "Nurse [real_name]" - desc = "[name] needs 100cc of beef jerky... STAT!" + if(/obj/item/clothing/head/nursehat) + name = "Nurse [real_name]" + desc = "[name] needs 100cc of beef jerky... STAT!" - if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) - name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" - desc = "Yaarghh!! Thar' be a scurvy dog!" - emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") - emote_hear = list("growls ferociously!", "snarls.") - speak = list("Arrrrgh!!","Grrrrrr!") + if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) + name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" + desc = "Yaarghh!! Thar' be a scurvy dog!" + emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") + emote_hear = list("growls ferociously!", "snarls.") + speak = list("Arrrrgh!!","Grrrrrr!") - if(/obj/item/clothing/head/ushanka) - name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" - desc = "A follower of Karl Barx." - emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") + if(/obj/item/clothing/head/ushanka) + name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" + desc = "A follower of Karl Barx." + emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") - if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police) - name = "Officer [real_name]" - emote_see = list("drools.","looks for donuts.") - desc = "Stop right there criminal scum!" + if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police) + name = "Officer [real_name]" + emote_see = list("drools.","looks for donuts.") + desc = "Stop right there criminal scum!" - if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) - name = "Grandwizard [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) + name = "Grandwizard [real_name]" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") - if(/obj/item/clothing/head/cardborg) - name = "Borgi" - speak = list("Ping!","Beep!","Woof!") - emote_see = list("goes rogue.", "sniffs out non-humans.") - desc = "Result of robotics budget cuts." + if(/obj/item/clothing/head/cardborg) + name = "Borgi" + speak = list("Ping!","Beep!","Woof!") + emote_see = list("goes rogue.", "sniffs out non-humans.") + desc = "Result of robotics budget cuts." - if(/obj/item/weapon/bedsheet) - name = "\improper Ghost" - speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") - emote_see = list("stumbles around.", "shivers.") - emote_hear = list("howls!","groans.") - desc = "Spooky!" + if(/obj/item/weapon/bedsheet) + name = "\improper Ghost" + speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") + emote_see = list("stumbles around.", "shivers.") + emote_hear = list("howls!","groans.") + desc = "Spooky!" - if(/obj/item/clothing/head/helmet/space/santahat) - name = "Santa's Corgi Helper" - emote_hear = list("barks Christmas songs.", "yaps merrily!") - emote_see = list("looks for presents.", "checks his list.") - desc = "He's very fond of milk and cookies." + if(/obj/item/clothing/head/helmet/space/santahat) + name = "Santa's Corgi Helper" + emote_hear = list("barks Christmas songs.", "yaps merrily!") + emote_see = list("looks for presents.", "checks his list.") + desc = "He's very fond of milk and cookies." - if(/obj/item/clothing/head/soft) - name = "Corgi Tech [real_name]" - desc = "The reason your yellow gloves have chew-marks." + if(/obj/item/clothing/head/soft) + name = "Corgi Tech [real_name]" + desc = "The reason your yellow gloves have chew-marks." - if(/obj/item/clothing/head/hardhat/reindeer) - name = "[real_name] the red-nosed Corgi" - emote_hear = list("lights the way!", "illuminates.", "yaps!") - desc = "He has a very shiny nose." + if(/obj/item/clothing/head/hardhat/reindeer) + name = "[real_name] the red-nosed Corgi" + emote_hear = list("lights the way!", "illuminates.", "yaps!") + desc = "He has a very shiny nose." - if(/obj/item/clothing/head/sombrero) - name = "Segnor [real_name]" - desc = "You must respect elder [real_name]" + if(/obj/item/clothing/head/sombrero) + name = "Segnor [real_name]" + desc = "You must respect elder [real_name]" - if(/obj/item/clothing/head/hopcap) - name = "Lieutenant [real_name]" - desc = "Can actually be trusted to not run off on his own." + if(/obj/item/clothing/head/hopcap) + name = "Lieutenant [real_name]" + desc = "Can actually be trusted to not run off on his own." - if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad) - name = "Trooper [real_name]" - desc = "That's not red paint. That's real corgi blood." + if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad) + name = "Trooper [real_name]" + desc = "That's not red paint. That's real corgi blood." - if(/obj/item/clothing/mask/gas/clown_hat) - name = "[real_name] the Clown" - desc = "Honkman's best friend." - speak = list("HONK!", "Honk!") - emote_see = list("plays tricks.", "slips.") + if(/obj/item/clothing/mask/gas/clown_hat) + name = "[real_name] the Clown" + desc = "Honkman's best friend." + speak = list("HONK!", "Honk!") + emote_see = list("plays tricks.", "slips.") + else + special_hat = 0 + + var/special_back = 0 + if(inventory_back) + special_back = 1 + switch(inventory_back.type) + if(/obj/item/clothing/suit/space/hardsuit/deathsquad) + name = "Trooper [real_name]" + desc = "That's not red paint. That's real corgi blood." + else + special_back = 0 + + if(!special_hat && !special_back) + name = real_name + desc = initial(desc) + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") + speak_emote = list("barks", "woofs") + emote_hear = list("barks", "woofs", "yaps","pants") + emote_see = list("shakes its head", "shivers") + desc = "It's a corgi." + SetLuminosity(0) + return //IAN! SQUEEEEEEEEE~ /mob/living/simple_animal/pet/dog/corgi/Ian diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 54a6b86c314..ebc51360660 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -35,6 +35,8 @@ status_flags = (CANPUSH | CANSTUN | CANWEAKEN) gender = NEUTER voice_name = "synthesized chirp" + speak_emote = list("chirps") + bubble_icon = "machine" languages = DRONE mob_size = MOB_SIZE_SMALL has_unlimited_silicon_privilege = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index e17a9a0dcb0..597b528ea9f 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -17,6 +17,8 @@ health = 30 maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger faction = list("syndicate") + speak_emote = list("hisses") + bubble_icon = "syndibot" heavy_emp_damage = 10 laws = \ "1. Interfere.\n"+\ diff --git a/code/modules/mob/living/simple_animal/friendly/drone/say.dm b/code/modules/mob/living/simple_animal/friendly/drone/say.dm index def3ad69d53..5bd5dbb8eb7 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/say.dm @@ -5,11 +5,6 @@ //Drone speach //Drone hearing - -/mob/living/simple_animal/drone/say(message) - return ..(message, "R") - - /mob/living/simple_animal/drone/lang_treat(atom/movable/speaker, message_langs, raw_message) //This is so drones can understand humans without being able to speak human . = ..() var/hear_override_langs = HUMAN @@ -26,21 +21,16 @@ /mob/living/simple_animal/drone/proc/alert_drones(msg, dead_can_hear = 0) - for(var/mob/M in player_list) - var/send_msg = 0 - + for(var/W in mob_list) + var/mob/M = W if(istype(M, /mob/living/simple_animal/drone) && M.stat != DEAD) for(var/F in src.faction) if(F in M.faction) - send_msg = 1 - break - else if(dead_can_hear && (M in dead_mob_list)) - send_msg = 1 - - if(send_msg) - M << msg + M << msg + if(dead_can_hear && (M in dead_mob_list)) + M << "(F) [msg]" /mob/living/simple_animal/drone/proc/drone_chat(msg) - var/rendered = "DRONE CHAT: [name]: [msg]" + var/rendered = "DRONE CHAT: [name]: [msg]" alert_drones(rendered, 1) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 9fabb8f858a..be62cfce185 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -1,15 +1,16 @@ /mob/living/simple_animal/hostile/guardian name = "Guardian Spirit" real_name = "Guardian Spirit" - desc = "A mysterious being that stands by it's charge, ever vigilant." + desc = "A mysterious being that stands by its charge, ever vigilant." speak_emote = list("hisses") + bubble_icon = "guardian" response_help = "passes through" response_disarm = "flails at" response_harm = "punches" icon = 'icons/mob/guardian.dmi' - icon_state = "guardianorange" - icon_living = "guardianorange" - icon_dead = "stand" + icon_state = "magicOrange" + icon_living = "magicOrange" + icon_dead = "magicOrange" speed = 0 a_intent = "harm" stop_automated_movement = 1 @@ -21,13 +22,13 @@ attacktext = "punches" maxHealth = INFINITY //The spirit itself is invincible health = INFINITY + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) //how much damage from each damage type we transfer to the owner environment_smash = 0 melee_damage_lower = 15 melee_damage_upper = 15 butcher_results = list(/obj/item/weapon/ectoplasm = 1) AIStatus = AI_OFF var/cooldown = 0 - var/damage_transfer = 1 //how much damage from each attack we transfer to the owner var/mob/living/summoner var/range = 10 //how far from the user the spirit can be var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" @@ -53,11 +54,12 @@ ghostize() qdel(src) if(summoner) - if (get_dist(get_turf(summoner),get_turf(src)) <= range) + if(get_dist(get_turf(summoner),get_turf(src)) <= range) return else src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]" visible_message("The [src] jumps back to its user.") + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = get_turf(summoner) /mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range @@ -68,37 +70,44 @@ else src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]" visible_message("The [src] jumps back to its user.") + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = get_turf(summoner) -/mob/living/mob/living/simple_animal/hostile/guardian/canSuicide() +/mob/living/simple_animal/hostile/guardian/canSuicide() return 0 +/mob/living/simple_animal/hostile/guardian/AttackingTarget() + if(src.loc == summoner) + src << "You must be manifested to attack!" + return 0 + else + ..() + return 1 + /mob/living/simple_animal/hostile/guardian/death() ..() summoner << "Your [name] died somehow!" summoner.death() -/mob/living/simple_animal/hostile/guardian/adjustBruteLoss(amount) //The spirit is invincible, but passes on damage to the summoner - var/damage = amount * damage_transfer - if (summoner) +/mob/living/simple_animal/hostile/guardian/adjustHealth(amount) //The spirit is invincible, but passes on damage to the summoner + if(summoner) if(loc == summoner) return - summoner.adjustBruteLoss(damage) - if(damage) + summoner.adjustBruteLoss(amount) + if(amount) summoner << "Your [name] is under attack! You take damage!" summoner.visible_message("Blood sprays from [summoner] as [src] takes damage!") if(summoner.stat == UNCONSCIOUS) summoner << "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!" - summoner.adjustCloneLoss(damage/2) + summoner.adjustCloneLoss(amount*0.5) //dying hosts take 50% bonus damage as cloneloss /mob/living/simple_animal/hostile/guardian/ex_act(severity, target) - switch (severity) - if (1) + switch(severity) + if(1) gib() return - if (2) + if(2) adjustBruteLoss(60) - if(3) adjustBruteLoss(30) @@ -121,6 +130,7 @@ /mob/living/simple_animal/hostile/guardian/proc/Recall() if(cooldown > world.time) return + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = summoner buckled = null cooldown = world.time + 30 @@ -129,14 +139,17 @@ var/input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "") if(!input) return + var/my_message = "[src]: [input]" for(var/mob/M in mob_list) - if(M == summoner || (M in dead_mob_list)) - M << "[src]: [input]" - src << "[src]: [input]" + if(M == summoner) + M << my_message + if(M in dead_mob_list) + M << "(F) [my_message]" + src << "[my_message]" log_say("[src.real_name]/[src.key] : [input]") /mob/living/simple_animal/hostile/guardian/proc/ToggleMode() - src << "You dont have another mode!" + src << "You don't have another mode!" /mob/living/proc/guardian_comm() @@ -146,13 +159,14 @@ var/input = stripped_input(src, "Please enter a message to tell your guardian.", "Message", "") if(!input) return + var/my_message = "[src]: [input]" for(var/mob/M in mob_list) if(istype (M, /mob/living/simple_animal/hostile/guardian)) var/mob/living/simple_animal/hostile/guardian/G = M if(G.summoner == src) - G << "[src]: [input]" + G << "[my_message]" else if (M in dead_mob_list) - M << "[src]: [input]" + M << "(F) [my_message]" src << "[src]: [input]" log_say("[src.real_name]/[src.key] : [text]") @@ -188,8 +202,10 @@ /mob/living/simple_animal/hostile/guardian/proc/ToggleLight() if(!luminosity) + src << "You activate your light." SetLuminosity(3) else + src << "You deactivate your light." SetLuminosity(0) @@ -197,14 +213,13 @@ //Fire. Low damage, low resistance, sets mobs on fire when bumping - /mob/living/simple_animal/hostile/guardian/fire a_intent = "help" melee_damage_lower = 10 melee_damage_upper = 10 attack_sound = 'sound/items/Welder.ogg' attacktext = "sears" - damage_transfer = 0.8 + damage_coeff = list(BRUTE = 0.8, BURN = 0.8, TOX = 0.8, CLONE = 0.8, STAMINA = 0, OXY = 0.8) range = 10 playstyle_string = "As a Chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will randomly teleport enemies." environment_smash = 1 @@ -218,12 +233,14 @@ summoner.adjust_fire_stacks(-20) /mob/living/simple_animal/hostile/guardian/fire/AttackingTarget() - ..() - if(prob(45)) - if(istype(target, /atom/movable)) - var/atom/movable/M = target - if(!M.anchored && M != summoner) - do_teleport(M, M, 10) + if(..()) + if(prob(45)) + if(istype(target, /atom/movable)) + var/atom/movable/M = target + if(!M.anchored && M != summoner) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(M)) + do_teleport(M, M, 10) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(M)) /mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj) ..() @@ -247,12 +264,11 @@ /mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj) ..() collision_ignite(AM) -//Standard +//Standard /mob/living/simple_animal/hostile/guardian/punch melee_damage_lower = 20 melee_damage_upper = 20 - damage_transfer = 0.5 playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." @@ -280,11 +296,11 @@ playsound(loc, src.attack_sound, 50, 1, 1) //Healer - /mob/living/simple_animal/hostile/guardian/healer a_intent = "harm" friendly = "heals" speed = 0 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) melee_damage_lower = 15 melee_damage_upper = 15 playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay." @@ -300,24 +316,21 @@ medsensor.add_hud_to(src) /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() - ..() - if(toggle == TRUE) - if(src.loc == summoner) - src << "You must be manifested to heal!" - return - if(iscarbon(target)) - var/mob/living/carbon/C = target - C.adjustBruteLoss(-5) - C.adjustFireLoss(-5) - C.adjustOxyLoss(-5) - C.adjustToxLoss(-5) + if(..()) + if(toggle == TRUE) + if(iscarbon(target)) + var/mob/living/carbon/C = target + C.adjustBruteLoss(-5) + C.adjustFireLoss(-5) + C.adjustOxyLoss(-5) + C.adjustToxLoss(-5) /mob/living/simple_animal/hostile/guardian/healer/ToggleMode() if(src.loc == summoner) if(toggle) a_intent = "harm" speed = 0 - damage_transfer = 0.7 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) melee_damage_lower = 15 melee_damage_upper = 15 src << "You switch to combat mode." @@ -325,7 +338,7 @@ else a_intent = "help" speed = 1 - damage_transfer = 1 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) melee_damage_lower = 0 melee_damage_upper = 0 src << "You switch to healing mode." @@ -335,7 +348,7 @@ /mob/living/simple_animal/hostile/guardian/healer/verb/Beacon() - set name = "Place Bluespsace Beacon" + set name = "Place Bluespace Beacon" set category = "Guardian" set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work in unfavorable atmospheric conditions." if(beacon_cooldownYou must be adjacent to your target!" return if((A.anchored)) - src << "Your target can not be anchored!" + src << "Your target cannot be anchored!" return src << "You begin to warp [A]" if(do_mob(src, A, 50)) @@ -376,11 +389,21 @@ if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills. if(beacon.air) var/datum/gas_mixture/Z = beacon.air - if(Z.oxygen >= 16 && !Z.toxins && Z.carbon_dioxide < 10 && !Z.trace_gases.len) + var/list/Z_gases = Z.gases + var/trace_gases = FALSE + + for(var/id in Z_gases) + if(id in hardcoded_gases) + continue + trace_gases = TRUE + break + if((Z_gases["o2"] && Z_gases["o2"][MOLES] >= 16) && !Z_gases["plasma"] && (!Z_gases["co2"] || Z_gases["co2"][MOLES] < 10) && !trace_gases) if((Z.temperature > 270) && (Z.temperature < 360)) var/pressure = Z.return_pressure() if((pressure > 20) && (pressure < 550)) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(A)) do_teleport(A, beacon, 0) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(A)) else src << "The beacon isn't in a safe location!" else @@ -392,7 +415,6 @@ ///////////////////Ranged - /obj/item/projectile/guardian name = "crystal spray" icon_state = "guardian" @@ -405,7 +427,7 @@ friendly = "quietly assesses" melee_damage_lower = 10 melee_damage_upper = 10 - damage_transfer = 0.9 + damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9) projectiletype = /obj/item/projectile/guardian ranged_cooldown_cap = 0 projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' @@ -482,11 +504,10 @@ G.summoner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]." ////Bomb - /mob/living/simple_animal/hostile/guardian/bomb melee_damage_lower = 15 melee_damage_upper = 15 - damage_transfer = 0.6 + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) range = 13 playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via alt click." magic_fluff_string = "..And draw the Scientist, master of explosive death." @@ -618,7 +639,7 @@ G.summoner = user G.key = key G << "You are a [mob_name] bound to serve [user.real_name]." - G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there." + G << "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with them privately there." G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself." G << "[G.playstyle_string]" G.faction = user.faction @@ -626,19 +647,25 @@ user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset - var/picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") - var/colour = pick("orange", "pink", "red", "blue", "green") - G.name = "[picked_name] [capitalize(colour)]" - G.real_name = "[picked_name] [capitalize(colour)]" - G.icon_living = "guardian[colour]" - G.icon_state = "guardian[colour]" - G.icon_dead = "guardian[colour]" - - switch (theme) + var/colour + var/picked_name + switch(theme) if("magic") user << "[G.magic_fluff_string]." + colour = pick("Pink", "Red", "Orange", "Green", "Blue") + picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") if("tech") user << "[G.tech_fluff_string]." + G.bubble_icon = "holo" + colour = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors + picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium") + + G.name = "[picked_name] [colour]" + G.real_name = "[picked_name] [colour]" + G.icon_living = "[theme][colour]" + G.icon_state = "[theme][colour]" + G.icon_dead = "[theme][colour]" + G.mind.name = "[G.real_name]" /obj/item/weapon/guardiancreator/choose @@ -646,7 +673,7 @@ /obj/item/weapon/guardiancreator/tech name = "holoparasite injector" - desc = "It contains alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." + desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." icon = 'icons/obj/syringe.dmi' icon_state = "combat_hypo" theme = "tech" @@ -661,19 +688,19 @@ /obj/item/weapon/paper/guardian name = "Holoparasite Guide" - icon_state = "alienpaper_words" + icon_state = "paper_words" info = {"A list of Holoparasite Types

- Chaos: Ignites mobs on touch. teleports them at random on attack. Automatically extinguishes the user if they catch fire.
+ Chaos: Ignites enemies on touch and teleports them at random on attack. Automatically extinguishes the user if they catch on fire.

- Standard:Devestating close combat attacks and high damage resist. No special powers.
+ Standard:Devastating close combat attacks and high damage resist. Can smash through weak walls.

- Ranged: Has two modes. Ranged: Extremely weak, highly spammable projectile attack. Scout: Can not attack, but can move through walls. Can lay surveillance snares in either mode.
+ Ranged: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.

- Support:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+ Support:Has two modes. Combat; Medium power attacks and damage resist. Healer; Heals instead of attack, but has low damage resist and slow movement. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.

- Explosive: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.
+ Explosive: High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.
"} /obj/item/weapon/paper/guardian/update_icon() diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index c7f49bf27a2..8bd71dd3313 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -19,6 +19,7 @@ melee_damage_upper = 25 attacktext = "slashes" speak_emote = list("hisses") + bubble_icon = "alien" a_intent = "harm" attack_sound = 'sound/weapons/bladeslice.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) @@ -125,6 +126,7 @@ icon_state = "alienq" icon_living = "alienq" icon_dead = "alienq_dead" + bubble_icon = "alienroyal" move_to_delay = 4 maxHealth = 400 health = 400 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index c7328140dd9..7bf00a90da5 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -116,13 +116,11 @@ //second, spin a sticky spiderweb on this tile var/obj/effect/spider/stickyweb/W = locate() in get_turf(src) if(!W) - spawn() - Web() + Web() else //third, lay an egg cluster there if(fed) - spawn() - LayEggs() + LayEggs() else //fourthly, cocoon any nearby items so those pesky pinkskins can't use them for(var/obj/O in can_see) @@ -140,8 +138,7 @@ else if(busy == MOVING_TO_TARGET && cocoon_target) if(get_dist(src, cocoon_target) <= 1) - spawn() - Wrap() + Wrap() else busy = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 9f4c0d7d686..d1a829a5483 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -43,6 +43,9 @@ // Changeling egg can survive in aliens! var/mob/living/carbon/C = target if(C.stat == DEAD) + if(C.status_flags & XENO_HOST) + src << "A foreign presence repels us from this body. Perhaps we should try to infest another?" + return Infect(target) src << "With our egg laid, our death approaches rapidly..." spawn(100) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 65a603ddb9e..a7c6dff1d42 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -24,7 +24,7 @@ speak_emote = list("states") gold_core_spawnable = 1 del_on_death = 1 - loot = (/obj/effect/decal/cleanable/robot_debris) + loot = list(/obj/effect/decal/cleanable/robot_debris) /mob/living/simple_animal/hostile/hivebot/New() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index f1774d355f4..06d620caa4c 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -116,11 +116,7 @@ return 1 if(isliving(the_target)) var/mob/living/L = the_target - var/faction_check = 0 - for(var/F in faction) - if(F in L.faction) - faction_check = 1 - break + var/faction_check = faction_check(L) if(robust_searching) if(L.stat > stat_attack || L.stat != stat_attack && stat_exclusive == 1) return 0 @@ -183,7 +179,7 @@ /mob/living/simple_animal/hostile/proc/Goto(target, delay, minimum_distance) walk_to(src, target, minimum_distance, delay) -/mob/living/simple_animal/hostile/adjustBruteLoss(damage) +/mob/living/simple_animal/hostile/adjustHealth(damage) ..(damage) if(!ckey && !stat && search_objects < 3 && damage > 0)//Not unconscious, and we don't ignore mobs if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 3db6b3e76f8..8058ef8717c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -70,7 +70,7 @@ visible_message("[src] starts to move!") attempt_open = 1 -/mob/living/simple_animal/hostile/mimic/crate/adjustBruteLoss(damage) +/mob/living/simple_animal/hostile/mimic/crate/adjustHealth(damage) trigger() ..(damage) @@ -139,7 +139,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca return 1 return 0 -/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/creator, destroy_original = 0) +/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0) if(destroy_original || CheckObject(O)) O.loc = src name = O.name @@ -164,8 +164,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca melee_damage_upper = 2 + I.force move_to_delay = 2 * I.w_class + 1 maxHealth = health - if(creator) - creator = creator + if(user) + creator = user faction += "\ref[creator]" // very unique if(destroy_original) qdel(O) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0842a2062af..29ae2bad90d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -181,7 +181,7 @@ visible_message("The [P.name] was repelled by [src.name]'s girth!") return -/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(damage) +/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(damage) idle_vision_range = 9 ..() @@ -374,6 +374,8 @@ /mob/living/simple_animal/hostile/asteroid/goliath/OpenFire() var/tturf = get_turf(target) + if(!(istype(tturf, /turf/simulated))) + return if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen visible_message("The [src.name] digs its tentacles under [target.name]!") new /obj/effect/goliath_tentacle/original(tturf) @@ -382,7 +384,7 @@ pre_attack = 0 return -/mob/living/simple_animal/hostile/asteroid/goliath/adjustBruteLoss(damage) +/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage) ranged_cooldown-- handle_preattack() ..() @@ -522,7 +524,7 @@ Inflate() ..() -/mob/living/simple_animal/hostile/asteroid/fugu/adjustBruteLoss(var/damage) +/mob/living/simple_animal/hostile/asteroid/fugu/adjustHealth(var/damage) if(wumbo) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index fe593390418..03dbb7e29b6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -61,7 +61,7 @@ deathmessage = "[src] fainted." ..() -/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(damage)//Possibility to flee from a fight just to make it more visually interesting +/mob/living/simple_animal/hostile/mushroom/adjustHealth(damage)//Possibility to flee from a fight just to make it more visually interesting if(!retreat_distance && prob(33)) retreat_distance = 5 spawn(30) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 5c4a4621da0..f2c009f2c3b 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -51,7 +51,7 @@ H.enemies |= enemies return 0 -/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(damage) +/mob/living/simple_animal/hostile/retaliate/adjustHealth(damage) ..(damage) if(stat == CONSCIOUS) Retaliate() diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 074a40e85ed..79fa9969b17 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -60,8 +60,8 @@ icon_state = "templar" icon_living = "templar" icon_dead = "templar_dead" - maxHealth = 125 - health = 125 + maxHealth = 150 + health = 150 speed = 2 gold_core_spawnable = 0 speak_chance = 1 @@ -75,16 +75,6 @@ /obj/item/clothing/head/helmet/knight/templar, /obj/item/weapon/claymore/hog{name = "holy sword"}) -/mob/living/simple_animal/hostile/skeleton/templar/bullet_act(obj/item/projectile/Proj) - if(!Proj) - return - if(prob(50)) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - src.health -= Proj.damage - else - visible_message("[src] blocks [Proj] with its sword!") - return 0 - /mob/living/simple_animal/hostile/skeleton/ice name = "ice skeleton" desc = "A reanimated skeleton protected by a thick sheet of natural ice armor. Looks slow, though." diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 2d04aee5fdc..8b07a7caa40 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -117,7 +117,7 @@ // This loop will, at most, loop twice. for(var/atom/check in check_list) for(var/mob/living/M in viewers(world.view + 1, check) - src) - if(M.client && CanAttack(M) && !issilicon(M)) + if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) if(!M.eye_blind) return M for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 7e037b9b5f5..27719e385dc 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -126,6 +126,7 @@ mob_size = MOB_SIZE_TINY flying = 1 speak_emote = list("states") + bubble_icon = "syndibot" gold_core_spawnable = 1 del_on_death = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 885a188ac4c..26817a3f3c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -41,12 +41,12 @@ ..() if(istype(src.loc, /turf/simulated)) var/turf/simulated/T = src.loc - if(T.air) - var/co2 = T.air.carbon_dioxide + if(T.air && T.air.gases["co2"]) + var/co2 = T.air.gases["co2"][MOLES] if(co2 > 0) if(prob(25)) var/amt = min(co2, 9) - T.air.carbon_dioxide -= amt + T.air.gases["co2"][MOLES] -= amt T.atmos_spawn_air(SPAWN_OXYGEN, amt) /mob/living/simple_animal/hostile/tree/AttackingTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 6a5397ad05c..b80dc417ad7 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -87,7 +87,7 @@ if(grasping.len < max_grasps) for(var/mob/living/L in range(grasp_range,src)) - if(L == src) + if(L == src || faction_check(L)) continue if(!(L in grasping) && L != target && prob(grasp_chance)) L << "\the [src] has you entangled!" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index f0c670e6d9a..805156d5c13 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -196,10 +196,15 @@ if(istype(T,/turf/simulated)) var/turf/simulated/ST = T if(ST.air) - var/tox = ST.air.toxins - var/oxy = ST.air.oxygen - var/n2 = ST.air.nitrogen - var/co2 = ST.air.carbon_dioxide + var/ST_gases = ST.air.gases + ST.air.assert_gases(arglist(hardcoded_gases)) + + var/tox = ST_gases["plasma"][MOLES] + var/oxy = ST_gases["o2"][MOLES] + var/n2 = ST_gases["n2"][MOLES] + var/co2 = ST_gases["co2"][MOLES] + + ST.air.garbage_collect() if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"]) atmos_suitable = 0 @@ -276,25 +281,31 @@ Proj.on_hit(src) return 0 +/mob/living/simple_animal/proc/adjustHealth(amount) + if(status_flags & GODMODE) + return 0 + bruteloss = Clamp(bruteloss + amount, 0, maxHealth) + handle_regular_status_updates() + /mob/living/simple_animal/adjustBruteLoss(amount) if(damage_coeff[BRUTE]) - ..(amount*damage_coeff[BRUTE]) + adjustHealth(amount*damage_coeff[BRUTE]) /mob/living/simple_animal/adjustFireLoss(amount) if(damage_coeff[BURN]) - adjustBruteLoss(amount*damage_coeff[BURN]) + adjustHealth(amount*damage_coeff[BURN]) /mob/living/simple_animal/adjustOxyLoss(amount) if(damage_coeff[OXY]) - adjustBruteLoss(amount*damage_coeff[OXY]) + adjustHealth(amount*damage_coeff[OXY]) /mob/living/simple_animal/adjustToxLoss(amount) if(damage_coeff[TOX]) - ..(amount*damage_coeff[TOX]) + adjustHealth(amount*damage_coeff[TOX]) /mob/living/simple_animal/adjustCloneLoss(amount) if(damage_coeff[CLONE]) - ..(amount*damage_coeff[CLONE]) + adjustHealth(amount*damage_coeff[CLONE]) /mob/living/simple_animal/adjustStaminaLoss(amount) return diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 12243cf713a..af6de1b80bc 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -17,6 +17,7 @@ response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") speak_emote = list("chirps") + bubble_icon = "slime" layer = 5 diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 082296dcaf2..ed176d9aa3c 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -27,7 +27,7 @@ player_list |= src update_Login_details() world.update_status() - + client.images = null //remove the images such as AIs being unable to see runes client.screen = list() //remove hud items just in case if(hud_used) qdel(hud_used) //remove the hud objects @@ -37,7 +37,8 @@ sight |= SEE_SELF ..() - + if (key != client.key) + key = client.key if(loc && !isturf(loc)) client.eye = loc client.perspective = EYE_PERSPECTIVE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 82362afc3c1..377ddabf388 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -33,117 +33,101 @@ var/next_mob_id = 0 var/datum/gas_mixture/environment = loc.return_air() - var/t = "Coordinates: [x],[y] \n" - t+= "Temperature: [environment.temperature] \n" - t+= "Nitrogen: [environment.nitrogen] \n" - t+= "Oxygen: [environment.oxygen] \n" - t+= "Plasma : [environment.toxins] \n" - t+= "Carbon Dioxide: [environment.carbon_dioxide] \n" - for(var/datum/gas/trace_gas in environment.trace_gases) - t+= "[trace_gas.type]: [trace_gas.moles] \n" + var/t = "Coordinates: [x],[y] \n" + t += "Temperature: [environment.temperature] \n" + for(var/id in environment.gases) + var/gas = environment.gases[id] + if(gas[MOLES]) + t+="[gas[GAS_NAME]]: [gas[MOLES]] \n" - usr.show_message(t, 1) + usr << t -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) +/mob/proc/show_message(msg, type, alt_msg, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - if(!client) return + if(!client) + return msg = copytext(msg, 1, MAX_MESSAGE_LEN) - if (type) - if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related - if (!( alt )) + if(type) + if(type & 1 && eye_blind )//Vision related + if(!alt_msg) return else - msg = alt + msg = alt_msg type = alt_type - if (type & 2 && ear_deaf)//Hearing related - if (!( alt )) + + if(type & 2 && ear_deaf)//Hearing related + if(!alt_msg) return else - msg = alt + msg = alt_msg type = alt_type - if ((type & 1 && disabilities & BLIND)) + if(type & 1 && eye_blind) return - // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || sleeping > 0) - src << "... You can almost hear someone talking ..." + // voice muffling + if(stat == UNCONSCIOUS) + if(type & 2) //audio + src << "... You can almost hear something ..." else src << msg - return -// Show a message to all mobs who sees the src mob and the src mob itself +// Show a message the src mob and to all player mobs who sees the src mob // This would be for visible actions by the src mob // message is the message output to anyone who can see e.g. "[src] does something!" // self_message (optional) is what the src mob sees e.g. "You do something!" // blind_message (optional) is what blind people will hear e.g. "You hear something!" /mob/visible_message(message, self_message, blind_message) - var/list/mob_viewers = list() - var/list/possible_viewers = list() - mob_viewers |= src - mob_viewers |= viewers(src) - var/heard = get_hear(7, src) - for(var/atom/movable/A in heard) - possible_viewers |= recursive_hear_check(A) - for(var/mob/B in possible_viewers) - if(B in mob_viewers) + var/turf/T = get_turf(src) + if(!T) + return + for(var/mob/M in get_hearers_in_view(7, src)) + if(!M.client) continue - if(isturf(B.loc)) - continue - var/turf/T = get_turf(B) - if(src in view(T)) - mob_viewers |= B - - for(var/mob/M in mob_viewers) - if(M.see_invisible < invisibility) - continue //can't view the invisible var/msg = message - if(self_message && M==src) - msg = self_message - M.show_message(msg, 1) + if(M == src) //the src always see the main message or self message + if(self_message) + msg = self_message + else + if(M.see_invisible 1 || diag)) - step(M, get_dir(M.loc, mob.loc)) + if(M)//Mob may get deleted during parent call + if (isturf(M.loc)) + var/diag = get_dir(mob, M) + if ((diag - 1) & diag) + else + diag = null + if ((get_dist(mob, M) > 1 || diag)) + step(M, get_dir(M.loc, mob.loc)) else for(var/mob/M in L) M.other_mobs = 1 @@ -275,13 +276,12 @@ else return L.loc = locate(locx,locy,mobloc.z) - spawn(0) - var/limit = 2//For only two trailing shadows. - for(var/turf/T in getline(mobloc, L.loc)) - spawn(0) - anim(T,L,'icons/mob/mob.dmi',,"shadow",,L.dir) - limit-- - if(limit<=0) break + var/limit = 2//For only two trailing shadows. + for(var/turf/T in getline(mobloc, L.loc)) + spawn(0) + anim(T,L,'icons/mob/mob.dmi',,"shadow",,L.dir) + limit-- + if(limit<=0) break else spawn(0) anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,L.dir) @@ -305,43 +305,40 @@ ///For moving in space ///Return 1 for movement 0 for none /mob/Process_Spacemove(movement_dir = 0) - if(..()) return 1 + var/atom/movable/backup = get_spacemove_backup() + if(backup) + if(istype(backup) && movement_dir && !backup.anchored) + if(backup.newtonian_move(turn(movement_dir, 180))) //You're pushing off something movable, so it moves + src << "You push off of [backup] to propel yourself." + return 1 + return 0 +/mob/get_spacemove_backup() var/atom/movable/dense_object_backup - for(var/atom/A in orange(1, get_turf(src))) + for(var/A in orange(1, get_turf(src))) if(isarea(A)) continue - else if(isturf(A)) var/turf/turf = A if(istype(turf,/turf/space)) continue - if(!turf.density && !mob_negates_gravity()) continue - - return 1 - + return A else var/atom/movable/AM = A if(AM == buckled) //Kind of unnecessary but let's just be sure continue if(!AM.CanPass(src) || AM.density) if(AM.anchored) - return 1 + return AM if(pulling == AM) continue dense_object_backup = AM - - if(movement_dir && dense_object_backup) - if(dense_object_backup.newtonian_move(turn(movement_dir, 180))) //You're pushing off something movable, so it moves - src << "You push off of [dense_object_backup] to propel yourself." - - - return 1 - return 0 + break + . = dense_object_backup /mob/proc/mob_has_gravity(turf/T) return has_gravity(src, T) diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index e4b60e7d420..fda579af7ef 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -76,37 +76,64 @@ Contents: else if(M.assigned_role in command_positions) possible_targets[M] = 1 //good-guy -/* - Alright, so, if I had my way I'd axe all this retarded bullshit entirely, but I know some people would complain because - porting ninja specifics to the random gen system would go horribly. I can at the very least axe 99% of the autism - and make ninja code slightly more bearable. - - Iamgoofball -*/ var/list/objectives = list(1,2,3,4) - while(Mind.objectives.len < 6) //still not enough objectives! // WHY DOES THIS CALL FOR 6 OBJECTIVES - switch(pick_n_take(objectives)) // BUT THEN PREVENT YOU FROM GETTING 4 IN THE END + while(Mind.objectives.len < 6) //still not enough objectives! + switch(pick_n_take(objectives)) if(1) //research - add_objective(Mind, /datum/objective/download) + var/datum/objective/download/O = new /datum/objective/download() + O.owner = Mind + O.gen_amount_goal() + Mind.objectives += O if(2) //steal - add_objective(Mind, /datum/objective/default/steal/special) + var/datum/objective/steal/special/O = new /datum/objective/steal/special() + O.owner = Mind + Mind.objectives += O if(3) //protect/kill - if(prob(50)) - add_objective(Mind, /datum/objective/default/assassinate) - else - add_objective(Mind, /datum/objective/default/protect) + if(!possible_targets.len) continue + var/selected = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[selected] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(selected,selected+1) + + if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/assassinate/O = new /datum/objective/assassinate() + O.owner = Mind + O.target = M + O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." + Mind.objectives += O + else //protect + var/datum/objective/protect/O = new /datum/objective/protect() + O.owner = Mind + O.target = M + O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." + Mind.objectives += O if(4) //debrain/capture - if(prob(50)) - add_objective(Mind, /datum/objective/default/debrain) - else - add_objective(Mind, /datum/objective/capture) + if(!possible_targets.len) continue + var/selected = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[selected] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(selected,selected+1) + + if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/debrain/O = new /datum/objective/debrain() + O.owner = Mind + O.target = M + O.explanation_text = "Steal the brain of [M.current.real_name]." + Mind.objectives += O + else //capture + var/datum/objective/capture/O = new /datum/objective/capture() + O.owner = Mind + O.gen_amount_goal() + Mind.objectives += O else break //Add a survival objective since it's usually broad enough for any round type. - add_objective(Mind, /datum/objective/escape_obj/survive) - + var/datum/objective/O = new /datum/objective/survive() + O.owner = Mind + Mind.objectives += O //add some RP-fluff Mind.store_memory("I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 3d3e32b5b10..3edf26b56e8 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -131,6 +131,12 @@ desc = "A polaroid camera, some say it can see ghosts!" see_ghosts = 1 +/obj/item/device/camera/detective + name = "Detective's camera" + desc = "A polaroid camera with extra capacity for crime investigations." + pictures_max = 30 + pictures_left = 30 + /obj/item/device/camera/siliconcam //camera AI can take pictures with name = "silicon photo camera" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index a53171e4621..7b0384dc30d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -597,7 +597,9 @@ interact(user) /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) - if(!user) return + if(!user) + return + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) @@ -626,10 +628,11 @@ else ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "apc", name, 460, 515) + ui = new(user, src, ui_key, "apc", name, 535, 515, master_ui, state) ui.open() /obj/machinery/power/apc/get_ui_data(mob/user) @@ -848,8 +851,8 @@ qdel(malf) src.occupier.verbs += /mob/living/silicon/ai/proc/corereturn src.occupier.cancel_camera() - if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) - for(var/obj/item/weapon/pinpointer/point in world) + if ((seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) && malf.nuking) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) point.the_disk = src //the pinpointer will detect the shunted AI @@ -863,9 +866,9 @@ src.occupier.parent.cancel_camera() qdel(src.occupier) if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) - for(var/obj/item/weapon/pinpointer/point in world) - for(var/mob/living/silicon/ai/A in living_mob_list) - if(A.stat != DEAD) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + for(var/mob/living/silicon/ai/A in ai_list) + if((A.stat != DEAD) && A.nuking) point.the_disk = A //The pinpointer tracks the AI back into its core. else @@ -874,32 +877,10 @@ src.occupier.loc = src.loc src.occupier.death() src.occupier.gib() - for(var/obj/item/weapon/pinpointer/point in world) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) point.the_disk = null //the pinpointer will go back to pointing at the nuke disc. -/obj/machinery/power/apc/proc/ion_act() - //intended to be exactly the same as an AI malf attack - if(!src.malfhack && src.z == ZLEVEL_STATION) - if(prob(3)) - src.locked = 1 - if (src.cell.charge > 0) -// world << "\red blew APC in [src.loc.loc]" - src.cell.charge = 0 - cell.corrupt() - src.malfhack = 1 - update_icon() - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(1, src.loc) - smoke.attach(src) - smoke.start() - var/datum/effect_system/spark_spread/s = new - s.set_up(3, 1, src) - s.start() - visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \ - "You hear sizzling electronics.") - - /obj/machinery/power/apc/surplus() if(terminal) return terminal.surplus() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b2ca9ae4a1b..9a021cd1b4e 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -468,6 +468,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ item_state = "coil_red" max_amount = MAXCOIL amount = MAXCOIL + merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves item_color = "red" desc = "A coil of power cable." throwforce = 0 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index a3c1db86c33..34f3a6de8eb 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -365,18 +365,18 @@ return A.master.lightswitch && A.master.power_light /obj/machinery/light/proc/flicker(var/amount = rand(10, 20)) + set waitfor = 0 if(flickering) return flickering = 1 - spawn(0) - if(on && status == LIGHT_OK) - for(var/i = 0; i < amount; i++) - if(status != LIGHT_OK) break - on = !on - update(0) - sleep(rand(5, 15)) - on = (status == LIGHT_OK) + if(on && status == LIGHT_OK) + for(var/i = 0; i < amount; i++) + if(status != LIGHT_OK) break + on = !on update(0) - flickering = 0 + sleep(rand(5, 15)) + on = (status == LIGHT_OK) + update(0) + flickering = 0 // ai attack - make lights flicker, because why not @@ -539,13 +539,13 @@ // explode the light /obj/machinery/light/proc/explode() + set waitfor = 0 var/turf/T = get_turf(src.loc) - spawn(0) - broken() // break it first to give a warning - sleep(2) - explosion(T, 0, 0, 2, 2) - sleep(1) - qdel(src) + broken() // break it first to give a warning + sleep(2) + explosion(T, 0, 0, 2, 2) + sleep(1) + qdel(src) // the light item // can be tube or bulb subtypes diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index aab80c9e97f..304e5a37a1f 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -26,12 +26,12 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/process() if(P) - if(P.air_contents.toxins <= 0) + if(!P.air_contents.gases["plasma"]) investigate_log("out of fuel.","singulo") - P.air_contents.toxins = 0 eject() else - P.air_contents.toxins -= 0.001*drainratio + P.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio + P.air_contents.garbage_collect() return @@ -43,7 +43,7 @@ var/global/list/rad_collectors = list() toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") - investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo") + investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo") return else user << "The controls are locked!" @@ -129,8 +129,8 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/proc/receive_pulse(pulse_strength) if(P && active) - var/power_produced = 0 - power_produced = P.air_contents.toxins*pulse_strength*20 + var/power_produced = P.air_contents.gases["plasma"] ? P.air_contents.gases["plasma"][MOLES] : 0 + power_produced *= pulse_strength*20 add_avail(power_produced) last_power = power_produced return diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index aa748fbbf03..7aaebff4269 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -93,9 +93,6 @@ user.Stun(stun) user.Weaken(10) user.electrocute_act(shock_damage, src, 1) - user.visible_message("[user.name] was shocked by the [src.name]!", \ - "You feel a powerful shock course through your body, sending you flying!", \ - "You hear a heavy electrical crack.") else if(issilicon(user)) if(prob(20)) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 9d0238fba71..86419280ba7 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -158,8 +158,9 @@ terminal.dismantle(user) //crowbarring it ! + var/turf/T = get_turf(src) if(default_deconstruction_crowbar(I)) - message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[src] has been deconstructed by [key_name(user)]") investigate_log("SMES deconstructed by [key_name(user)]","singulo") @@ -329,10 +330,11 @@ return ui_interact(user) -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "smes", name, 340, 440) + ui = new(user, src, ui_key, "smes", name, 340, 440, master_ui, state) ui.open() /obj/machinery/power/smes/get_ui_data() @@ -442,4 +444,4 @@ #undef SMES_OUTPUTTING #undef SMES_NOT_OUTPUTTING #undef SMES_INPUTTING -#undef SMES_INPUT_ATTEMPT \ No newline at end of file +#undef SMES_INPUT_ATTEMPT diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index f138b106657..f18c4aeb26c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -369,10 +369,11 @@ return ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "solar_control", name, 465, 400) + ui = new(user, src, ui_key, "solar_control", name, 465, 400, master_ui, state) ui.open() /obj/machinery/power/solar_control/get_ui_data() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 18a05a582a4..4cc508f6f37 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -138,7 +138,13 @@ damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure - oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) + var/removed_nitrogen = 0 + if(removed.gases["n2"]) + removed_nitrogen = (removed.gases["n2"][MOLES] * NITROGEN_RETARDATION_FACTOR) + + removed.assert_gases("o2", "plasma") + + oxygen = max(min((removed.gases["o2"][MOLES] - removed_nitrogen) / MOLES_CELLSTANDARD, 1), 0) var/temp_factor = 50 @@ -169,9 +175,9 @@ removed.temperature = max(0, min(removed.temperature, 2500)) //Calculate how much gas to release - removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) + removed.gases["plasma"][MOLES] += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) - removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) + removed.gases["o2"][MOLES] += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) env.merge(removed) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index e1e2018779e..8c32c860c1e 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -13,7 +13,8 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/structure/particle_accelerator/power_box, /obj/structure/particle_accelerator/end_cap, /obj/machinery/field/containment, - /obj/structure/disposalpipe) + /obj/structure/disposalpipe, + /obj/machinery/gateway) /obj/singularity/energy_ball name = "energy ball" @@ -44,7 +45,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, move_the_basket_ball(amount_to_move) pixel_x = 0 pixel_y = 0 - playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5) + playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 15) tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level) pixel_x = -32 pixel_y = -32 @@ -69,7 +70,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/singularity/energy_ball/proc/handle_energy() if(energy >= 300) energy -= 300 - playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5) + playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 15) spawn(100) var/obj/singularity/energy_ball/EB = new(loc) orbiting_balls.Add(EB) @@ -80,8 +81,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7) orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) - spawn(1) - EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36)) + EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36)) @@ -114,7 +114,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, return closest_atom /proc/tesla_zap(var/atom/source, zap_range = 3, power) - if(power < 500) + if(power < 1000) return var/list/tesla_coils = list() var/list/grounding_rods = list() diff --git a/code/modules/procedural mapping/mapGenerator.dm b/code/modules/procedural mapping/mapGenerator.dm index f421b1db0ee..ce6b5a18c89 100644 --- a/code/modules/procedural mapping/mapGenerator.dm +++ b/code/modules/procedural mapping/mapGenerator.dm @@ -38,7 +38,6 @@ if(replace) undefineRegion() - map |= block(Start,End) return map diff --git a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm index 2c76915504b..ff7ea4fc8f7 100644 --- a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm @@ -14,11 +14,7 @@ SSair.remove_from_active(T) for(var/turf/simulated/T in map) if(T.air) - T.air.oxygen = T.oxygen - T.air.nitrogen = T.nitrogen - T.air.carbon_dioxide = T.carbon_dioxide - T.air.toxins = T.toxins - T.air.temperature = T.temperature + T.air.copy_from_turf(T) SSair.add_to_active(T) //Only places atoms/turfs on area borders diff --git a/code/modules/procedural mapping/mapGenerators/lava_river.dm b/code/modules/procedural mapping/mapGenerators/lava_river.dm new file mode 100644 index 00000000000..124868557d9 --- /dev/null +++ b/code/modules/procedural mapping/mapGenerators/lava_river.dm @@ -0,0 +1,18 @@ +/datum/mapGenerator/lavaland + var/start_z = 5 + modules = list(/datum/mapGeneratorModule/river) + +/datum/mapGenerator/lavaland/defineRegion(turf/Start, turf/End, replace = 0) + start_z = Start.z + ..() + +/datum/mapGeneratorModule/river + var/river_type = /turf/simulated/floor/plating/lava/smooth + var/river_nodes = 4 + var/start_z = 5 + +/datum/mapGeneratorModule/river/generate() + if(istype(mother, /datum/mapGenerator/lavaland)) + var/datum/mapGenerator/lavaland/L = mother + start_z = L.start_z + spawn_rivers(start_z, river_nodes, river_type) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index a7d14066c38..0430ef12f13 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -1,5 +1,6 @@ /obj/item/ammo_box/a357 name = "speed loader (.357)" + desc = "Designed to quickly reload revolvers." icon_state = "357" ammo_type = /obj/item/ammo_casing/a357 max_ammo = 7 @@ -7,6 +8,7 @@ /obj/item/ammo_box/c38 name = "speed loader (.38)" + desc = "Designed to quickly reload revolvers." icon_state = "38" ammo_type = /obj/item/ammo_casing/c38 max_ammo = 6 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index ea35c457cb9..a5ff5364b5e 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -154,6 +154,7 @@ /obj/item/ammo_box/magazine/m10mm name = "pistol magazine (10mm)" + desc = "A gun magazine." icon_state = "9x19p" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c10mm @@ -272,6 +273,7 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m12g name = "shotgun magazine (12g slugs)" + desc = "A drum magazine." icon_state = "m12gb" ammo_type = /obj/item/ammo_casing/shotgun origin_tech = "combat=3;syndicate=1" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 51e0a7822be..6d6a36df584 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -105,8 +105,7 @@ /obj/item/weapon/gun/proc/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1) if(recoil) - spawn() - shake_camera(user, recoil + 1, recoil) + shake_camera(user, recoil + 1, recoil) if(suppressed) playsound(user, fire_sound, 10, 1) diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index 2c38f1b8c85..3c4657947d6 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -41,7 +41,7 @@ return if(grenades.len) - spawn(0) fire_grenade(target,user) + fire_grenade(target,user) else usr << "The grenade launcher is empty." @@ -51,7 +51,7 @@ var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! grenades -= F F.loc = user.loc - F.throw_at(target, 30, 2,user) + F.throw_at_fast(target, 30, 2,user) message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") log_game("[key_name(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") F.active = 1 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 80f135be1ba..681db297fc3 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -37,7 +37,6 @@ if(istype(AM, mag_type)) if(magazine) user << "You perform a tactical reload on \the [src], replacing the magazine." - user.say(pick("I'M RELOADING!!!", "NEW MAG IN!!!", "CHANGING MAG!!!", "COVER ME! I'M RELOADING!!!", "RELOADING!!!")) magazine.loc = get_turf(src.loc) magazine.update_icon() magazine = null @@ -233,4 +232,4 @@ fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 3 - fire_delay = 1 + fire_delay = 1 \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index ee8f3198a85..5d5bd451982 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -217,6 +217,7 @@ sawn_desc = "I'm just here for the gasoline." unique_rename = 0 unique_reskin = 0 + var/slung = 0 /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) ..() @@ -226,11 +227,18 @@ slot_flags = SLOT_BACK icon_state = "ishotgunsling" user << "You tie the lengths of cable to the shotgun, making a sling." + slung = 1 update_icon() else user << "You need at least ten lengths of cable if you want to make a sling!" return +/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/update_icon() + ..() + if (slung && (slot_flags & SLOT_BELT) ) + slung = 0 + icon_state = "ishotgun-sawn" + // Sawing guns related procs // /obj/item/weapon/gun/projectile/proc/blow_up(mob/user) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index f1690cbbfc0..33694ceb8d6 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -148,6 +148,7 @@ icon_state = ".50" /obj/item/projectile/bullet/sniper/penetrator + icon_state = "gauss" name = "penetrator round" damage = 60 forcedodge = 1 @@ -172,7 +173,7 @@ icon_state = ".50" /obj/item/projectile/bullet/sniper/accelerator - icon_state = "red_laser" + icon_state = "gaussweak" name = "accelerator round" damage = 5 stun = 0 @@ -183,7 +184,7 @@ ..() damage += 5 if(damage > 40) - icon_state = "heavylaser" + icon_state = "gaussstrong" breakthings = TRUE else if(damage > 25) - icon_state = "laser" + icon_state = "gauss" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7cf1c1ba5b2..c3a3cedada1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -122,18 +122,18 @@ /obj/item/projectile/proc/fire() - spawn(1) - while(loc) - if(!paused) - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) - step_towards(src, current) - if(original && (original.layer>=2.75) || ismob(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original, 1) - Range() - sleep(1) + set waitfor = 0 + while(loc) + if(!paused) + if((!( current ) || loc == current)) + current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) + step_towards(src, current) + if(original && (original.layer>=2.75) || ismob(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original, 1) + Range() + sleep(1) /obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index e26987c1e31..5a30450ea97 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -77,24 +77,25 @@ var/const/INJECT = 5 //injection if(current_list_element > reagent_list.len) current_list_element = 1 var/datum/reagent/current_reagent = reagent_list[current_list_element] - src.remove_reagent(current_reagent.id, 1) + remove_reagent(current_reagent.id, 1) current_list_element++ total_transfered++ - src.update_total() + update_total() handle_reactions() return total_transfered /datum/reagents/proc/remove_all(amount = 1) - var/part = amount / src.total_volume - for (var/datum/reagent/current_reagent in src.reagent_list) - var/current_reagent_transfer = current_reagent.volume * part - src.remove_reagent(current_reagent.id, current_reagent_transfer) + if(total_volume > 0) + var/part = amount / total_volume + for(var/datum/reagent/current_reagent in reagent_list) + var/current_reagent_transfer = current_reagent.volume * part + remove_reagent(current_reagent.id, current_reagent_transfer) - src.update_total() - src.handle_reactions() - return amount + update_total() + handle_reactions() + return amount /datum/reagents/proc/get_master_reagent_name() var/the_name = null diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index cb9f8e0894e..d5784519bed 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -85,10 +85,11 @@ return ui_interact(user) -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "chem_dispenser", name, 412, 600) + ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state) ui.open() /obj/machinery/chem_dispenser/get_ui_data() @@ -129,11 +130,9 @@ switch(action) if("amount") - amount = round(text2num(params["amount"]), 5) // round to nearest 5 - if (amount < 0) // Since the user can actually type the commands himself, some sanity checking - amount = 0 - if (amount > 100) - amount = 100 + var/amount = text2num(params["amount"]) + if(amount in beaker.possible_transfer_amounts) + src.amount = amount if("dispense") if(beaker && dispensable_reagents.Find(params["reagent"])) var/datum/reagents/R = beaker.reagents diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index eacd2fba7e9..c44489ff699 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -96,10 +96,11 @@ return ui_interact(user) -/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "chem_heater", name, 275, 400) + ui = new(user, src, ui_key, "chem_heater", name, 275, 400, master_ui, state) ui.open() /obj/machinery/chem_heater/get_ui_data() diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 4704c01e251..ebb389a9482 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -334,15 +334,15 @@ if(!X.anchored) var/distance = get_dist(X, pull) var/moving_power = max(range_power - distance, 1) - spawn(0) - if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown - if(setting_type) - var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) - var/throw_range = 5 - distance - X.throw_at(throw_target, throw_range, 1) - else - X.throw_at(pull, distance, 1) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) + var/throw_range = 5 - distance + X.throw_at_fast(throw_target, throw_range, 1) else + X.throw_at_fast(pull, distance, 1) + else + spawn(0) if(setting_type) for(var/i in 0 to moving_power-1) sleep(2) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 39986a13f8f..2f624d883d2 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -362,8 +362,14 @@ H.visible_message("[H] falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN. H.Weaken(3) sleep(30) - var/list/blacklisted_species = list(/datum/species/zombie, /datum/species/skeleton, /datum/species/human, /datum/species/golem, /datum/species/golem/adamantine, /datum/species/shadow, /datum/species/shadow/ling, /datum/species/plasmaman) - var/list/possible_morphs = subtypesof(/datum/species/) - blacklisted_species + //var/list/blacklisted_species = list( + + var/list/possible_morphs = list() + for(var/type in subtypesof(/datum/species)) + var/datum/species/S = type + if(initial(S.blacklisted)) + continue + possible_morphs += S var/datum/species/mutation = pick(possible_morphs) if(prob(90) && mutation && H.dna.species != /datum/species/golem && H.dna.species != /datum/species/golem/adamantine) H << "The pain subsides. You feel... different." diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 366ca9e7403..c03e3cf066f 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -70,14 +70,14 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs if(!X.anchored) var/distance = get_dist(X, T) var/moving_power = max(range - distance, 1) - spawn(0) //so everything moves at the same time. - if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown - if(setting_type) - var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T))) - X.throw_at(throw_target, moving_power, 1) - else - X.throw_at(T, moving_power, 1) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T))) + X.throw_at_fast(throw_target, moving_power, 1) else + X.throw_at_fast(T, moving_power, 1) + else + spawn(0) //so everything moves at the same time. if(setting_type) for(var/i = 0, i < moving_power, i++) sleep(2) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index aa84460deb4..cbc3d93db26 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -100,10 +100,9 @@ /datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) - chemical_mob_spawn(holder, 5, "Gold Slime") /datum/chemical_reaction/slimecritlesser @@ -117,10 +116,9 @@ /datum/chemical_reaction/slimecritlesser/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) - chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral") /datum/chemical_reaction/slimecritfriendly @@ -134,10 +132,9 @@ /datum/chemical_reaction/slimecritfriendly/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate adorably !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") spawn(50) - chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral") //Silver @@ -262,8 +259,8 @@ /datum/chemical_reaction/slimefreeze/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") spawn(50) if(holder && holder.my_atom) playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) @@ -310,8 +307,8 @@ /datum/chemical_reaction/slimefire/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/TU = get_turf(holder.my_atom) + TU.visible_message("The slime extract begins to vibrate adorably !") spawn(50) if(holder && holder.my_atom) var/turf/simulated/T = get_turf(holder.my_atom) @@ -359,8 +356,8 @@ /datum/chemical_reaction/slimeglow/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly."), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.") var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime F.loc = get_turf(holder.my_atom) @@ -438,8 +435,7 @@ feedback_add_details("slime_cores_used","[type]") for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The [slime] is driven into a frenzy!"), 1) + slime.visible_message("The [slime] is driven into a frenzy!") /datum/chemical_reaction/slimespeed @@ -498,8 +494,8 @@ /datum/chemical_reaction/slimeexplosion/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) if(holder && holder.my_atom) explosion(get_turf(holder.my_atom), 1 ,3, 6) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index eb72b18724f..524348b117c 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -104,15 +104,15 @@ use_power(100) affecting = loc.contents - src // moved items will be all in loc - spawn(1) // slight delay to prevent infinite propagation due to map order //TODO: please no spawn() in process(). It's a very bad idea - var/items_moved = 0 - for(var/atom/movable/A in affecting) - if(!A.anchored) - if(A.loc == src.loc) // prevents the object from being affected if it's not currently here. - step(A,movedir) - items_moved++ - if(items_moved >= 10) - break + sleep(1) // slight delay to prevent infinite propagation due to map order + var/items_moved = 0 + for(var/atom/movable/A in affecting) + if(!A.anchored) + if(A.loc == src.loc) // prevents the object from being affected if it's not currently here. + step(A,movedir) + items_moved++ + if(items_moved >= 10) + break // attack with item, place item on conveyor /obj/machinery/conveyor/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index 24e12478be0..d818c88567c 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -62,13 +62,13 @@ loc = D.trunk active = 1 dir = DOWN - spawn(1) - move() // spawn off the movement process + move() return // movement process, persists while holder is moving through pipes /obj/structure/disposalholder/proc/move() + set waitfor = 0 var/obj/structure/disposalpipe/last while(active) var/obj/structure/disposalpipe/curr = loc diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 346264b7354..eac5a5259e0 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -170,28 +170,25 @@ if(!linked_console) dat += "Scan for R&D Console
" if(loaded_item) - if(recentlyExperimented) - dat += "The [src] is still resetting!" - else - dat += "Loaded Item: [loaded_item]
" - dat += "Technology:
" - var/list/D = ConvertReqString2List(loaded_item.origin_tech) - for(var/T in D) - dat += "[T]
" - dat += "

Available tests:" - dat += "
Poke" - dat += "
Irradiate" - dat += "
Gas" - dat += "
Burn" - dat += "
Freeze" - dat += "
Destroy
" - if(istype(loaded_item,/obj/item/weapon/relic)) - dat += "
Discover
" - dat += "
Eject" + dat += "Loaded Item: [loaded_item]
" + dat += "Technology:
" + var/list/D = ConvertReqString2List(loaded_item.origin_tech) + for(var/T in D) + dat += "[T]
" + dat += "

Available tests:" + dat += "
Poke" + dat += "
Irradiate" + dat += "
Gas" + dat += "
Burn" + dat += "
Freeze" + dat += "
Destroy
" + if(istype(loaded_item,/obj/item/weapon/relic)) + dat += "
Discover
" + dat += "
Eject" else dat += "Nothing loaded." dat += "
Refresh
" - dat += "
Close
" + dat += "
Close
" var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) popup.set_content(dat) popup.open() @@ -340,7 +337,7 @@ warn_admins(usr, "[chosenchem] smoke") investigate_log("Experimentor has released [chosenchem] smoke!", "experimentor") if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, spewing harmless gas.>") + visible_message("[src] malfunctions, spewing harmless gas.") throwSmoke(src.loc) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) visible_message("[src] melts [exp_on], ionizing the air around it!") @@ -544,8 +541,9 @@ var/scantype = href_list["function"] var/obj/item/process = locate(href_list["item"]) in src - if(scantype == "close") + if(href_list["close"]) usr << browse(null, "window=experimentor") + return else if(scantype == "search") var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src) if(D) @@ -558,6 +556,14 @@ if(recentlyExperimented) usr << "[src] has been used too recently!" return + else if(!loaded_item) + updateUsrDialog() //Set the interface to unloaded mode + usr << "[src] is not currently loaded!" + return + else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) + updateUsrDialog() //Refresh interface to update interface hrefs + usr << "Interface failure detected in [src]. Please try again." + return var/dotype if(text2num(scantype) == SCANTYPE_DISCOVER) dotype = SCANTYPE_DISCOVER @@ -571,8 +577,7 @@ for(var/T in temp_tech) linked_console.files.UpdateTech(T, temp_tech[T]) linked_console.files.UpdateDesigns(process,process.type) - if(scantype != "close") - src.updateUsrDialog() + src.updateUsrDialog() return //~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~ diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 8c3330b9045..4b8839d20e1 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -374,7 +374,7 @@ //close open doors if(istype(O, /obj/machinery/door)) var/obj/machinery/door/Door = O - spawn(-1) + spawn(0) if(Door) Door.close() else if (istype(AM,/mob)) @@ -385,11 +385,10 @@ //docking turbulence if(M.client) - spawn(0) - if(M.buckled) - shake_camera(M, 2, 1) // turn it down a bit come on - else - shake_camera(M, 7, 1) + if(M.buckled) + shake_camera(M, 2, 1) // turn it down a bit come on + else + shake_camera(M, 7, 1) if(istype(M, /mob/living/carbon)) if(!M.buckled) M.Weaken(3) @@ -444,7 +443,7 @@ if(T) var/obj/machinery/door/Door = locate() in T if(Door) - spawn(-1) + spawn(0) Door.close() /obj/docking_port/mobile/proc/roadkill(list/L, dir, x, y) @@ -532,6 +531,7 @@ var/shuttleId var/possible_destinations = "" var/admin_controlled + var/no_destination_swap = 0 /obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/shuttle/C) ..() @@ -578,6 +578,11 @@ return if(href_list["move"]) + if(no_destination_swap) + var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) + if(M.mode != SHUTTLE_IDLE) + usr << "Shuttle already in transit." + return switch(SSshuttle.moveShuttle(shuttleId, href_list["move"], 1)) if(0) usr << "Shuttle received message and will be sent shortly." if(1) usr << "Invalid shuttle requested." diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 1efa5cee8fe..bb447fa8847 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -17,9 +17,7 @@ * optional master_ui datum/tgui The parent UI. * optional state datum/ui_state The state used to determine status. **/ -/atom/movable/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, \ - force_open = 0, datum/tgui/master_ui = null, \ - datum/ui_state/state = default_state) +/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) return -1 // Sorta implemented. /** @@ -32,7 +30,7 @@ * * return list Data to be sent to the UI. **/ -/atom/movable/proc/get_ui_data(mob/user) +/datum/proc/get_ui_data(mob/user) return list() // Not implemented. @@ -47,7 +45,7 @@ * * return bool If the UI should be updated or not. **/ -/atom/movable/proc/ui_act(action, list/params) +/datum/proc/ui_act(action, list/params) return // Not implemented. @@ -55,9 +53,10 @@ * private * * The UI's host object (usually src_object). - * Used internally by ui_state(s). + * This allows modules/datums to have the UI attached to them, + * and be a part of another object. **/ -/atom/proc/ui_host() +/datum/proc/ui_host() return src /** @@ -75,21 +74,17 @@ * * required uiref ref The UI that was closed. **/ -/client/verb/uiclose(uiref as text) +/client/verb/uiclose(ref as text) // Name the verb, and hide it from the user panel. set name = "uiclose" set hidden = 1 // Get the UI based on the ref. - var/datum/tgui/ui = locate(uiref) + var/datum/tgui/ui = locate(ref) // If we found the UI, close it. if(istype(ui)) ui.close() - // If there is a custom ref, call that atom's Topic(). - if(ui.ref) - var/href = "close=1" - src.Topic(href, params2list(href), ui.ref) - // Otherwise, if we use the legacy logic, unset the mob's machine. - else if(src && src.mob) + // Unset machine just to be sure. + if(src && src.mob) src.mob.unset_machine() \ No newline at end of file diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm index c9a3bb467c4..62e18bb6b96 100644 --- a/code/modules/tgui/states/admin.dm +++ b/code/modules/tgui/states/admin.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/admin_state/admin_state = new() -/datum/ui_state/admin_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/admin_state/can_use_topic(src_object, mob/user) if(check_rights_for(user.client, R_ADMIN)) return UI_INTERACTIVE return UI_CLOSE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm index 1b781a458d7..9a5c1a5e54f 100644 --- a/code/modules/tgui/states/conscious.dm +++ b/code/modules/tgui/states/conscious.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/conscious_state/conscious_state = new() -/datum/ui_state/conscious_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/conscious_state/can_use_topic(src_object, mob/user) if(user.stat == CONSCIOUS) return UI_INTERACTIVE return UI_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm index 20cda3241e0..6cb88abea28 100644 --- a/code/modules/tgui/states/contained.dm +++ b/code/modules/tgui/states/contained.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/contained_state/contained_state = new() -/datum/ui_state/contained_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user) if(!src_object.contains(user)) return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm index 4fef9ad5b3c..70f2a59992e 100644 --- a/code/modules/tgui/states/deep_inventory.dm +++ b/code/modules/tgui/states/deep_inventory.dm @@ -1,12 +1,12 @@ /** * tgui state: deep_inventory_state * - * Checks that the src_object is in the user's fist-level (backpack, webbing, etc) inventory. + * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. **/ /var/global/datum/ui_state/deep_inventory_state/deep_inventory_state = new() -/datum/ui_state/deep_inventory_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user) if(!user.contains(src_object)) return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 8e1c3e8dec9..56ec71b7cc8 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -6,20 +6,20 @@ /var/global/datum/ui_state/default/default_state = new() -/datum/ui_state/default/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/default/can_use_topic(src_object, mob/user) return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs. -/mob/proc/default_can_use_topic(atom/movable/src_object) +/mob/proc/default_can_use_topic(src_object) return UI_CLOSE // Don't allow interaction by default. -/mob/living/default_can_use_topic(atom/movable/src_object) +/mob/living/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > UI_CLOSE) - . = min(., shared_living_ui_distance(src_object)) // Check the distance... + if(. > UI_CLOSE && loc) + . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch. return UI_UPDATE -/mob/living/carbon/human/default_can_use_topic(atom/movable/src_object) +/mob/living/carbon/human/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... @@ -27,7 +27,7 @@ if(prob(getBrainLoss())) return UI_UPDATE -/mob/living/silicon/robot/default_can_use_topic(atom/movable/src_object) +/mob/living/silicon/robot/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) if(. <= UI_DISABLED) return @@ -37,7 +37,7 @@ return UI_INTERACTIVE return UI_DISABLED // Otherwise they can keep the UI open. -/mob/living/silicon/ai/default_can_use_topic(atom/movable/src_object) +/mob/living/silicon/ai/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) if(. < UI_INTERACTIVE) return @@ -47,12 +47,12 @@ return UI_INTERACTIVE return UI_CLOSE -/mob/living/simple_animal/drone/default_can_use_topic(atom/movable/src_object) +/mob/living/simple_animal/drone/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Drones can only use things they're near. -/mob/living/silicon/pai/default_can_use_topic(atom/movable/src_object) +/mob/living/silicon/pai/default_can_use_topic(src_object) // pAIs can only use themselves and the owner's radio. if((src_object == src || src_object == radio) && !stat) return UI_INTERACTIVE diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index 536a90597e4..11b1c021cc2 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -6,15 +6,15 @@ /var/global/datum/ui_state/hands_state/hands_state = new() -/datum/ui_state/hands_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/hands_state/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) if(. > UI_CLOSE) return min(., user.hands_can_use_topic(src_object)) -/mob/proc/hands_can_use_topic(atom/movable/src_object) +/mob/proc/hands_can_use_topic(src_object) return UI_CLOSE -/mob/living/hands_can_use_topic(atom/movable/src_object) +/mob/living/hands_can_use_topic(src_object) if(src_object in get_both_hands(src)) return UI_INTERACTIVE return UI_CLOSE \ No newline at end of file diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm index a5f7233f00d..02870296338 100644 --- a/code/modules/tgui/states/inventory.dm +++ b/code/modules/tgui/states/inventory.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/inventory_state/inventory_state = new() -/datum/ui_state/inventory_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/inventory_state/can_use_topic(src_object, mob/user) if(!(src_object in user)) return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm index 8df75b57626..0b6462fe331 100644 --- a/code/modules/tgui/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -6,21 +6,21 @@ /var/global/datum/ui_state/notcontained_state/notcontained_state = new() -/datum/ui_state/notcontained_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) . = user.shared_ui_interaction(src_object) if(. > UI_CLOSE) return min(., user.notcontained_can_use_topic(src_object)) -/mob/proc/notcontained_can_use_topic(atom/movable/src_object) +/mob/proc/notcontained_can_use_topic(src_object) return UI_CLOSE -/mob/living/notcontained_can_use_topic(atom/movable/src_object) +/mob/living/notcontained_can_use_topic(atom/src_object) if(src_object.contains(src)) return UI_CLOSE // Close if we're inside it. return default_can_use_topic(src_object) -/mob/living/silicon/notcontained_can_use_topic(atom/movable/src_object) +/mob/living/silicon/notcontained_can_use_topic(src_object) return default_can_use_topic(src_object) // Silicons use default bevhavior. -/mob/living/simple_animal/drone/notcontained_can_use_topic(atom/movable/src_object) +/mob/living/simple_animal/drone/notcontained_can_use_topic(src_object) return default_can_use_topic(src_object) // Drones use default bevhavior. diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index a3fae3b276e..5cbcae97f7c 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -6,16 +6,16 @@ /var/global/datum/ui_state/physical/physical_state = new() -/datum/ui_state/physical/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/physical/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) if(. > UI_CLOSE) return min(., user.physical_can_use_topic(src_object)) -/mob/proc/physical_can_use_topic(atom/movable/src_object) +/mob/proc/physical_can_use_topic(src_object) return UI_CLOSE -/mob/living/physical_can_use_topic(atom/movable/src_object) +/mob/living/physical_can_use_topic(src_object) return shared_living_ui_distance(src_object) -/mob/living/silicon/physical_can_use_topic(atom/movable/src_object) +/mob/living/silicon/physical_can_use_topic(src_object) return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm index edb7c3ef300..b08fe373c6a 100644 --- a/code/modules/tgui/states/self.dm +++ b/code/modules/tgui/states/self.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/self_state/self_state = new() -/datum/ui_state/self_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/self_state/can_use_topic(src_object, mob/user) if(src_object != user) return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/states.dm b/code/modules/tgui/states/states.dm index 195d9394e3e..799ae542d81 100644 --- a/code/modules/tgui/states/states.dm +++ b/code/modules/tgui/states/states.dm @@ -7,22 +7,22 @@ /** * public * - * Checks if a user can use src_object's UI, under the given state. + * Checks the UI state for a mob. * * required user mob The mob who opened/is using the UI. * required state datum/ui_state The state to check. * * return UI_state The state of the UI. **/ -/atom/proc/ui_state(mob/user, datum/ui_state/state) +/datum/proc/ui_status(mob/user, datum/ui_state/state) var/src_object = ui_host() if(istype(user, /mob/dead/observer)) // Special-case ghosts. - if(check_rights_for(user.client, R_ADMIN)) + if(IsAdminGhost(user)) return UI_INTERACTIVE // Admins can interact anyway. - if(get_dist(src_object, src) > user.client.view) - return UI_CLOSE // Keep ghosts from opening too many UIs. - return UI_UPDATE // Ghosts can only view. + if(get_dist(src_object, src) < user.client.view) + return UI_UPDATE // Keep ghosts from opening too many UIs. + return UI_CLOSE // Ghosts can only view. return state.can_use_topic(src_object, user) // Check if the state allows interaction. /** @@ -31,12 +31,12 @@ * Checks if a user can use src_object's UI, and returns the state. * Can call a mob proc, which allows overrides for each mob. * - * required src_object atom/movable The object which owns the UI. + * required src_object datum The object/datum which owns the UI. * required user mob The mob who opened/is using the UI. * * return UI_state The state of the UI. **/ -/datum/ui_state/proc/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/proc/can_use_topic(src_object, mob/user) return UI_CLOSE // Don't allow interaction by default. @@ -47,7 +47,7 @@ * * return UI_state The state of the UI. **/ -/mob/proc/shared_ui_interaction(atom/movable/src_object) +/mob/proc/shared_ui_interaction(src_object) if(!client || stat) // Close UIs if mindless or dead/unconcious. return UI_CLOSE // Update UIs if incapicitated but concious. @@ -55,19 +55,19 @@ return UI_UPDATE return UI_INTERACTIVE -/mob/living/carbon/human/shared_ui_interaction(atom/movable/src_object) +/mob/living/carbon/human/shared_ui_interaction(src_object) // If we have telekinesis and remain close enough, allow interaction. if(dna.check_mutation(TK)) if(tkMaxRangeCheck(src, src_object)) return UI_INTERACTIVE return ..() -/mob/living/silicon/ai/shared_ui_interaction(atom/movable/src_object) +/mob/living/silicon/ai/shared_ui_interaction(src_object) if(lacks_power()) // Close UIs if the AI is unpowered. return UI_CLOSE return ..() -/mob/living/silicon/robot/shared_ui_interaction(atom/movable/src_object) +/mob/living/silicon/robot/shared_ui_interaction(src_object) if(cell.charge <= 0) // Close UIs if the Borg is unpowered. return UI_CLOSE if(lockcharge) // Disable UIs if the Borg is locked. @@ -81,12 +81,12 @@ * Really only used for checks outside the context of a mob. * Otherwise, use shared_living_ui_distance(). * - * required src_object atom/movable The object which owns the UI. + * required src_object The object which owns the UI. * required user mob The mob who opened/is using the UI. * * return UI_state The state of the UI. **/ -/atom/proc/contents_ui_distance(atom/movable/src_object, mob/living/user) +/atom/proc/contents_ui_distance(src_object, mob/living/user) return user.shared_living_ui_distance(src_object) // Just call this mob's check. /** diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm index 2f06f36c8f8..1871980a82a 100644 --- a/code/modules/tgui/states/zlevel.dm +++ b/code/modules/tgui/states/zlevel.dm @@ -6,7 +6,7 @@ /var/global/datum/ui_state/z_state/z_state = new() -/datum/ui_state/z_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/z_state/can_use_topic(src_object, mob/user) var/turf/turf_obj = get_turf(src_object) var/turf/turf_usr = get_turf(user) if(!turf_obj || !turf_usr || !(turf_obj.z == turf_usr.z)) diff --git a/code/modules/tgui/subsystem.dm b/code/modules/tgui/subsystem.dm index 14b4dd5f7e5..ffa7082bcf7 100644 --- a/code/modules/tgui/subsystem.dm +++ b/code/modules/tgui/subsystem.dm @@ -10,23 +10,19 @@ * Get a open UI given a user, src_object, and ui_key and try to update it with data. * * required user mob The mob who opened/is using the UI. - * required src_object atom/movable The object which owns the UI. + * required src_object datum The object/datum which owns the UI. * required ui_key string The ui_key of the UI. * optional ui datum/tgui The UI to be updated, if it exists. - * optional data list The data to update the UI with, if it exists. * optional force_open bool If the UI should be re-opened instead of updated. * * return datum/tgui The found UI. **/ -/datum/subsystem/tgui/proc/try_update_ui(mob/user, atom/movable/src_object, ui_key, datum/tgui/ui, \ - list/data = null, force_open = 0) - if(!data) - data = src_object.get_ui_data(user) - +/datum/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = 0) if(isnull(ui)) // No UI was passed, so look for one. ui = get_open_ui(user, src_object, ui_key) if(!isnull(ui)) + var/data = src_object.get_ui_data(user) // Get data from the src_object. if(!force_open) // UI is already open; update it. ui.push_data(data) else // Re-open it anyways. @@ -41,12 +37,12 @@ * Get a open UI given a user, src_object, and ui_key. * * required user mob The mob who opened/is using the UI. - * required src_object atom/movable The object which owns the UI. + * required src_object datum The object/datum which owns the UI. * required ui_key string The ui_key of the UI. * * return datum/tgui The found UI. **/ -/datum/subsystem/tgui/proc/get_open_ui(mob/user, atom/movable/src_object, ui_key) +/datum/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return null // No UIs open. @@ -64,11 +60,11 @@ * * Update all UIs attached to src_object. * - * required src_object atom/movable The object which owns the UIs. + * required src_object datum The object/datum which owns the UIs. * * return int The number of UIs updated. **/ -/datum/subsystem/tgui/proc/update_uis(atom/movable/src_object) +/datum/subsystem/tgui/proc/update_uis(datum/src_object) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. @@ -86,11 +82,11 @@ * * Close all UIs attached to src_object. * - * required src_object atom/movable The object which owns the UIs. + * required src_object datum The object/datum which owns the UIs. * * return int The number of UIs closed. **/ -/datum/subsystem/tgui/proc/close_uis(atom/movable/src_object) +/datum/subsystem/tgui/proc/close_uis(datum/src_object) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. @@ -109,12 +105,12 @@ * Update all UIs belonging to a user. * * required user mob The mob who opened/is using the UI. - * optional src_object atom/movable If provided, only update UIs belonging this atom. + * optional src_object datum If provided, only update UIs belonging this src_object. * optional ui_key string If provided, only update UIs with this UI key. * * return int The number of UIs updated. **/ -/datum/subsystem/tgui/proc/update_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) +/datum/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. @@ -131,12 +127,12 @@ * Close all UIs belonging to a user. * * required user mob The mob who opened/is using the UI. - * optional src_object atom/movable If provided, only update UIs belonging this atom. - * optional ui_key string If provided, only update UIs with this UI key. + * optional src_object datum If provided, only close UIs belonging this src_object. + * optional ui_key string If provided, only close UIs with this UI key. * * return int The number of UIs closed. **/ -/datum/subsystem/tgui/proc/close_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) +/datum/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 8cc69f3145e..e7ef928b975 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -9,7 +9,7 @@ **/ /datum/tgui var/mob/user // The mob who opened/is using the UI. - var/atom/movable/src_object // The object which owns the UI. + var/datum/src_object // The object which owns the UI. var/title // The title of te UI. var/ui_key // The ui_key of the UI. This allows multiple UIs for one src_object. var/window_id // The window_id for browse() and onclose(). @@ -24,7 +24,6 @@ "can_close" = 1, "auto_format" = 0 ) - var/atom/ref = null // An extra ref to call when the window is closed. var/style = "nanotrasen" // The style to be used for this UI. var/interface // The interface (template) to be used for this UI. var/auto_update = 1 // Update the UI every MC tick. @@ -40,22 +39,18 @@ * Create a new UI. * * required user mob The mob who opened/is using the UI. - * required src_object atom/movable The object which owns the UI. + * required src_object datum The object or datum which owns the UI. * required ui_key string The ui_key of the UI. * required interface string The interface used to render the UI. * optional title string The title of the UI. * optional width int The window width. * optional height int The window height. - * optional ref atom An extra ref to use when the window is closed. * optional master_ui datum/tgui The parent UI. * optional state datum/ui_state The state used to determine status. * * return datum/tgui The requested UI. **/ -/datum/tgui/New(mob/user, atom/movable/src_object, ui_key, interface, \ - title, width = 0, height = 0, \ - atom/ref = null, datum/tgui/master_ui = null, \ - datum/ui_state/state = default_state) +/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) src.user = user src.src_object = src_object src.ui_key = ui_key @@ -70,9 +65,6 @@ if(height) src.height = height - if(ref) - src.ref = ref - src.master_ui = master_ui if(master_ui) master_ui.children += src @@ -85,27 +77,25 @@ * public * * Open this UI (and initialize it with data). - * - * optional data list The data to intialize the UI with. **/ -/datum/tgui/proc/open(list/data = null) +/datum/tgui/proc/open() + set waitfor = 0 // Don't wait on sleep()s. if(!user.client) return // Bail if there is no client. update_status(push = 0) // Update the window status. if(status == UI_CLOSE) - return // Bail if we should close. + return // Bail if we're not supposed to open. if(!initial_data) - if(!data) // If we don't have initial_data and data was not passed, get data from the src_object. - data = src_object.get_ui_data(user) - set_initial_data(data) // Otherwise use the passed data. + set_initial_data(src_object.get_ui_data(user)) // Get the UI data. var/window_size = "" if(width && height) // If we have a width and height, use them. window_size = "size=[width]x[height];" - user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. + var/debugable = check_rights_for(user.client, R_DEBUG) + user << browse(get_html(debugable), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. winset(user, window_id, "on-close=\"uiclose \ref[src]\"") // Instruct the client to signal UI when the window is closed. SStgui.on_open(src) @@ -135,6 +125,9 @@ SStgui.on_close(src) for(var/datum/tgui/child in children) // Loop through and close all children. child.close() + children.Cut() + state = null + master_ui = null /** * public @@ -192,11 +185,20 @@ * * Generate HTML for this UI. * + * optional bool inline If the JSON should be inlined into the HTML (for debugging). + * * return string UI HTML output. **/ -/datum/tgui/proc/get_html() - // Poplate HTML with JSON. - return replacetextEx(SStgui.html, "{}", get_json(initial_data)) +/datum/tgui/proc/get_html(var/inline) + var/html + // Poplate HTML with JSON if we're supposed to inline. + if(inline) + html = replacetextEx(SStgui.basehtml, "{}", get_json(initial_data)) + else + html = SStgui.basehtml + html = replacetextEx(html, "\[ref]", "\ref[src]") + html = replacetextEx(html, "\[style]", style) + return html /** * private @@ -207,19 +209,20 @@ **/ /datum/tgui/proc/get_config_data() var/list/config_data = list( - "title" = title, - "status" = status, - "style" = style, - "interface" = interface, - "fancy" = user.client.prefs.tgui_fancy, - "window" = window_id, - "ref" = "\ref[src]", - "user" = list( - "name" = user.name, - "ref" = "\ref[user]" + "title" = title, + "status" = status, + "style" = style, + "interface" = interface, + "fancy" = user.client.prefs.tgui_fancy, + "locked" = user.client.prefs.tgui_lock, + "window" = window_id, + "ref" = "\ref[src]", + "user" = list( + "name" = user.name, + "ref" = "\ref[user]" ), - "srcObject" = list( - "name" = src_object.name, + "srcObject" = list( + "name" = "[src_object]", "ref" = "\ref[src_object]" ) ) @@ -239,6 +242,7 @@ json_data["config"] = get_config_data() if(!isnull(data)) json_data["data"] = data + json_data["adata"] = data // Generate the JSON; replace bad characters. var/json = JSON.stringify(json_data) @@ -254,14 +258,29 @@ * If the src_object's ui_act() returns 1, update all UIs attacked to it. **/ /datum/tgui/Topic(href, href_list) + var/action = href_list["action"] + var/params = href_list; params -= "action" + + // Handle any special actions. + switch(action) + if("tgui:initialize") + user << output(url_encode(get_json(initial_data)), "[window_id].browser:initialize") + return + if("tgui:link") + user << link(params["url"]) + return + if("tgui:fancy") + user.client.prefs.tgui_fancy = TRUE + return + if("tgui:nofrills") + user.client.prefs.tgui_fancy = FALSE + return + update_status(push = 0) // Update the window state. if(status != UI_INTERACTIVE || user != usr) return // If UI is not interactive or usr calling Topic is not the UI user. - var/action = href_list["action"] // Pull the action out. - href_list -= "action" - - var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object. + var/update = src_object.ui_act(action, params, state) // Call ui_act() on the src_object. if(src_object && update) SStgui.update_uis(src_object) // If we have a src_object and its ui_act() told us to update. @@ -296,8 +315,8 @@ if(status <= UI_DISABLED && !force) return // Cannot update UI, we have no visibility. - // Send the new JSON to the recieveUpdate() Javascript function. - user << output(url_encode(get_json(data)), "[window_id].browser:receiveUpdate") + // Send the new JSON to the update() Javascript function. + user << output(url_encode(get_json(data)), "[window_id].browser:update") /** @@ -319,14 +338,14 @@ * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). **/ /datum/tgui/proc/update_status(push = 0) - var/new_status = src_object.ui_state(user, state) + var/obj/host = src_object.ui_host() + var/status = host.ui_status(user, state) if(master_ui) - new_status = min(new_status, master_ui.status) + status = min(status, master_ui.status) - if(new_status == UI_CLOSE) + set_status(status, push) + if(status == UI_CLOSE) close() - else - set_status(new_status, push) /** * private diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index eb306655402..1ef38cf1383 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -96,7 +96,7 @@ Notes: //Open a tooltip for user, at a location based on params -//Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro) +//Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro, etc) //Includes sanity.checks /proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null,title = "",content = "",theme = "") if(istype(user)) diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html index 04a471d4559..78eb9cdd880 100644 --- a/code/modules/tooltip/tooltip.html +++ b/code/modules/tooltip/tooltip.html @@ -61,6 +61,12 @@ .retro .wrap {border-color: #005E00;} .retro .content {color: #003366; border-color: #005E00; background-color: #00BD00;} + + .slimecore .wrap {border-color: #18640E;} + .slimecore .content {color: #6EA161; border-color: #11450B; background-color: #354E35;} + + .operative .wrap {border-color: #A10000;} + .operative .content {color: #0F0B0C; border-color: #610002; background-color: #382626;} @@ -220,4 +226,4 @@ }; - \ No newline at end of file + diff --git a/config/admins.txt b/config/admins.txt index 1da322c5d64..1540aa455c3 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -105,4 +105,5 @@ As334 = Game Master neersighted = Game Master Swankcookie = Game Master Ressler = Game Master +Folix = Game Master Bawhoppennn = Game Master \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 5c85c074aeb..2e4bde3cf08 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,73 @@ -->
+

16 January 2016

+

Joan updated:

+
    +
  • Alien queens and praetorians have suitably large speechbubbles.
  • +
  • Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles.
  • +
  • Blob mobs have suitably uncomfortable-looking speechbubbles.
  • +
  • Holoparasites and guardians have suitably robotic and magical speechbubbles.
  • +
  • Swarmers have suitably holographic speechbubbles.
  • +
  • Slimes have suitably slimy speechbubbles.
  • +
+ +

15 January 2016

+

Joan updated:

+
    +
  • Holoparasites can no longer beat their owner to death while inside of them.
  • +
  • Updates traitor holoparasite descriptions for accuracy.
  • +
  • Adds 8 additional silvery metals to the holoparasite name pool.
  • +
  • Adds two new holoparasite colors, light purple and red.
  • +
  • Holoparasite HUD buttons now have new sprites.
  • +
  • Adds glow effects when guardians teleport or recall, including fire guardian teleporting and support guardian teleporting.
  • +
+

Kor updated:

+
    +
  • Washing machines are activated via alt+click rather than a right click verb.
  • +
+ +

13 January 2016

+

Joan updated:

+
    +
  • Alien whisper ability has a new icon
  • +
+

MrStonedOne updated:

+
    +
  • Control clicking on the thing you are pulling will no longer unpull, instead control clicking on anything too far away to be pulled will unpull. (reminder that the delete key also unpulls)
  • +
+

OneArmedYeti updated:

+
    +
  • To help with colorblindness, gang HUDs have been changed so leaders have a border and normal gangster icons are smaller.
  • +
+ +

11 January 2016

+

Joan updated:

+
    +
  • Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories and resource nodes will still animate.
  • +
  • Holoparasite sprites have been updated again, are now named after silvery metals and flowers and can also be colored purple, blue or yellow.
  • +
+

xxalpha updated:

+
    +
  • Pipes and cables under walls, intact floors, grilles and reinforced windows will now be shielded from explosions until exposed.
  • +
+ +

09 January 2016

+

Wjohnston updated:

+
    +
  • AI Satellite has been remapped to make it more secure.
  • +
+ +

07 January 2016

+

KorPhaeron updated:

+
    +
  • Doubled cost of Lesser Summon Guns to 4 and increased charge time to 75 seconds.
  • +
+

TrustyGun updated:

+
    +
  • Added two new UI styles: black and green Operative and pale green Slimecore.
  • +
+

02 January 2016

Kor updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 973982dae38..804672394a2 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3189,3 +3189,52 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. in hopes of someone competent receiving it, unfortunately, your station was the only one to respond. Local security forces may not be welcoming your arrival group with open arms. +2016-01-07: + KorPhaeron: + - tweak: Doubled cost of Lesser Summon Guns to 4 and increased charge time to 75 + seconds. + TrustyGun: + - rscadd: 'Added two new UI styles: black and green Operative and pale green Slimecore.' +2016-01-09: + Wjohnston: + - wip: AI Satellite has been remapped to make it more secure. +2016-01-11: + Joan: + - rscdel: Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories + and resource nodes will still animate. + - imageadd: Holoparasite sprites have been updated again, are now named after silvery + metals and flowers and can also be colored purple, blue or yellow. + xxalpha: + - tweak: Pipes and cables under walls, intact floors, grilles and reinforced windows + will now be shielded from explosions until exposed. +2016-01-13: + Joan: + - imageadd: Alien whisper ability has a new icon + MrStonedOne: + - tweak: Control clicking on the thing you are pulling will no longer unpull, instead + control clicking on anything too far away to be pulled will unpull. (reminder + that the delete key also unpulls) + OneArmedYeti: + - imageadd: To help with colorblindness, gang HUDs have been changed so leaders + have a border and normal gangster icons are smaller. +2016-01-15: + Joan: + - bugfix: Holoparasites can no longer beat their owner to death while inside of + them. + - spellcheck: Updates traitor holoparasite descriptions for accuracy. + - spellcheck: Adds 8 additional silvery metals to the holoparasite name pool. + - imageadd: Adds two new holoparasite colors, light purple and red. + - imageadd: Holoparasite HUD buttons now have new sprites. + - imageadd: Adds glow effects when guardians teleport or recall, including fire + guardian teleporting and support guardian teleporting. + Kor: + - rscadd: Washing machines are activated via alt+click rather than a right click + verb. +2016-01-16: + Joan: + - imageadd: Alien queens and praetorians have suitably large speechbubbles. + - imageadd: Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles. + - imageadd: Blob mobs have suitably uncomfortable-looking speechbubbles. + - imageadd: Holoparasites and guardians have suitably robotic and magical speechbubbles. + - imageadd: Swarmers have suitably holographic speechbubbles. + - imageadd: Slimes have suitably slimy speechbubbles. diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index bb86a8b46f2..9aeb40dcdea 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi index 4c78f8f2e06..6476b5a2a16 100644 Binary files a/icons/effects/tile_effects.dmi and b/icons/effects/tile_effects.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index c114de2421e..4f06d9fca78 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi index 616d8ab2061..26fb3771e15 100644 Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index 1383b0dc40e..51904f2b3cd 100644 Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ diff --git a/icons/mob/guardian.dmi b/icons/mob/guardian.dmi index 9da38ca7706..2b9e0957b68 100644 Binary files a/icons/mob/guardian.dmi and b/icons/mob/guardian.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 0bd0e0fefb5..50e9757cf3a 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index b5f858b0406..bb23cabef96 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ diff --git a/icons/mob/screen_operative.dmi b/icons/mob/screen_operative.dmi new file mode 100644 index 00000000000..01c64e5a4fd Binary files /dev/null and b/icons/mob/screen_operative.dmi differ diff --git a/icons/mob/screen_slimecore.dmi b/icons/mob/screen_slimecore.dmi new file mode 100644 index 00000000000..27c6602d6cd Binary files /dev/null and b/icons/mob/screen_slimecore.dmi differ diff --git a/icons/mob/swarmer.dmi b/icons/mob/swarmer.dmi index dffd6b2490c..f8ff43f3b9f 100644 Binary files a/icons/mob/swarmer.dmi and b/icons/mob/swarmer.dmi differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi index 7f0efa39cbe..e5074d3d03f 100644 Binary files a/icons/mob/talk.dmi and b/icons/mob/talk.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 03faadce202..efb46f7b0cd 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 75bdc784e9b..5354cad0eff 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -108,6 +108,7 @@ #include "code\_onclick\hud\screen_objects.dm" #include "code\ATMOSPHERICS\atmospherics.dm" #include "code\ATMOSPHERICS\datum_pipeline.dm" +#include "code\ATMOSPHERICS\gas_types.dm" #include "code\ATMOSPHERICS\components\components_base.dm" #include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm" #include "code\ATMOSPHERICS\components\binary_devices\circulator.dm" @@ -181,7 +182,6 @@ #include "code\datums\martial.dm" #include "code\datums\material_container.dm" #include "code\datums\mind.dm" -#include "code\datums\modules.dm" #include "code\datums\mutations.dm" #include "code\datums\outfit.dm" #include "code\datums\progressbar.dm" @@ -575,6 +575,7 @@ #include "code\game\objects\effects\aliens.dm" #include "code\game\objects\effects\anomalies.dm" #include "code\game\objects\effects\bump_teleporter.dm" +#include "code\game\objects\effects\contraband.dm" #include "code\game\objects\effects\forcefields.dm" #include "code\game\objects\effects\gibs.dm" #include "code\game\objects\effects\glowshroom.dm" @@ -587,7 +588,6 @@ #include "code\game\objects\effects\spiders.dm" #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\decals\cleanable.dm" -#include "code\game\objects\effects\decals\contraband.dm" #include "code\game\objects\effects\decals\crayon.dm" #include "code\game\objects\effects\decals\decal.dm" #include "code\game\objects\effects\decals\misc.dm" @@ -825,6 +825,7 @@ #include "code\game\turfs\turf.dm" #include "code\game\turfs\simulated\dirtystation.dm" #include "code\game\turfs\simulated\floor.dm" +#include "code\game\turfs\simulated\river.dm" #include "code\game\turfs\simulated\walls.dm" #include "code\game\turfs\simulated\walls_mineral.dm" #include "code\game\turfs\simulated\walls_misc.dm" @@ -1447,6 +1448,7 @@ #include "code\modules\procedural mapping\mapGeneratorModules\nature.dm" #include "code\modules\procedural mapping\mapGenerators\asteroid.dm" #include "code\modules\procedural mapping\mapGenerators\cellular.dm" +#include "code\modules\procedural mapping\mapGenerators\lava_river.dm" #include "code\modules\procedural mapping\mapGenerators\nature.dm" #include "code\modules\procedural mapping\mapGenerators\shuttle.dm" #include "code\modules\procedural mapping\mapGenerators\syndicate.dm" diff --git a/tgui/.babelrc b/tgui/.babelrc new file mode 100644 index 00000000000..3c078e9f990 --- /dev/null +++ b/tgui/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + "es2015" + ] +} diff --git a/tgui/.gitattributes b/tgui/.gitattributes new file mode 100644 index 00000000000..6da3dcfc2d0 --- /dev/null +++ b/tgui/.gitattributes @@ -0,0 +1 @@ +assets/* binary diff --git a/tgui/.gitignore b/tgui/.gitignore index 68b9e27759d..71b051e887f 100644 --- a/tgui/.gitignore +++ b/tgui/.gitignore @@ -1,2 +1,2 @@ +npm-debug.log node_modules/ -bower_components/ diff --git a/tgui/Gulpfile.js b/tgui/Gulpfile.js deleted file mode 100644 index d1c580b989f..00000000000 --- a/tgui/Gulpfile.js +++ /dev/null @@ -1,2 +0,0 @@ -require('coffee-script/register'); -require('./gulp'); diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index dea4d8fb09e..3226be8ae16 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight,.label{color:#8ba5c4}.dark{color:#272727}html{box-sizing:border-box;min-height:100%;margin:0;cursor:default}*,:after,:before{box-sizing:inherit}body{min-height:100%;height:100%;margin:0 6px;background-color:#202020;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}main{display:block;margin-top:32px;padding-top:3px}hr{height:2px;background-color:#40628a;border:none}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}.bar .barText,span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bold{font-weight:700}.italic{font-style:italic}[unselectable]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:0;right:3px}.bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}.bar .barFill.good{background-color:#537d29}.bar .barFill.average{background-color:#be6209}.bar .barFill.bad{background-color:#b00e0e}.bar .barFill.highlight{background-color:#8ba5c4}span.button{display:inline-block;vertical-align:middle;height:20px;line-height:19px;padding:0 5px;white-space:nowrap;transition:background-color .25s,box-shadow .25s}span.button .fa{padding-right:2px}span.button.normal{background-color:#40628a}span.button.normal:focus,span.button.normal:hover{outline:0;box-shadow:inset 0 0 100px 100px hsla(0,0%,100%,.15)}span.button.disabled{background-color:#999}span.button.selected{background-color:#2f943c}span.button.caution{background-color:#9a9d00}span.button.danger{background-color:#9d0808}span.button.gridable{width:125px;margin:2px 0}div.display,div.notice{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)}div.display header,div.notice header,div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;border-bottom:2px solid #40628a}div.display header .button,div.notice header .button,div.subdisplay header .button{position:absolute;bottom:6px;right:4px}div.display article,div.notice article,div.subdisplay article{display:table;width:100%;border-spacing:4px 6px}div.notice{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);margin:8px 0;box-shadow:none;color:#000;font-weight:700;font-style:italic}div.notice .button{outline:1px solid #272727}div.notice .label{color:#000}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)}section .content,section .label,section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle}section{display:table-row;width:100%;padding:3px 0}section:not(first-child){padding-top:4px}section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}section .content:not(:last-child){padding-right:16px}section .line{width:100%}section .buttoninfo{margin-left:5px}div.subdisplay{width:100%;margin:0}header.titlebar .close,header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#98b0c3}header.titlebar .close:hover,header.titlebar .minimize:hover{color:#a7bccc}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{position:absolute;top:6px;right:46px}header.titlebar .close{position:absolute;top:4px;right:12px}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020)}body.generic,body.nanotrasen{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMjUiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020)} \ No newline at end of file +.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight{color:#8ba5c4}html{box-sizing:border-box;min-height:100%;margin:0;cursor:default}*,:after,:before{box-sizing:inherit}body{min-height:100%;height:100%;margin:0 6px;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)}main{display:block;margin-top:32px;padding-top:3px}hr{height:2px;background-color:#40628a;border:none}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.nanotrasen .bar .barText,body.nanotrasen span.button,body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bold{font-weight:700}.italic{font-style:italic}[unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}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;height:20px;line-height:19px;padding:0 5px;white-space:nowrap}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.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 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-spacing:4px 6px}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 .button{outline:1px solid #272727}body.nanotrasen div.notice .label{color:#000}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}body.nanotrasen section{display:table-row;width:100%;padding:3px 0}body.nanotrasen section:not(:first-child){padding-top:4px}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 section .buttoninfo{margin-left:5px}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;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.nanotrasen .wf-inactive .statusicon:after{content:"O"}body.nanotrasen .wf-inactive .minimize:after{content:"-"}body.nanotrasen .wf-inactive .close:after{content:"X"}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA4NS4yNSAxMTQuMzUiIG9wYWNpdHk9Ii4zMyI+CiAgPHRleHQKICAgIHN0eWxlPSJmb250LXNpemU6MjAwcHg7Zm9udC1mYW1pbHk6J1ZlcmRhbmEnLHNhbnMtc2VyaWYiCiAgICB4PSItMTAuNzQyMTg4IgogICAgeT0iMTExLjcxODc1Ij4KICAgIDx0c3Bhbj5zPC90c3Bhbj4KICA8L3RleHQ+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}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:#80ff80}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;height:20px;line-height:19px;padding:0 5px;white-space:nowrap}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#272727}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#474747;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.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 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-spacing:4px 6px}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 .button{outline:1px solid #272727}body.syndicate div.notice .label{color:#000}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}body.syndicate section{display:table-row;width:100%;padding:3px 0}body.syndicate section:not(:first-child){padding-top:4px}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 section .buttoninfo{margin-left:5px}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;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}body.syndicate .wf-inactive .statusicon:after{content:"O"}body.syndicate .wf-inactive .minimize:after{content:"-"}body.syndicate .wf-inactive .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index d6c9951b840..2ab39d08d0d 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,8 +1,10 @@ -!function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(a)return a(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o-1}}([].indexOf||function(t){for(V=this.length;V--&&this[V]!==t;);return V}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e0||-1)*Math.floor(Math.abs(e))),e},ToPrimitive:function(e){var n,r,i;if(R(e))return e;if(r=e.valueOf,t(r)&&(n=r.call(e),R(n)))return n;if(i=e.toString,t(i)&&(n=i.call(e),R(n)))return n;throw new TypeError},ToObject:function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return r(t)},ToUint32:function(t){return t>>>0}},D=function(){};M(a,{bind:function(e){var n=this;if(!t(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,a=l.call(arguments,1),o=function(){if(this instanceof i){var t=n.apply(this,d.call(a,l.call(arguments)));return r(t)===t?t:this}return n.apply(e,d.call(a,l.call(arguments)))},s=g(0,n.length-a.length),u=[],c=0;s>c;c++)h.call(u,"$"+c);return i=Function("binder","return function ("+u.join(",")+"){ return binder.apply(this, arguments); }")(o),n.prototype&&(D.prototype=n.prototype,i.prototype=new D,D.prototype=null),i}});var U=m.bind(i.hasOwnProperty),V=m.bind(i.toString),B=m.bind(l),q=v.bind(l),z=m.bind(s.slice),H=m.bind(s.split),W=m.bind(s.indexOf),$=m.bind(h),G=m.bind(i.propertyIsEnumerable),K=m.bind(n.sort),Q=e.isArray||function(t){return"[object Array]"===V(t)},Y=1!==[].unshift(0);M(n,{unshift:function(){return f.apply(this,arguments),this.length}},Y),M(e,{isArray:Q});var J=r("a"),Z="a"!==J[0]||!(0 in J),X=function(t){var e=!0,n=!0;return t&&(t.call("foo",function(t,n,r){"object"!=typeof r&&(e=!1)}),t.call([1],function(){"use strict";n="string"==typeof this},"x")),!!t&&e&&n};M(n,{forEach:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?H(this,""):r,a=-1,o=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++a1&&(r=arguments[1]),!t(n))throw new TypeError("Array.prototype.map callback must be a function");for(var u=0;o>u;u++)u in a&&(void 0===r?s[u]=n(a[u],u,i):s[u]=n.call(r,a[u],u,i));return s}},!X(n.map)),M(n,{filter:function(e){var n,r,i=I.ToObject(this),a=Z&&A(this)?H(this,""):i,o=I.ToUint32(a.length),s=[];if(arguments.length>1&&(r=arguments[1]),!t(e))throw new TypeError("Array.prototype.filter callback must be a function");for(var u=0;o>u;u++)u in a&&(n=a[u],(void 0===r?e(n,u,i):e.call(r,n,u,i))&&$(s,n));return s}},!X(n.filter)),M(n,{every:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?H(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;a>o;o++)if(o in i&&!(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!1;return!0}},!X(n.every)),M(n,{some:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?H(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;a>o;o++)if(o in i&&(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!0;return!1}},!X(n.some));var tt=!1;n.reduce&&(tt="object"==typeof n.reduce.call("es5",function(t,e,n,r){return r})),M(n,{reduce:function(e){var n=I.ToObject(this),r=Z&&A(this)?H(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var a,o=0;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o++];break}if(++o>=i)throw new TypeError("reduce of empty array with no initial value")}for(;i>o;o++)o in r&&(a=e(a,r[o],o,n));return a}},!tt);var et=!1;n.reduceRight&&(et="object"==typeof n.reduceRight.call("es5",function(t,e,n,r){return r})),M(n,{reduceRight:function(e){var n=I.ToObject(this),r=Z&&A(this)?H(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var a,o=i-1;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>o)return a;do o in r&&(a=e(a,r[o],o,n));while(o--);return a}},!et);var nt=n.indexOf&&-1!==[0,1].indexOf(1,2);M(n,{indexOf:function(t){var e=Z&&A(this)?H(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=0;for(arguments.length>1&&(r=I.ToInteger(arguments[1])),r=r>=0?r:g(0,n+r);n>r;r++)if(r in e&&e[r]===t)return r;return-1}},nt);var rt=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);M(n,{lastIndexOf:function(t){var e=Z&&A(this)?H(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=n-1;for(arguments.length>1&&(r=b(r,I.ToInteger(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in e&&t===e[r])return r;return-1}},rt);var it=function(){var t=[1,2],e=t.splice();return 2===t.length&&Q(e)&&0===e.length}();M(n,{splice:function(t,e){return 0===arguments.length?[]:p.apply(this,arguments)}},!it);var at=function(){var t={};return n.splice.call(t,0,0,1),1===t.length}();M(n,{splice:function(t,e){if(0===arguments.length)return[];var n=arguments;return this.length=g(I.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof e&&(n=B(arguments),n.length<2?$(n,this.length-t):n[1]=I.ToInteger(e)),p.apply(this,n)}},!at);var ot=function(){var t=new e(1e5);return t[8]="x",t.splice(1,1),7===t.indexOf("x")}(),st=function(){var t=256,e=[];return e[t]="a",e.splice(t+1,0,"b"),"a"===e[t]}();M(n,{splice:function(t,e){for(var n,r=I.ToObject(this),i=[],a=I.ToUint32(r.length),s=I.ToInteger(t),u=0>s?g(a+s,0):b(s,a),c=b(g(I.ToInteger(e),0),a-u),l=0;c>l;)n=o(u+l),U(r,n)&&(i[l]=r[n]),l+=1;var p,h=B(arguments,2),f=h.length;if(c>f){for(l=u;a-c>l;)n=o(l+c),p=o(l+f),U(r,n)?r[p]=r[n]:delete r[p],l+=1;for(l=a;l>a-c+f;)delete r[l-1],l-=1}else if(f>c)for(l=a-c;l>u;)n=o(l+c-1),p=o(l+f-1),U(r,n)?r[p]=r[n]:delete r[p],l-=1;l=u;for(var d=0;d=0&&!Q(e)&&t(e.callee)},At=Ot(arguments)?Ot:St;M(r,{keys:function(e){var n=t(e),r=At(e),i=null!==e&&"object"==typeof e,a=i&&A(e);if(!i&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var s=[],u=yt&&n;if(a&&wt||r)for(var c=0;ch;h++){var f=Tt[h];p&&"constructor"===f||!U(e,f)||$(s,f)}return s}});var Pt=r.keys&&function(){return 2===r.keys(arguments).length}(1,2),jt=r.keys&&function(){var t=r.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),Nt=r.keys;M(r,{keys:function(t){return Nt(At(t)?B(t):t)}},!Pt||jt);var Ft=-621987552e5,Mt="-000001",Rt=Date.prototype.toISOString&&-1===new Date(Ft).toISOString().indexOf(Mt),Lt=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();M(Date.prototype,{toISOString:function(){var t,e,n,r,i;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(r=this.getUTCFullYear(),i=this.getUTCMonth(),r+=Math.floor(i/12),i=(i%12+12)%12,t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],r=(0>r?"-":r>9999?"+":"")+z("00000"+Math.abs(r),r>=0&&9999>=r?-4:-6),e=t.length;e--;)n=t[e],10>n&&(t[e]="0"+n);return r+"-"+B(t,0,2).join("-")+"T"+B(t,2).join(":")+"."+z("000"+this.getUTCMilliseconds(),-3)+"Z"}},Rt||Lt);var It=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Ft).toJSON().indexOf(Mt)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}();It||(Date.prototype.toJSON=function(e){var n=r(this),i=I.ToPrimitive(n);if("number"==typeof i&&!isFinite(i))return null;var a=n.toISOString;if(!t(a))throw new TypeError("toISOString property is not callable");return a.call(n)});var Dt=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Ut=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),Vt=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(Vt||Ut||!Dt){var Bt=Math.pow(2,31)-1,qt=L(new Date(1970,0,1,0,0,0,Bt+1).getTime());Date=function(t){var e=function(n,r,i,a,s,u,c){var l,p=arguments.length;if(this instanceof t){var h=u,f=c;if(qt&&p>=7&&c>Bt){var d=Math.floor(c/Bt)*Bt,m=Math.floor(d/1e3);h+=m,f-=1e3*m}l=1===p&&o(n)===n?new t(e.parse(n)):p>=7?new t(n,r,i,a,s,h,f):p>=6?new t(n,r,i,a,s,h):p>=5?new t(n,r,i,a,s):p>=4?new t(n,r,i,a):p>=3?new t(n,r,i):p>=2?new t(n,r):p>=1?new t(n):new t}else l=t.apply(this,arguments);return R(l)||M(l,{constructor:e},!0),l},n=RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),r=[0,31,59,90,120,151,181,212,243,273,304,334,365],i=function(t,e){var n=e>1?1:0;return r[e]+Math.floor((t-1969+n)/4)-Math.floor((t-1901+n)/100)+Math.floor((t-1601+n)/400)+365*(t-1970)},a=function(e){var n=0,r=e;if(qt&&r>Bt){var i=Math.floor(r/Bt)*Bt,a=Math.floor(i/1e3);n+=a,r-=1e3*a}return u(new t(1970,0,1,0,0,n,r))};for(var s in t)U(t,s)&&(e[s]=t[s]);M(e,{now:t.now,UTC:t.UTC},!0),e.prototype=t.prototype,M(e.prototype,{constructor:e},!0);var c=function(e){var r=n.exec(e);if(r){var o,s=u(r[1]),c=u(r[2]||1)-1,l=u(r[3]||1)-1,p=u(r[4]||0),h=u(r[5]||0),f=u(r[6]||0),d=Math.floor(1e3*u(r[7]||0)),m=!(!r[4]||r[8]),v="-"===r[9]?1:-1,g=u(r[10]||0),b=u(r[11]||0),y=h>0||f>0||d>0;return(y?24:25)>p&&60>h&&60>f&&1e3>d&&c>-1&&12>c&&24>g&&60>b&&l>-1&&l=-864e13&&864e13>=o)?o:NaN}return t.parse.apply(this,arguments)};return M(e,{parse:c}),e}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var zt=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Ht={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var n=-1,r=e;++n=0;)n+=Ht.data[e],Ht.data[e]=Math.floor(n/t),n=n%t*Ht.base},numToString:function(){for(var t=Ht.size,e="";--t>=0;)if(""!==e||0===t||0!==Ht.data[t]){var n=o(Ht.data[t]);""===e?e=n:e+=z("0000000",0,7-n.length)+n}return e},pow:function ue(t,e,n){return 0===e?n:e%2===1?ue(t,e-1,n*t):ue(t*t,e/2,n)},log:function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}},Wt=function(t){var e,n,r,i,a,s,c,l;if(e=u(t),e=L(e)?0:Math.floor(e),0>e||e>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=u(this),L(n))return"NaN";if(-1e21>=n||n>=1e21)return o(n);if(r="",0>n&&(r="-",n=-n),i="0",n>1e-21)if(a=Ht.log(n*Ht.pow(2,69,1))-69,s=0>a?n*Ht.pow(2,-a,1):n/Ht.pow(2,a,1),s*=4503599627370496,a=52-a,a>0){for(Ht.multiply(0,s),c=e;c>=7;)Ht.multiply(1e7,0),c-=7;for(Ht.multiply(Ht.pow(10,c,1),0),c=a-1;c>=23;)Ht.divide(1<<23),c-=23;Ht.divide(1<0?(l=i.length,i=e>=l?r+z("0.0000000000000000000",0,e-l+2)+i:r+z(i,0,l-e)+"."+z(i,l-e)):i=r+i,i};M(c,{toFixed:Wt},zt);var $t=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Gt=c.toPrecision;M(c,{toPrecision:function(t){return void 0===t?Gt.call(this):Gt.call(this,t)}},$t),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var t=void 0===/()??/.exec("")[1],e=Math.pow(2,32)-1;s.split=function(n,r){var i=this+"";if(void 0===n&&0===r)return[];if(!T(n))return H(this,n,r);var a,o,s,u,c=[],l=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),p=0,f=RegExp(n.source,l+"g");t||(a=RegExp("^"+f.source+"$(?!\\s)",l));var d=void 0===r?e:I.ToUint32(r);for(o=f.exec(i);o&&(s=o.index+o[0].length,!(s>p&&($(c,z(i,p,o.index)),!t&&o.length>1&&o[0].replace(a,function(){for(var t=1;t1&&o.index=d)));)f.lastIndex===o.index&&f.lastIndex++,o=f.exec(i);return p===i.length?(u||!f.test(""))&&$(c,""):$(c,z(i,p)),c.length>d?z(c,0,d):c}}():"0".split(void 0,0).length&&(s.split=function(t,e){return void 0===t&&0===e?[]:H(this,t,e)});var Kt=s.replace,Qt=function(){var t=[];return"x".replace(/x(.)?/g,function(e,n){$(t,n)}),1===t.length&&void 0===t[0]}();Qt||(s.replace=function(e,n){var r=t(n),i=T(e)&&/\)[*?]/.test(e.source);if(r&&i){var a=function(t){var r=arguments.length,i=e.lastIndex;e.lastIndex=0;var a=e.exec(t)||[];return e.lastIndex=i,$(a,arguments[r-2],arguments[r-1]),n.apply(this,a)};return Kt.call(this,e,a)}return Kt.call(this,e,n)});var Yt=s.substr,Jt="".substr&&"b"!=="0b".substr(-1);M(s,{substr:function(t,e){var n=t;return 0>t&&(n=g(this.length+t,0)),Yt.call(this,n,e)}},Jt);var Zt=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Xt="​",te="["+Zt+"]",ee=RegExp("^"+te+te+"*"),ne=RegExp(te+te+"*$"),re=s.trim&&(Zt.trim()||!Xt.trim());M(s,{trim:function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");return o(this).replace(ee,"").replace(ne,"")}},re);var ie=s.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);M(s,{lastIndexOf:function(t){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");for(var e=o(this),n=o(t),r=arguments.length>1?u(arguments[1]):NaN,i=L(r)?1/0:I.ToInteger(r),a=b(g(i,0),e.length),s=n.length,c=a+s;c>0;){c=g(0,c-s);var l=W(z(e,c,a+s),n);if(-1!==l)return c+l}return-1}},ie);var ae=s.lastIndexOf;if(M(s,{lastIndexOf:function(t){return ae.apply(this,arguments)}},1!==s.lastIndexOf.length),(8!==parseInt(Zt+"08")||22!==parseInt(Zt+"0x16"))&&(parseInt=function(t){var e=/^[\-+]?0[xX]/;return function(n,r){var i=o(n).trim(),a=u(r)||(e.test(i)?16:10);return t(i,a)}}(parseInt)),new RangeError("test")+""!="RangeError: test"){var oe=function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=o(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=o(e)),t?e?t+": "+e:t:e};Error.prototype.toString=oe}if(F){var se=function(t,e){if(G(t,e)){var n=Object.getOwnPropertyDescriptor(t,e);n.enumerable=!1,Object.defineProperty(t,e,n)}};se(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),se(Error.prototype,"name")}})},{}],3:[function(t,e,n){!function(t,n){function r(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function i(){var t=w.elements;return"string"==typeof t?t.split(" "):t}function a(t,e){var n=w.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),w.elements=n+" "+t,l(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,r){if(e||(e=n),h)return e.createElement(t);r||(r=o(e));var i;return i=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!i.canHaveChildren||m.test(t)||i.tagUrn?i:r.frag.appendChild(i)}function u(t,e){if(t||(t=n),h)return t.createDocumentFragment();e=e||o(t);for(var r=e.frag.cloneNode(),a=0,s=i(),u=s.length;u>a;a++)r.createElement(s[a]);return r}function c(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return w.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(w,e.frag)}function l(t){t||(t=n);var e=o(t);return!w.shivCSS||p||e.hasCSS||(e.hasCSS=!!r(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),h||c(t,e),t}var p,h,f="3.7.3-pre",d=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",p="hidden"in t,h=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){p=!0,h=!0}}();var w={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:f,shivCSS:d.shivCSS!==!1,supportsUnknownElements:h,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:l,createElement:s,createDocumentFragment:u,addElements:a};t.html5=w,l(n),"object"==typeof e&&e.exports&&(e.exports=w)}("undefined"!=typeof window?window:this,document)},{}],4:[function(t,e,n){(function(t){!function(t){function e(t,e,n,r){for(var a,o=n.slice(),s=i(e,t),u=0,c=o.length;c>u&&(handler=o[u],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return a=!s.stoppedPropagation,r&&a&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var i=b(e||t,r);v(t,"textContent",n(function(){return i.get.call(this)},function(t){i.set.call(this,t)}))}function i(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function a(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!h&&k.test(document.readyState)&&(h=!h,document.detachEvent(f,u),t=document.createEvent("Event"),t.initEvent(d,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var p=!0,h=!1,f="onreadystatechange",d="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var r in n)if(y.call(n,r))try{v(e,r,n[r])}catch(i){t.console&&console.log(r+" failed on object:",e,i.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=t.Element.prototype,x=t.Text.prototype,_=/^[a-z]+$/,k=/loaded|complete/,E={},T=document.createElement("div"),C=document.documentElement,O=C.removeAttribute,S=C.setAttribute;r(t.HTMLCommentElement.prototype,w,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(x,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(w,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){var i,o,u=this,c="on"+t,p=u[m]||v(u,m,{value:{}})[m],h=p[c]||(p[c]={}),f=h.h||(h.h=[]);if(!y.call(h,"w")){if(h.w=function(t){return t[m]||e(u,l(u,t),f,!1)},!y.call(E,c))if(_.test(t)){try{i=document.createEventObject(),i[m]=!0,9!=u.nodeType&&null==u.parentNode&&T.appendChild(u),(o=u.getAttribute(c))&&O.call(u,c),u.fireEvent(c,i),E[c]=!0}catch(i){for(E[c]=!1;T.hasChildNodes();)T.removeChild(T.firstChild)}null!=o&&S.call(u,c,o)}else E[c]=!1;(h.n=E[c])&&u.attachEvent(c,h.w)}a(f,n)<0&&f[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}},dispatchEvent:{value:function(t){var n,r=this,i="on"+t.type,a=r[m],o=a&&a[i],s=!!o;return t.target||(t.target=r),s?o.n?r.fireEvent(i,t):e(r,t,o.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m],s=o&&o[i],u=s&&s.h,c=u?a(u,e):-1;c>-1&&u.splice(c,1)}}}),g(x,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m]||v(r,m,{value:{}})[m],s=o[i]||(o[i]={}),u=s.h||(s.h=[]);a(u,e)<0&&(r[i]||(r[i]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,i=n[m],a=i&&i[r],o=!!a;return o&&(a.n?n.fireEvent(r,t):e(n,t,a.h,!0))}},removeEventListener:{value:w.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){ -return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var i=this;w.addEventListener.call(i,e,n,r),p&&e===d&&!k.test(i.readyState)&&(p=!1,i.attachEvent(f,u),t==top&&!function a(t){try{i.documentElement.doScroll("left"),u()}catch(e){setTimeout(a,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,i=/\-([a-z])/g,a=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,c=u.style,l=u.currentStyle,p=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(i,a),e=l?l[t]:c[t],n.test(e)&&!r.test(t)&&(o=c.left,s=p&&p.left,s&&(p.left=l.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=o,s&&(p.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,i){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,l(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),a(o,r)<0&&o[i?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var i="on"+e,o=(t[i]||Object)[m],s=o?a(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var i,a;a=n.shift();)for(i in a)So.call(a,i)&&(t[i]=a[i]);return t}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function a(t){return"[object Array]"===Ao.call(t)}function o(t){return Po.test(Ao.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){return t&&"[object Object]"===Ao.call(t)}function l(t,e){return t.replace(/%s/g,function(){return e.shift()})}function p(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];throw t=l(t,n),Error(t)}function h(){Av.DEBUG&&To.apply(null,arguments)}function f(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),Co(t,n)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),No[t]||(No[t]=!0,Co(t,n))}function m(){Av.DEBUG&&f.apply(null,arguments)}function v(){Av.DEBUG&&d.apply(null,arguments)}function g(t,e,n){var r=b(t,e,n);return r?r[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function w(t){var e,n,r,i,a,o;for(e=t.split("."),(n=Bo[e.length])||(n=x(e.length)),a=[],r=function(t,n){return t?"*":e[n]},i=n.length;i--;)o=n[i].map(r).join("."),a.hasOwnProperty(o)||(a.push(o),a[o]=!0);return a}function x(t){var e,n,r,i,a,o,s,u,c="";if(!Bo[t]){for(r=[];c.length=a;a+=1){for(n=a.toString(2);n.lengtho;o++)u.push(i(n[o]));r[a]=u}Bo[t]=r}return Bo[t]}function _(t,e,n,r){var i=t[e];if(!i||!i.equalsOrStartsWith(r)&&i.equalsOrStartsWith(n))return t[e]=i?i.replace(n,r):r,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function E(t){return null==t?t:(Ho.hasOwnProperty(t)||(Ho[t]=new Wo(t)),Ho[t])}function T(t,e){function n(e,n){var r,i,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(r=t.viewmodel.wrapped[n.str],i=r?r.get():t.viewmodel.get(n),o=i?Object.keys(i):null),o&&o.forEach(function(t){"_ractive"===t&&a(i)||e.push(n.join(t))}),e}var r,i,o;for(r=e.str.split("."),o=[Go];i=r.shift();)"*"===i?o=o.reduce(n,[]):o[0]===Go?o[0]=E(i):o=o.map(C(i));return o}function C(t){return function(e){return e.join(t)}}function O(t){return t?t.replace(qo,".$1"):""}function S(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var r=void 0,i=void 0;if(/\*/.test(e))return i={},T(t,E(O(e))).forEach(function(e){var r=t.viewmodel.get(e);if(!u(r))throw Error(Qo);i[e.str]=r+n}),t.set(i);if(r=t.get(e),!u(r))throw Error(Qo);return t.set(e,+r+n)}function A(t,e){return Ko(this,t,void 0===e?1:+e)}function P(t){this.event=t,this.method="on"+t,this.deprecate=ts[t]}function j(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function N(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]==e)return!0;return!1}function F(t,e){var n;if(!a(t)||!a(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function M(t){return"string"==typeof t?[t]:void 0===t?[]:t}function R(t){return t[t.length-1]}function L(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function I(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function D(t){setTimeout(t,0)}function U(t,e){return function(){for(var n;n=t.shift();)n(e)}}function V(t,e,n,r){var i;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof es)e.then(n,r);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{i=e.then}catch(a){return void r(a)}if("function"==typeof i){var o,s,u;s=function(e){o||(o=!0,V(t,e,n,r))},u=function(t){o||(o=!0,r(t))};try{i.call(e,s,u)}catch(a){if(!o)return r(a),void(o=!0)}}else n(e)}}function B(t,e,n){var r;return e=O(e),"~/"===e.substr(0,2)?(r=E(e.substring(2)),H(t,r.firstKey,n)):"."===e[0]?(r=q(ss(n),e),r&&H(t,r.firstKey,n)):r=z(t,E(e),n),r}function q(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return E(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),E(n.join("."))}return E(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function z(t,e,n,r){var i,a,o,s,u;if(e.isRoot)return e;for(a=e.firstKey;n;)if(i=n.context,n=n.parent,i&&(s=!0,o=t.viewmodel.get(i),o&&("object"==typeof o||"function"==typeof o)&&a in o))return i.join(e.str);return W(t.viewmodel,a)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,a=E(a),u=z(t.parent,a,n,!0))?(t.viewmodel.map(a,{origin:t.parent.viewmodel,keypath:u}),e):r||s?void 0:(t.viewmodel.set(e,void 0),e)}function H(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=E(e),(n=z(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function $(t){t.teardown()}function G(t){t.unbind()}function K(t){t.unrender()}function Q(t){t.cancel()}function Y(t){t.detach()}function J(t){t.detachNodes()}function Z(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function X(){for(var t,e,n;ls.ractives.length;)e=ls.ractives.pop(),n=e.viewmodel.applyChanges(),n&&ds.fire(e,n);for(tt(),t=0;t=0;a--)i=t._subs[e[a]],i&&(s=gt(t,i,n,r)&&s);if(Vs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=E(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,r)}}function gt(t,e,n,r){var i=null,a=!1;n&&!n._noArg&&(r=[n].concat(r)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,r)===!1&&(a=!0);return n&&!n._noArg&&a&&(i=n.original)&&(i.preventDefault&&i.preventDefault(),i.stopPropagation&&i.stopPropagation()),!a}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};Bs(this,t,e)}function yt(t){var e;return t=E(O(t)),e=this.viewmodel.get(t,Hs),void 0===e&&this.parent&&!this.isolated&&us(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function wt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function _t(t,e,n){var r,i;return t=E(O(t)),r=this.viewmodel.get(t),a(r)&&a(e)?(i=ms.start(this,!0),this.viewmodel.merge(t,r,e,n),ms.end(),i):this.set(t,e,n&&n.complete)}function kt(t,e){var n,r;return n=T(t,e),r={},n.forEach(function(e){r[e.str]=t.get(e.str)}),r}function Et(t,e,n,r){var i,a,o;e=E(O(e)),r=r||su,e.isPattern?(i=new au(t,e,n,r),t.viewmodel.patternObservers.push(i),a=!0):i=new Ys(t,e,n,r),i.init(r.init),t.viewmodel.register(e,i,a?"patternObservers":"observers"),i.ready=!0;var s={cancel:function(){var n;o||(a?(n=t.viewmodel.patternObservers.indexOf(i),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,i,"patternObservers")):t.viewmodel.unregister(e,i,"observers"),o=!0)}};return t._observers.push(s),s}function Tt(t,e,n){var r,i,a,o;if(c(t)){n=e,i=t,r=[];for(t in i)i.hasOwnProperty(t)&&(e=i[t],r.push(this.observe(t,e,n)));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",ou(this,t,e,n);if(a=t.split(" "),1===a.length)return ou(this,t,e,n);for(r=[],o=a.length;o--;)t=a[o],t&&r.push(ou(this,t,e,n));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}function Ct(t,e,n){var r=this.observe(t,function(){e.apply(this,arguments),r.cancel()},{init:!1,defer:n&&n.defer});return r}function Ot(t,e){var n,r=this;if(t)n=t.split(" ").map(lu).filter(pu),n.forEach(function(t){var n,i;(n=r._subs[t])&&(e?(i=n.indexOf(e),-1!==i&&n.splice(i,1)):r._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function St(t,e){var n,r,i,a=this;if("object"==typeof t){n=[];for(r in t)t.hasOwnProperty(r)&&n.push(this.on(r,t[r]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return i=t.split(" ").map(lu).filter(pu),i.forEach(function(t){(a._subs[t]||(a._subs[t]=[])).push(e)}),{cancel:function(){return a.off(t,e)}}}function At(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Pt(t,e,n){var r,i,a,o,s,u,c=[];if(r=jt(t,e,n),!r)return null;for(i=t.length,s=r.length-2-r[1],a=Math.min(i,r[0]),o=a+r[1],u=0;a>u;u+=1)c.push(u);for(;o>u;u+=1)c.push(-1);for(;i>u;u+=1)c.push(u+s);return 0!==s?c.touchedFrom=r[0]:c.touchedFrom=t.length,c}function jt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Nt(e,n){var r,i,a,o=this;if(a=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),r=ms.start(this,!0),ms.scheduleTask(function(){return Su.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Ft(s),e.innerHTML=""}return this.cssId&&Cu.apply(),e&&((i=e.__ractive_instances__)?i.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),ms.end(),this.transitionsEnabled=a,r.then(function(){return Au.fire(o)})}function Ft(t){t.splice(0,t.length).forEach($)}function Mt(t,e){for(var n=t.slice(),r=e.length;r--;)~n.indexOf(e[r])||n.push(e[r]);return n}function Rt(t,e){var n,r,i;return r='[data-ractive-css~="{'+e+'}"]',i=function(t){var e,n,i,a,o,s,u,c=[];for(e=[];n=Ru.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(a=e.map(It),u=e.length;u--;)s=a.slice(),i=e[u],s[u]=i.base+r+i.modifiers||"",o=a.slice(),o[u]=r+" "+o[u],c.push(s.join(" "),o.join(" "));return c.join(", ")},n=Iu.test(t)?t.replace(Iu,r):t.replace(Mu,"").replace(Fu,function(t,e){var n,r;return Lu.test(e)?t:(n=e.split(",").map(Lt),r=n.map(i).join(", ")+" ",t.replace(e,r))})}function Lt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function It(t){return t.str}function Dt(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?p("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Ut(t,e){Dt(e);var n="function"==typeof t,r="function"==typeof e;return e||n||(e={}),n||r?function(){var i=r?Vt(e,this):e,a=n?Vt(t,this):t;return Bt(i,a)}:Bt(e,t)}function Vt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&p("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Bt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function qt(t){var e=wo(Wu);return e.parse=function(e,n){return zt(e,n||t)},e}function zt(t,e){if(!zu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return zu(t,e||this.options)}function Ht(t,e){var n;if(!Za){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a - -
    -
    - {{yield}} -
    diff --git a/tgui/scripts/components/button.ract b/tgui/scripts/components/button.ract deleted file mode 100644 index 739cf15f743..00000000000 --- a/tgui/scripts/components/button.ract +++ /dev/null @@ -1,36 +0,0 @@ - - - - {{#if icon}} - - {{/if}} - {{yield}} - diff --git a/tgui/scripts/components/resize.ract b/tgui/scripts/components/resize.ract deleted file mode 100644 index 3f847a9aa73..00000000000 --- a/tgui/scripts/components/resize.ract +++ /dev/null @@ -1,23 +0,0 @@ - - -{{#if config.fancy}} -
    -{{/if}} diff --git a/tgui/scripts/components/titlebar.ract b/tgui/scripts/components/titlebar.ract deleted file mode 100644 index f4cc29dc0fe..00000000000 --- a/tgui/scripts/components/titlebar.ract +++ /dev/null @@ -1,42 +0,0 @@ - - -
    - - {{yield}} - {{#if config.fancy}} - - - {{/if}} -
    diff --git a/tgui/scripts/constants.coffee b/tgui/scripts/constants.coffee deleted file mode 100644 index 1457071dabe..00000000000 --- a/tgui/scripts/constants.coffee +++ /dev/null @@ -1,6 +0,0 @@ -# Constants used in tgui; these are mirrored from the BYOND code. -module.exports = - UI_INTERACTIVE: 2 - UI_UPDATE: 1 - UI_DISABLED: 0 - UI_CLOSE: -1 diff --git a/tgui/scripts/interfaces/air_alarm/back.ract b/tgui/scripts/interfaces/air_alarm/back.ract deleted file mode 100644 index 8528495fc2f..00000000000 --- a/tgui/scripts/interfaces/air_alarm/back.ract +++ /dev/null @@ -1 +0,0 @@ -Back diff --git a/tgui/scripts/interfaces/air_alarm/controls.ract b/tgui/scripts/interfaces/air_alarm/controls.ract deleted file mode 100644 index 530317a0c77..00000000000 --- a/tgui/scripts/interfaces/air_alarm/controls.ract +++ /dev/null @@ -1,23 +0,0 @@ - - - Area Atmosphere Alarm - - - Panic Siphon - -
    - - Vent Controls - - - Scrubber Controls - - - Operating Mode - - - Alarm Thresholds - -
    diff --git a/tgui/scripts/interfaces/air_alarm/modes.ract b/tgui/scripts/interfaces/air_alarm/modes.ract deleted file mode 100644 index c726a6d4ba2..00000000000 --- a/tgui/scripts/interfaces/air_alarm/modes.ract +++ /dev/null @@ -1,14 +0,0 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.modes}} - - {{name}} - - {{/each}} - diff --git a/tgui/scripts/interfaces/air_alarm/scrubbers.ract b/tgui/scripts/interfaces/air_alarm/scrubbers.ract deleted file mode 100644 index 1d80db754ac..00000000000 --- a/tgui/scripts/interfaces/air_alarm/scrubbers.ract +++ /dev/null @@ -1,33 +0,0 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.scrubbers}} - - - {{power ? "On" : "Off"}} - - - {{scrubbing ? "Scrubbing" : "Siphoning"}} - - - {{widenet ? "Expanded" : "Normal"}} - - - Oxygen - Nitrogen - Plasma - - - {{else}} - Error: No scrubbers connected. - {{/each}} - diff --git a/tgui/scripts/interfaces/air_alarm/status.ract b/tgui/scripts/interfaces/air_alarm/status.ract deleted file mode 100644 index c8c3412ec36..00000000000 --- a/tgui/scripts/interfaces/air_alarm/status.ract +++ /dev/null @@ -1,31 +0,0 @@ - - {{#if data.environment_data}} - {{#each data.environment_data}} - - - {{Math.fixed(value, 2)}}{{unit}} - - - {{/each}} - - - {{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}} - - - - - {{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}} - - - {{else}} - - Warning: Cannot obtain air sample for analysis. - - {{/if}} - {{#if data.emagged}} -
    - - Warning: Safety measures offline. Device may exhibit abnormal behavior. - - {{/if}} -
    diff --git a/tgui/scripts/interfaces/air_alarm/vents.ract b/tgui/scripts/interfaces/air_alarm/vents.ract deleted file mode 100644 index 8078ce72ca3..00000000000 --- a/tgui/scripts/interfaces/air_alarm/vents.ract +++ /dev/null @@ -1,32 +0,0 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.vents}} - - - {{power ? "On" : "Off"}} - - - {{direction == "release" ? "Pressurizing" : "Siphoning"}} - - - Internal - External - - - {{Math.fixed(external)}} - Reset - - - {{else}} - Error: No vents connected. - {{/each}} - diff --git a/tgui/scripts/interfaces/airlock_electronics.ract b/tgui/scripts/interfaces/airlock_electronics.ract deleted file mode 100644 index b54b963be19..00000000000 --- a/tgui/scripts/interfaces/airlock_electronics.ract +++ /dev/null @@ -1,35 +0,0 @@ - - - {{data.oneAccess ? "One" : "All"}} Required - Clear - -
    - - - {{#each data.regions}} - - {{/each}} - - - {{#each data.regions}} - - {{/each}} - -
    {{name}}
    {{#each accesses}} - {{name}} -
    - {{/each}}
    -
    - - diff --git a/tgui/scripts/interfaces/apc.ract b/tgui/scripts/interfaces/apc.ract deleted file mode 100644 index 7590def3aaf..00000000000 --- a/tgui/scripts/interfaces/apc.ract +++ /dev/null @@ -1,110 +0,0 @@ - - - - {{#if data.siliconUser}} - - {{data.locked ? "Engaged" : "Disengaged"}} - - {{else}} - Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. - {{/if}} - - - - {{#if data.locked && !data.siliconUser}} - {{data.isOperating ? "On" : "Off"}} - {{else}} - {{data.isOperating ? "On" : "Off"}} - {{/if}} - - - {{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}} - - - {{#if data.powerCellStatus != null}} - {{Math.fixed(adata.powerCellStatus)}}% - {{else}} - Power cell removed. - {{/if}} - - {{#if data.powerCellStatus != null}} - - {{#if data.locked && !data.siliconUser}} - {{data.chargeMode ? "Auto" : "Off"}} - {{else}} - {{data.chargeMode ? "Auto" : "Off"}} - {{/if}} -   - [{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}] - - {{/if}} - - - {{#each adata.powerChannels}} - -
    {{Math.round(powerLoad)}} W
    -
    {{status >= 2 ? "On" : "Off"}}
    -
    [{{status == 1 || status == 3 ? "Auto" : "Manual"}}]
    -
    - {{#if !data.locked || data.siliconUser}} - Auto - On - Off - {{/if}} -
    -
    - {{/each}} - - {{Math.round(adata.totalLoad)}} W - -
    -{{#if data.siliconUser}} - - Overload - {{#if data.malfStatus}} - {{malfButton}} - {{/if}} - -{{/if}} - - - {{#if data.locked && !data.siliconUser}} - {{data.coverLocked ? "Engaged" : "Disengaged"}} - {{else}} - {{data.coverLocked ? "Engaged" : "Disengaged"}} - {{/if}} - - diff --git a/tgui/scripts/interfaces/atmos_filter.ract b/tgui/scripts/interfaces/atmos_filter.ract deleted file mode 100644 index 7f9601356b7..00000000000 --- a/tgui/scripts/interfaces/atmos_filter.ract +++ /dev/null @@ -1,25 +0,0 @@ - - - {{data.on ? "On" : "Off"}} - - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - - Nothing - Plasma - O2 - N2 - CO2 - N2O - - diff --git a/tgui/scripts/interfaces/atmos_mixer.ract b/tgui/scripts/interfaces/atmos_mixer.ract deleted file mode 100644 index f68516770b1..00000000000 --- a/tgui/scripts/interfaces/atmos_mixer.ract +++ /dev/null @@ -1,33 +0,0 @@ - - - {{data.on ? "On" : "Off"}} - - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - - - - - - {{Math.round(adata.node1_concentration)}}% - - - - - - - {{Math.round(adata.node2_concentration)}}% - - diff --git a/tgui/scripts/interfaces/atmos_pump.ract b/tgui/scripts/interfaces/atmos_pump.ract deleted file mode 100644 index 2cb3053a38c..00000000000 --- a/tgui/scripts/interfaces/atmos_pump.ract +++ /dev/null @@ -1,19 +0,0 @@ - - - {{data.on ? "On" : "Off"}} - - {{#if data.max_rate}} - - Set - Max - {{Math.round(adata.transfer_rate)}} L/s - - {{else}} - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - {{/if}} - diff --git a/tgui/scripts/interfaces/canister.ract b/tgui/scripts/interfaces/canister.ract deleted file mode 100644 index 831d4ee6152..00000000000 --- a/tgui/scripts/interfaces/canister.ract +++ /dev/null @@ -1,53 +0,0 @@ - - The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank. - - - {{#partial button}} - Relabel - {{/partial}} - - {{Math.round(adata.tankPressure)}} kPa - - - {{data.portConnected ? "Connected" : "Not Connected"}} - - - - - {{Math.round(adata.releasePressure)}} kPa - - - Reset - Min - Set - Max - - - {{data.valveOpen ? "Open" : "Closed"}} - - - - {{#partial button}} - {{#if data.hasHoldingTank}} - Eject - {{/if}} - {{/partial}} - {{#if data.hasHoldingTank}} - - {{data.holdingTank.name}} - - - {{Math.round(adata.holdingTank.tankPressure)}} kPa - - {{else}} - - No Holding Tank - - {{/if}} - diff --git a/tgui/scripts/interfaces/chem_dispenser.ract b/tgui/scripts/interfaces/chem_dispenser.ract deleted file mode 100644 index 1a610b4769c..00000000000 --- a/tgui/scripts/interfaces/chem_dispenser.ract +++ /dev/null @@ -1,44 +0,0 @@ - - - {{Math.fixed(adata.energy)}} Units - - {{#if data.beakerTransferAmounts}} - - {{#each data.beakerTransferAmounts}} - {{.}} - {{/each}} - - {{/if}} - - - - {{#each data.chemicals}} - {{title}} - {{/each}} - - - - {{#partial button}} - Eject - {{/partial}} - {{#if data.beakerTransferAmounts}} - - {{#each data.beakerTransferAmounts}} - {{.}} - {{/each}} - - {{/if}} - - {{#if data.isBeakerLoaded}} - {{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units -
    - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    diff --git a/tgui/scripts/interfaces/chem_heater.ract b/tgui/scripts/interfaces/chem_heater.ract deleted file mode 100644 index 1f704af036e..00000000000 --- a/tgui/scripts/interfaces/chem_heater.ract +++ /dev/null @@ -1,29 +0,0 @@ - - - {{data.isActive ? "On" : "Off"}} - - - {{Math.round(adata.targetTemp)}} K - - - - {{#partial button}} - Eject - {{/partial}} - - {{#if data.isBeakerLoaded}} - Temperature: {{Math.round(adata.currentTemp)}} K -
    - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    diff --git a/tgui/scripts/interfaces/cryo.ract b/tgui/scripts/interfaces/cryo.ract deleted file mode 100644 index babf4ea4d44..00000000000 --- a/tgui/scripts/interfaces/cryo.ract +++ /dev/null @@ -1,68 +0,0 @@ - - - - - {{data.occupant.name ? data.occupant.name : "No Occupant"}} - - {{#if data.hasOccupant}} - - {{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}} - - - {{Math.round(adata.occupant.bodyTemperature)}} K - - - {{Math.round(adata.occupant.health)}} - - {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}} - - {{Math.round(adata.occupant[type])}} - - {{/each}} - {{/if}} - - - - {{data.isOperating ? "On" : "Off"}} - - - {{Math.round(adata.cellTemperature)}} K - - - {{data.isOpen ? "Open" : "Closed"}} - {{data.autoEject ? "Auto" : "Manual"}} - - - - {{#partial button}} - Eject - {{/partial}} - - {{#if data.isBeakerLoaded}} - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    diff --git a/tgui/scripts/interfaces/smes.ract b/tgui/scripts/interfaces/smes.ract deleted file mode 100644 index b7d48589ae9..00000000000 --- a/tgui/scripts/interfaces/smes.ract +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {{Math.fixed(adata.capacityPercent)}}% - - - - - {{data.inputAttempt ? "Auto" : "Off"}} -   - [{{data.capacityPercent >= 100 ? "Fully Charged" : data.inputting ? "Charging" : "Not Charging"}}] - - - {{Math.round(adata.inputLevel)}}W - - - - - Set - - - - - {{Math.round(adata.inputAvailable)}}W - - - - - {{data.outputAttempt ? "On" : "Off"}} -   - [{{data.outputting ? "Sending" : data.charge > 0 ? "Not Sending" : "No Charge"}}] - - - {{Math.round(adata.outputLevel)}}W - - - - - Set - - - - - {{Math.round(adata.outputUsed)}}W - - diff --git a/tgui/scripts/interfaces/solar_control.ract b/tgui/scripts/interfaces/solar_control.ract deleted file mode 100644 index 852cc0474fb..00000000000 --- a/tgui/scripts/interfaces/solar_control.ract +++ /dev/null @@ -1,46 +0,0 @@ - - - {{Math.round(adata.generated)}}W - - - {{Math.round(adata.angle)}}° ({{data.direction}}) - - - 15° - - - 15° - - - - - Off - Timed - Auto - - - {{Math.round(adata.tracking_rate)}}°/h ({{data.rotating_way}}) - - - 180° - 30° - - - 30° - 180° - - - - {{#partial button}} - Refresh - {{/partial}} - - {{data.connected_tracker ? "" : "Not "}}Found - - - {{Math.round(adata.connected_panels)}} Panels Connected - - diff --git a/tgui/scripts/interfaces/space_heater.ract b/tgui/scripts/interfaces/space_heater.ract deleted file mode 100644 index b96a56b1ef0..00000000000 --- a/tgui/scripts/interfaces/space_heater.ract +++ /dev/null @@ -1,51 +0,0 @@ - - - - {{#partial button}} - {{#if data.open}} - Eject - {{/if}} - {{/partial}} - - {{data.on ? "On" : "Off"}} - - - {{#if data.hasPowercell}} - {{Math.fixed(adata.powerLevel)}}% - {{else}} - No Cell - {{/if}} - - - - - {{Math.round(adata.currentTemp)}}°C - - - {{Math.round(adata.targetTemp)}}°C - - {{#if data.open}} - - - - Set - - - - {{/if}} - - {{#if data.open}} - Heat - Cool - Auto - {{else}} - {{text.titleCase(data.mode)}} - {{/if}} - - diff --git a/tgui/scripts/interfaces/tanks.ract b/tgui/scripts/interfaces/tanks.ract deleted file mode 100644 index 87b6b1b3030..00000000000 --- a/tgui/scripts/interfaces/tanks.ract +++ /dev/null @@ -1,36 +0,0 @@ - - - - The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a mask. - - - - {{Math.round(adata.tankPressure)}} kPa - - - {{Math.round(adata.releasePressure)}} kPa - - - Reset - Min - Set - Max - - - {{data.valveOpen ? "Open" : "Closed"}} - - diff --git a/tgui/scripts/main.coffee b/tgui/scripts/main.coffee deleted file mode 100644 index 9274c34c689..00000000000 --- a/tgui/scripts/main.coffee +++ /dev/null @@ -1,31 +0,0 @@ -require "ie8" -require "dom4" -require "es5-shim" -require "html5shiv" -require "./math" - - -Ractive = require "ractive" -# Set Ractive debug mode based on if we're minified or not. -Ractive.DEBUG = /minified/.test (minified) -> - -WebFont = require "webfontloader" -# Load FontAwesome asynchronously from CDNJS. -WebFont.load - custom: - families: ["FontAwesome"] - urls: ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"] - -tgui = require "./tgui" -# Create the UI; this is just a Ractive component. -window.tgui = new tgui - el: "#container" - data: -> - data = JSON.parse document.getElementById("data").textContent # Load initial data from the server. - alert "Initial data did not load correctly." if not data? or not (data.data? and data.config?) - data.adata = data.data # Spoof animated data as this is the first load. - data - onrender: -> - @observe "config.style", (newkey, oldkey, keypath) -> # Change body style to match config. - document.body.classList.remove oldkey if oldkey? - document.body.classList.add newkey if newkey? diff --git a/tgui/scripts/math.coffee b/tgui/scripts/math.coffee deleted file mode 100644 index 7bb7000110c..00000000000 --- a/tgui/scripts/math.coffee +++ /dev/null @@ -1,9 +0,0 @@ -# Extensions to the built-in 'Math' object. - -# Helper to limit a number to be inside 'min' and 'max'. -Math.clamp = (number, min, max) -> - Math.max min, Math.min number, max - -# Helper to round a number to 'decimals' decimals. -Math.fixed = (number, decimals = 1) -> - Number Math.round(number + "e" + decimals) + "e-" + decimals diff --git a/tgui/scripts/text.coffee b/tgui/scripts/text.coffee deleted file mode 100644 index cb41507316f..00000000000 --- a/tgui/scripts/text.coffee +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = - upperCaseFirst: (str) -> - str[0].toUpperCase() + str[1..].toLowerCase() - titleCase: (str) -> - str.replace /\w\S*/g, @upperCaseFirst diff --git a/tgui/scripts/tgui.ract b/tgui/scripts/tgui.ract deleted file mode 100644 index 2d8d265188a..00000000000 --- a/tgui/scripts/tgui.ract +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -{{{config.title}}} -
    - -
    - diff --git a/tgui/src/.babelrc b/tgui/src/.babelrc new file mode 100644 index 00000000000..f51992c9361 --- /dev/null +++ b/tgui/src/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": [ + "es2015-loose" + ], + "plugins": [ + "external-helpers" + ] +} diff --git a/tgui/src/components/bar.ract b/tgui/src/components/bar.ract new file mode 100644 index 00000000000..f4d18125efb --- /dev/null +++ b/tgui/src/components/bar.ract @@ -0,0 +1,16 @@ + + +
    +
    + {{yield}} +
    diff --git a/tgui/styles/components/bar.styl b/tgui/src/components/bar.styl similarity index 51% rename from tgui/styles/components/bar.styl rename to tgui/src/components/bar.styl index c55738dac5c..e34c8fdb2af 100644 --- a/tgui/styles/components/bar.styl +++ b/tgui/src/components/bar.styl @@ -7,8 +7,8 @@ line-height: 17px padding: 1px - border: 1px solid colors.normal - background: colors.dark + border: 1px solid bar-color-border + background: bar-color-background .barText @extend $fontReset @@ -21,8 +21,10 @@ height: 100% transition: background-color 1s - background-color: colors.normal - &.good { background-color: colors.good } - &.average { background-color: colors.average } - &.bad { background-color: colors.bad } - &.highlight { background-color: colors.highlight } + background-color: bar-color-normal + &.good + background-color: bar-color-good + &.average + background-color: bar-color-average + &.bad + background-color: bar-color-bad diff --git a/tgui/src/components/button.ract b/tgui/src/components/button.ract new file mode 100644 index 00000000000..b2ce8d537cd --- /dev/null +++ b/tgui/src/components/button.ract @@ -0,0 +1,50 @@ + + + + {{#if icon}} + + {{/if}} + {{yield}} + diff --git a/tgui/src/components/button.styl b/tgui/src/components/button.styl new file mode 100644 index 00000000000..27c0521cc71 --- /dev/null +++ b/tgui/src/components/button.styl @@ -0,0 +1,32 @@ +buttoncolor(selector, color) + &.{selector} + transition: background-color 0.5s + background-color: color + &.{selector}.active:hover, + &.{selector}.active:focus + transition: background-color 0.25s + background-color: lighten(color, button-lighten-hover) + outline: 0 + + +span.button + @extend $fontReset + display: inline-block + vertical-align: middle + height: 20px + line-height: 19px + padding: 0 5px + white-space: nowrap + + .fa + padding-right: 2px + + buttoncolor(normal, button-color-normal) + buttoncolor(disabled, button-color-disabled) + buttoncolor(selected, button-color-selected) + buttoncolor(caution, button-color-caution) + buttoncolor(danger, button-color-danger) + + &.gridable + width: 125px + margin: 2px 0 diff --git a/tgui/scripts/components/display.ract b/tgui/src/components/display.ract similarity index 61% rename from tgui/scripts/components/display.ract rename to tgui/src/components/display.ract index cdb1fb3c070..2b37a0235db 100644 --- a/tgui/scripts/components/display.ract +++ b/tgui/src/components/display.ract @@ -1,11 +1,13 @@ -
    - {{#if title}} -
    -

    {{title}}

    - {{#if button}}{{yield button}}{{/if}} -
    - {{/if}} -
    - {{yield}} -
    -
    +
    + {{#if title}} +
    +

    {{title}}

    + {{#if button}} +
    {{yield button}}
    + {{/if}} +
    + {{/if}} +
    + {{yield}} +
    +
    diff --git a/tgui/styles/components/display.styl b/tgui/src/components/display.styl similarity index 57% rename from tgui/styles/components/display.styl rename to tgui/src/components/display.styl index 1201c07e62c..5c3fb1d4da5 100644 --- a/tgui/styles/components/display.styl +++ b/tgui/src/components/display.styl @@ -1,26 +1,28 @@ -div.display - width: 100% - padding: 4px - margin: 6px 0 - - background-color: alpha(#000, 0.33) // Transparent background. - box-shadow: inset 0 0 5px alpha(#000, 0.5) - - header - display: block - position: relative - width: 100% - padding: 0 4px - margin-bottom: 6px - - border-bottom: 2px solid colors.rule - - .button - position: absolute - bottom: 6px - right: 4px - - article - display: table - width: 100% - border-spacing: 4px 6px +div.display + width: 100% + padding: 4px + margin: 6px 0 + + background-color: display-color-background // Transparent background. + box-shadow: inset 0 0 5px display-color-shadow + + header + display: block + position: relative + width: 100% + padding: 0 4px + margin-bottom: 6px + + color: display-color-title + + border-bottom: rule-size solid rule-color-normal + + .buttonRight + position: absolute + bottom: 6px + right: 4px + + article + display: table + width: 100% + border-spacing: 4px 6px diff --git a/tgui/scripts/components/notice.ract b/tgui/src/components/notice.ract similarity index 93% rename from tgui/scripts/components/notice.ract rename to tgui/src/components/notice.ract index f6c063596d8..c23c27b1222 100644 --- a/tgui/scripts/components/notice.ract +++ b/tgui/src/components/notice.ract @@ -1,3 +1,3 @@ -
    - {{yield}} -
    +
    + {{yield}} +
    diff --git a/tgui/src/components/notice.styl b/tgui/src/components/notice.styl new file mode 100644 index 00000000000..829d4c59112 --- /dev/null +++ b/tgui/src/components/notice.styl @@ -0,0 +1,27 @@ +div.notice + margin: 8px 0 + padding: 4px + + box-shadow: none + + color: text-color-inverse + font-weight: bold + font-style: italic + + background-color: notice-color-first + background-image: repeating-linear-gradient( + -45deg, + notice-color-first, + notice-color-first 10px, + notice-color-second 10px, + notice-color-second 20px + ) + + .button + outline: 1px solid notice-color-border + + .label + color: text-color-inverse + + hr + background-color: rule-color-dark diff --git a/tgui/src/components/resize.ract b/tgui/src/components/resize.ract new file mode 100644 index 00000000000..50f6ac5e39d --- /dev/null +++ b/tgui/src/components/resize.ract @@ -0,0 +1,15 @@ + + +{{#if config.fancy}} +
    +{{/if}} diff --git a/tgui/styles/components/resize.styl b/tgui/src/components/resize.styl similarity index 67% rename from tgui/styles/components/resize.styl rename to tgui/src/components/resize.styl index 74cc43c0a0a..f5f5fe37aac 100644 --- a/tgui/styles/components/resize.styl +++ b/tgui/src/components/resize.styl @@ -1,12 +1,12 @@ -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 colors.resize transparent - - transform: rotate(360deg) +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 resize-color transparent + + transform: rotate(360deg) diff --git a/tgui/scripts/components/section.ract b/tgui/src/components/section.ract similarity index 94% rename from tgui/scripts/components/section.ract rename to tgui/src/components/section.ract index bcdd3e0e6e8..124da4b8865 100644 --- a/tgui/scripts/components/section.ract +++ b/tgui/src/components/section.ract @@ -1,14 +1,14 @@ -
    - {{#if label}} - {{label}}: - {{#if nowrap}} - {{yield}} - {{else}} -
    - {{yield}} -
    - {{/if}} - {{else}} - {{yield}} - {{/if}} -
    +
    + {{#if label}} + {{label}}: + {{#if nowrap}} + {{yield}} + {{else}} +
    + {{yield}} +
    + {{/if}} + {{else}} + {{yield}} + {{/if}} +
    diff --git a/tgui/styles/components/section.styl b/tgui/src/components/section.styl similarity index 82% rename from tgui/styles/components/section.styl rename to tgui/src/components/section.styl index 0ba06f8cc56..e122d48110f 100644 --- a/tgui/styles/components/section.styl +++ b/tgui/src/components/section.styl @@ -1,33 +1,33 @@ -$cell - display: table-cell - margin: 0 - text-align: left - vertical-align: middle - -section - display: table-row - width: 100% - padding: 3px 0 - - &:not(first-child) - padding-top: 4px - - .label - @extend $cell - width: 1% - padding-right: 32px - white-space: nowrap - - color: colors.label - - .content - @extend $cell - &:not(:last-child) - padding-right: 16px - - .line - @extend $cell - width: 100% - - .buttoninfo - margin-left: 5px +/$cell + display: table-cell + margin: 0 + text-align: left + vertical-align: middle + +section + display: table-row + width: 100% + padding: 3px 0 + + &:not(:first-child) + padding-top: 4px + + .label + @extend $cell + width: 1% + padding-right: 32px + white-space: nowrap + + color: section-color-label + + .content + @extend $cell + &:not(:last-child) + padding-right: 16px + + .line + @extend $cell + width: 100% + + .buttoninfo + margin-left: 5px diff --git a/tgui/scripts/components/subdisplay.ract b/tgui/src/components/subdisplay.ract similarity index 94% rename from tgui/scripts/components/subdisplay.ract rename to tgui/src/components/subdisplay.ract index 108cdc933b3..8d6cd641f95 100644 --- a/tgui/scripts/components/subdisplay.ract +++ b/tgui/src/components/subdisplay.ract @@ -1,11 +1,11 @@ -
    - {{#if title}} -
    -

    {{title}}

    - {{#if button}}{{yield button}}{{/if}} -
    - {{/if}} -
    - {{yield}} -
    -
    +
    + {{#if title}} +
    +

    {{title}}

    + {{#if button}}{{yield button}}{{/if}} +
    + {{/if}} +
    + {{yield}} +
    +
    diff --git a/tgui/src/components/subdisplay.styl b/tgui/src/components/subdisplay.styl new file mode 100644 index 00000000000..11420ecba7c --- /dev/null +++ b/tgui/src/components/subdisplay.styl @@ -0,0 +1,11 @@ +context = selector() + +div.subdisplay + width: 100% + margin: 0 + + header + @extend {context} div.display header + + article + @extend {context} div.display article diff --git a/tgui/src/components/titlebar.ract b/tgui/src/components/titlebar.ract new file mode 100644 index 00000000000..56690c22cb4 --- /dev/null +++ b/tgui/src/components/titlebar.ract @@ -0,0 +1,41 @@ + + +
    + + {{yield}} + {{#if config.fancy}} + + + {{/if}} +
    diff --git a/tgui/styles/components/titlebar.styl b/tgui/src/components/titlebar.styl similarity index 55% rename from tgui/styles/components/titlebar.styl rename to tgui/src/components/titlebar.styl index 685a34e80db..4867faef25d 100644 --- a/tgui/styles/components/titlebar.styl +++ b/tgui/src/components/titlebar.styl @@ -1,46 +1,57 @@ -$titleButton - display: inline-block - position: relative - padding: 7px // To make a bigger clickable area. - margin: -7px - - color: colors.title; - - &:hover - color: lighten(colors.title, colors.hover) - -header.titlebar - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 32px; - - background-color: colors.titlebar - box-shadow: 0 3px 3px alpha(#000, 0.1) - - .statusicon - position: absolute - top: 4px - left: 12px - transition: color 0.5s - - .title - position: absolute - top: 6px - left: 46px - - color: colors.title - font-size: 16px - white-space: nowrap - - .minimize - @extend $titleButton - position: absolute - top: 6px - right: 46px - .close - @extend $titleButton - position: absolute - top: 4px - right: 12px +context = selector() + +$titleButton + display: inline-block + position: relative + padding: 7px // To make a bigger clickable area. + margin: -7px + + color: titlebar-color-button; + + &:hover + color: lighten(titlebar-color-button, button-lighten-hover) + +header.titlebar + position: fixed; + z-index: 1 + top: 0; + left: 0; + width: 100%; + height: 32px; + + background-color: titlebar-color-background + box-shadow: 0 3px 3px titlebar-color-shadow + + .statusicon + position: absolute + top: 4px + left: 12px + transition: color 0.5s + + .title + position: absolute + top: 6px + left: 46px + + color: titlebar-color-text + font-size: 16px + white-space: nowrap + + .minimize + @extend {context} $titleButton + position: absolute + top: 6px + right: 46px + .close + @extend {context} $titleButton + position: absolute + top: 4px + right: 12px + +.wf-inactive + .statusicon::after + content: "O" + .minimize::after + content: "-" + .close::after + content: "X" diff --git a/tgui/src/components/warnings.ract b/tgui/src/components/warnings.ract new file mode 100644 index 00000000000..2e5695e535f --- /dev/null +++ b/tgui/src/components/warnings.ract @@ -0,0 +1,47 @@ + + + +{{#if config.fancy && ie && ie < 11}} + + You have an old (IE{{ie}}), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed.
    + To upgrade, click 'Upgrade IE' to download IE11 from Microsoft.
    + If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft.
    + Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message). +
    + No Frills + + Upgrade IE + + IE VMs + + EOL Info + Debug Info + {{#if debug}} +
    + Detected: IE{{ie}}
    + User Agent: {{userAgent}} + {{/if}} +
    +{{/if}} diff --git a/tgui/images/nanotrasen.svg b/tgui/src/images/nanotrasen.svg similarity index 97% rename from tgui/images/nanotrasen.svg rename to tgui/src/images/nanotrasen.svg index d93b01a9545..b4b09a1ac46 100644 --- a/tgui/images/nanotrasen.svg +++ b/tgui/src/images/nanotrasen.svg @@ -1,5 +1,5 @@ - + diff --git a/tgui/src/images/syndicate.svg b/tgui/src/images/syndicate.svg new file mode 100644 index 00000000000..4bae2c70cba --- /dev/null +++ b/tgui/src/images/syndicate.svg @@ -0,0 +1,9 @@ + + + + s + + diff --git a/tgui/scripts/interfaces/air_alarm.ract b/tgui/src/interfaces/air_alarm.ract similarity index 73% rename from tgui/scripts/interfaces/air_alarm.ract rename to tgui/src/interfaces/air_alarm.ract index 9139066184a..0267ad8141c 100644 --- a/tgui/scripts/interfaces/air_alarm.ract +++ b/tgui/src/interfaces/air_alarm.ract @@ -1,30 +1,30 @@ - - - - - - - - - {{#if data.siliconUser}} - - {{data.locked ? "Engaged" : "Disengaged"}} - - {{else}} - Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. - {{/if}} - - -{{#if !data.locked || data.siliconUser}} - {{#if data.screen == 1}} - - {{elseif data.screen == 2}} - - {{elseif data.screen == 3}} - - {{elseif data.screen == 4}} - - {{elseif data.screen == 5}} - - {{/if}} -{{/if}} + + + + + + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + +{{#if !data.locked || data.siliconUser}} + {{#if data.screen == 1}} + + {{elseif data.screen == 2}} + + {{elseif data.screen == 3}} + + {{elseif data.screen == 4}} + + {{elseif data.screen == 5}} + + {{/if}} +{{/if}} diff --git a/tgui/src/interfaces/air_alarm/back.ract b/tgui/src/interfaces/air_alarm/back.ract new file mode 100644 index 00000000000..a76d2a47527 --- /dev/null +++ b/tgui/src/interfaces/air_alarm/back.ract @@ -0,0 +1 @@ +Back diff --git a/tgui/src/interfaces/air_alarm/controls.ract b/tgui/src/interfaces/air_alarm/controls.ract new file mode 100644 index 00000000000..ec2541e4f1d --- /dev/null +++ b/tgui/src/interfaces/air_alarm/controls.ract @@ -0,0 +1,23 @@ + + + Area Atmosphere Alarm + + + Panic Siphon + +
    + + Vent Controls + + + Scrubber Controls + + + Operating Mode + + + Alarm Thresholds + +
    diff --git a/tgui/src/interfaces/air_alarm/modes.ract b/tgui/src/interfaces/air_alarm/modes.ract new file mode 100644 index 00000000000..4db7e6663ac --- /dev/null +++ b/tgui/src/interfaces/air_alarm/modes.ract @@ -0,0 +1,14 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.modes}} + + {{name}} + + {{/each}} + diff --git a/tgui/src/interfaces/air_alarm/scrubbers.ract b/tgui/src/interfaces/air_alarm/scrubbers.ract new file mode 100644 index 00000000000..15fc8e00592 --- /dev/null +++ b/tgui/src/interfaces/air_alarm/scrubbers.ract @@ -0,0 +1,33 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.scrubbers}} + + + {{power ? "On" : "Off"}} + + + {{scrubbing ? "Scrubbing" : "Siphoning"}} + + + {{widenet ? "Expanded" : "Normal"}} + + + CO2 + N2O + Plasma + + + {{else}} + Error: No scrubbers connected. + {{/each}} + diff --git a/tgui/src/interfaces/air_alarm/status.ract b/tgui/src/interfaces/air_alarm/status.ract new file mode 100644 index 00000000000..72e2319cc1b --- /dev/null +++ b/tgui/src/interfaces/air_alarm/status.ract @@ -0,0 +1,30 @@ + + {{#if data.environment_data}} + {{#each adata.environment_data}} + + + {{Math.fixed(value, 2)}}{{unit}} + + + {{/each}} + + + {{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}} + + + + + {{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}} + + + {{else}} + + Cannot obtain air sample for analysis. + + {{/if}} + {{#if data.emagged}} + + Safety measures offline. Device may exhibit abnormal behavior. + + {{/if}} + diff --git a/tgui/scripts/interfaces/air_alarm/thresholds.ract b/tgui/src/interfaces/air_alarm/thresholds.ract similarity index 64% rename from tgui/scripts/interfaces/air_alarm/thresholds.ract rename to tgui/src/interfaces/air_alarm/thresholds.ract index 600baa3339a..4f3841405af 100644 --- a/tgui/scripts/interfaces/air_alarm/thresholds.ract +++ b/tgui/src/interfaces/air_alarm/thresholds.ract @@ -1,30 +1,31 @@ - - - - {{#partial button}} - - {{/partial}} - - - - - - - - - - {{#each data.thresholds}} - - {{#each settings}}{{/each}} - {{/each}} - -
    min2min1max1max2
    {{{name}}} - {{Math.fixed(selected, 2)}} -
    - - - + + + + {{#partial button}} + + {{/partial}} +
    + + + + + + + + + {{#each data.thresholds}} + + {{#each settings}}{{/each}} + {{/each}} + +
    min2min1max1max2
    {{{name}}} + {{Math.fixed(selected, 2)}} +
    + + + diff --git a/tgui/src/interfaces/air_alarm/vents.ract b/tgui/src/interfaces/air_alarm/vents.ract new file mode 100644 index 00000000000..fca816a5b55 --- /dev/null +++ b/tgui/src/interfaces/air_alarm/vents.ract @@ -0,0 +1,32 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.vents}} + + + {{power ? "On" : "Off"}} + + + {{direction == "release" ? "Pressurizing" : "Siphoning"}} + + + Internal + External + + + {{Math.fixed(external)}} + Reset + + + {{else}} + Error: No vents connected. + {{/each}} + diff --git a/tgui/src/interfaces/airlock_electronics.ract b/tgui/src/interfaces/airlock_electronics.ract new file mode 100644 index 00000000000..29e1969d3a0 --- /dev/null +++ b/tgui/src/interfaces/airlock_electronics.ract @@ -0,0 +1,39 @@ + + + {{data.oneAccess ? "One" : "All"}} Required + Clear + +
    +
    + + {{#each data.regions}} + + {{/each}} + + + {{#each data.regions}} + + {{/each}} + +
    {{name}}
    {{#each accesses}} + {{name}} +
    + {{/each}}
    + + + diff --git a/tgui/src/interfaces/apc.ract b/tgui/src/interfaces/apc.ract new file mode 100644 index 00000000000..5f5c5caddc6 --- /dev/null +++ b/tgui/src/interfaces/apc.ract @@ -0,0 +1,125 @@ + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + + + {{#if data.locked && !data.siliconUser}} + {{data.isOperating ? "On" : "Off"}} + {{else}} + {{data.isOperating ? "On" : "Off"}} + {{/if}} + + + {{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}} + + + {{#if data.powerCellStatus != null}} + {{Math.fixed(adata.powerCellStatus)}}% + {{else}} + Power cell removed. + {{/if}} + + {{#if data.powerCellStatus != null}} + + {{#if data.locked && !data.siliconUser}} + {{data.chargeMode ? "Auto" : "Off"}} + {{else}} + {{data.chargeMode ? "Auto" : "Off"}} + {{/if}} +   + [{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}] + + {{/if}} + + + {{#each data.powerChannels}} + +
    {{Math.round(adata.powerChannels[@index].powerLoad)}} W
    +
    {{status >= 2 ? "On" : "Off"}}
    +
    [{{status == 1 || status == 3 ? "Auto" : "Manual"}}]
    +
    + {{#if !data.locked || data.siliconUser}} + Auto + On + Off + {{/if}} +
    +
    + {{/each}} + + {{Math.round(adata.totalLoad)}} W + +
    +{{#if data.siliconUser}} + + Overload + {{#if data.malfStatus}} + {{malfButton}} + {{/if}} + +{{/if}} + + + {{#if data.locked && !data.siliconUser}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{else}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{/if}} + + diff --git a/tgui/src/interfaces/atmos_filter.ract b/tgui/src/interfaces/atmos_filter.ract new file mode 100644 index 00000000000..d523edfc1e1 --- /dev/null +++ b/tgui/src/interfaces/atmos_filter.ract @@ -0,0 +1,25 @@ + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + Nothing + Plasma + O2 + N2 + CO2 + N2O + + diff --git a/tgui/src/interfaces/atmos_mixer.ract b/tgui/src/interfaces/atmos_mixer.ract new file mode 100644 index 00000000000..0be39763745 --- /dev/null +++ b/tgui/src/interfaces/atmos_mixer.ract @@ -0,0 +1,33 @@ + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + + + + + {{Math.round(adata.node1_concentration)}}% + + + + + + + {{Math.round(adata.node2_concentration)}}% + + diff --git a/tgui/src/interfaces/atmos_pump.ract b/tgui/src/interfaces/atmos_pump.ract new file mode 100644 index 00000000000..a8acb0d7365 --- /dev/null +++ b/tgui/src/interfaces/atmos_pump.ract @@ -0,0 +1,19 @@ + + + {{data.on ? "On" : "Off"}} + + {{#if data.max_rate}} + + Set + Max + {{Math.round(adata.transfer_rate)}} L/s + + {{else}} + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + {{/if}} + diff --git a/tgui/src/interfaces/canister.ract b/tgui/src/interfaces/canister.ract new file mode 100644 index 00000000000..fd3b11e008e --- /dev/null +++ b/tgui/src/interfaces/canister.ract @@ -0,0 +1,53 @@ + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank. + + + {{#partial button}} + Relabel + {{/partial}} + + {{Math.round(adata.tankPressure)}} kPa + + + {{data.portConnected ? "Connected" : "Not Connected"}} + + + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + + + {{#partial button}} + {{#if data.hasHoldingTank}} + Eject + {{/if}} + {{/partial}} + {{#if data.hasHoldingTank}} + + {{data.holdingTank.name}} + + + {{Math.round(adata.holdingTank.tankPressure)}} kPa + + {{else}} + + No Holding Tank + + {{/if}} + diff --git a/tgui/src/interfaces/chem_dispenser.ract b/tgui/src/interfaces/chem_dispenser.ract new file mode 100644 index 00000000000..c958a38516a --- /dev/null +++ b/tgui/src/interfaces/chem_dispenser.ract @@ -0,0 +1,38 @@ + + + {{Math.fixed(adata.energy)}} Units + + + + {{#partial button}} + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + {{/partial}} + + {{#each data.chemicals}} + {{title}} + {{/each}} + + + + {{#partial button}} + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + {{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units +
    + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/src/interfaces/chem_heater.ract b/tgui/src/interfaces/chem_heater.ract new file mode 100644 index 00000000000..010539fe009 --- /dev/null +++ b/tgui/src/interfaces/chem_heater.ract @@ -0,0 +1,29 @@ + + + {{data.isActive ? "On" : "Off"}} + + + {{Math.round(adata.targetTemp)}} K + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + Temperature: {{Math.round(adata.currentTemp)}} K +
    + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/src/interfaces/cryo.ract b/tgui/src/interfaces/cryo.ract new file mode 100644 index 00000000000..8dbaab17cc6 --- /dev/null +++ b/tgui/src/interfaces/cryo.ract @@ -0,0 +1,73 @@ + + + + + {{data.occupant.name ? data.occupant.name : "No Occupant"}} + + {{#if data.hasOccupant}} + + {{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}} + + + {{Math.round(adata.occupant.bodyTemperature)}} K + + + {{Math.round(adata.occupant.health)}} + + {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}} + + {{Math.round(adata.occupant[type])}} + + {{/each}} + {{/if}} + + + + {{data.isOperating ? "On" : "Off"}} + + + {{Math.round(adata.cellTemperature)}} K + + + {{data.isOpen ? "Open" : "Closed"}} + {{data.autoEject ? "Auto" : "Manual"}} + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/scripts/interfaces/error.ract b/tgui/src/interfaces/error.ract similarity index 77% rename from tgui/scripts/interfaces/error.ract rename to tgui/src/interfaces/error.ract index 1776e064959..23d76c2248a 100644 --- a/tgui/scripts/interfaces/error.ract +++ b/tgui/src/interfaces/error.ract @@ -1,3 +1,3 @@ - - The requested interface ({{config.interface}}) was not found. Does it exist? - + + The requested interface ({{config.interface}}) was not found. Does it exist? + diff --git a/tgui/src/interfaces/smes.ract b/tgui/src/interfaces/smes.ract new file mode 100644 index 00000000000..0417ecde213 --- /dev/null +++ b/tgui/src/interfaces/smes.ract @@ -0,0 +1,70 @@ + + + + + {{Math.fixed(adata.capacityPercent)}}% + + + + + {{data.inputAttempt ? "Auto" : "Off"}} +   + [{{data.capacityPercent >= 100 ? "Fully Charged" : data.inputting ? "Charging" : "Not Charging"}}] + + + {{Math.round(adata.inputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.inputAvailable)}}W + + + + + {{data.outputAttempt ? "On" : "Off"}} +   + [{{data.outputting ? "Sending" : data.charge > 0 ? "Not Sending" : "No Charge"}}] + + + {{Math.round(adata.outputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.outputUsed)}}W + + diff --git a/tgui/src/interfaces/solar_control.ract b/tgui/src/interfaces/solar_control.ract new file mode 100644 index 00000000000..75ae90ca123 --- /dev/null +++ b/tgui/src/interfaces/solar_control.ract @@ -0,0 +1,46 @@ + + + {{Math.round(adata.generated)}}W + + + {{Math.round(adata.angle)}}° ({{data.direction}}) + + + 15° + + + 15° + + + + + Off + Timed + Auto + + + {{Math.round(adata.tracking_rate)}}°/h ({{data.rotating_way}}) + + + 180° + 30° + + + 30° + 180° + + + + {{#partial button}} + Refresh + {{/partial}} + + {{data.connected_tracker ? "" : "Not "}}Found + + + {{Math.round(adata.connected_panels)}} Panels Connected + + diff --git a/tgui/src/interfaces/space_heater.ract b/tgui/src/interfaces/space_heater.ract new file mode 100644 index 00000000000..9982f08addd --- /dev/null +++ b/tgui/src/interfaces/space_heater.ract @@ -0,0 +1,53 @@ + + + + {{#partial button}} + {{#if data.open}} + Eject + {{/if}} + {{/partial}} + + {{data.on ? "On" : "Off"}} + + + {{#if data.hasPowercell}} + {{Math.fixed(adata.powerLevel)}}% + {{else}} + No Cell + {{/if}} + + + + + {{Math.round(adata.currentTemp)}}°C + + + {{Math.round(adata.targetTemp)}}°C + + {{#if data.open}} + + + + Set + + + + {{/if}} + + {{#if data.open}} + Heat + Cool + Auto + {{else}} + {{text.titleCase(data.mode)}} + {{/if}} + + diff --git a/tgui/src/interfaces/tanks.ract b/tgui/src/interfaces/tanks.ract new file mode 100644 index 00000000000..f4465afacb7 --- /dev/null +++ b/tgui/src/interfaces/tanks.ract @@ -0,0 +1,39 @@ + + + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a mask. + + + + {{Math.round(adata.tankPressure)}} kPa + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + diff --git a/tgui/src/styles/nanotrasen.styl b/tgui/src/styles/nanotrasen.styl new file mode 100644 index 00000000000..d9fb1860034 --- /dev/null +++ b/tgui/src/styles/nanotrasen.styl @@ -0,0 +1,6 @@ +body.nanotrasen + background: data-url('images/nanotrasen.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + @import "components/*" diff --git a/tgui/src/styles/syndicate.styl b/tgui/src/styles/syndicate.styl new file mode 100644 index 00000000000..3c067c06dd3 --- /dev/null +++ b/tgui/src/styles/syndicate.styl @@ -0,0 +1,26 @@ +body.syndicate + color-highlight = black + background-color-start = #750000 + background-color-end = #340404 + rule-color-normal = dark-gray + titlebar-color-text = pale-red + titlebar-color-button = pale-red + display-color-background = alpha(#000, 0.5) + display-color-shadow = alpha(#000, 0.75) + notice-color-first = #750000 + notice-color-second = #910101 + section-color-label = white + bar-color-normal = black + bar-color-good = pale-green + bar-color-border = black + button-color-normal = dark-gray + button-color-disabled = gray + button-color-selected = dark-red + button-color-caution = yellow-orange + button-color-danger = yellow + + background: data-url('images/syndicate.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + @import "components/*" diff --git a/tgui/src/tgui.js b/tgui/src/tgui.js new file mode 100644 index 00000000000..99eddc4783d --- /dev/null +++ b/tgui/src/tgui.js @@ -0,0 +1,43 @@ +// Temporarily import Ractive first to keep it from detecting ie8's object.defineProperty shim, which it misuses (ractivejs/ractive#2343). +import Ractive from 'ractive' +Ractive.DEBUG = /minified/.test(() => {/* minified */}) + +import 'ie8' +import 'babel-polyfill' +import 'dom4' +import 'html5shiv' + +Object.assign(Math, require('util/math')) + +import WebFont from 'webfontloader' +WebFont.load({ + custom: { + families: [ 'FontAwesome' ], + urls: [ 'https://netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css' ], + testStrings: { FontAwesome: '\uf240' } + } +}) + +import TGUI from 'tgui.ract' +window.initialize = (dataString) => { + if (window.tgui) return + window.tgui = new TGUI({ + el: '#container', + data () { + const base = { + constants: require('util/constants') + } + const server = JSON.parse(dataString) + return Object.assign(base, server) + } + }) +} + +import { act } from 'util/byond' +const holder = document.getElementById('data') +if (holder.textContent !== '{}') { // If the JSON was inlined, load it. + window.initialize(holder.textContent) +} else { + act(holder.getAttribute('data-ref'), 'tgui:initialize') + holder.remove() +} diff --git a/tgui/src/tgui.ract b/tgui/src/tgui.ract new file mode 100644 index 00000000000..9b5b1f22c9e --- /dev/null +++ b/tgui/src/tgui.ract @@ -0,0 +1,69 @@ + + + + + + +{{{config.title}}} +
    + + +
    + diff --git a/tgui/src/tgui.styl b/tgui/src/tgui.styl new file mode 100644 index 00000000000..ddd205a5f95 --- /dev/null +++ b/tgui/src/tgui.styl @@ -0,0 +1,78 @@ +@charset "utf-8" + +white = white +pale-red = #e74242 +red = #b00e0e +dark-red = #9d0808 +yellow-orange = #be6209 +yellow = #9a9d00 +pale-green = #80ff80 +grass-green = #537d29 +green = #2f943c +royal-blue = #40628a +pale-blue = #8ba5c4 +black = black +dark-gray = #272727 +gray = #363636 +light-gray = #999999 + +// Branding Colors +color-normal = royal-blue +color-good = grass-green +color-average = yellow-orange +color-bad = red +color-highlight = pale-blue + +// Text +text-color-normal = white +text-color-inverse = black + +// Background +background-color-start = #2a2a2a +background-color-end = #202020 + +// Rules (
    etc) +rule-color-normal = royal-blue +rule-color-dark = dark-gray +rule-size = 2px + +// Titlebar +titlebar-color-text = pale-blue +titlebar-color-button = pale-blue +titlebar-color-background = gray +titlebar-color-shadow = alpha(#000, 0.1) + +// Resize +resize-color = gray + +// Display +display-color-title = white +display-color-background = alpha(#000, 0.33) +display-color-shadow = alpha(#000, 0.5) + +// Notice +notice-color-first = #bb9b68 +notice-color-second = #b1905d +notice-color-border = dark-gray + +// Section +section-color-label = pale-blue + +// Bar +bar-color-normal = color-normal +bar-color-good = color-good +bar-color-average = color-average +bar-color-bad = color-bad +bar-color-border = royal-blue +bar-color-background = dark-gray + +// Buttons +button-color-normal = royal-blue +button-color-disabled = light-gray +button-color-selected = green +button-color-caution = yellow +button-color-danger = dark-red +button-lighten-hover = 15% + +@require "util/*" +@require "styles/*" diff --git a/tgui/src/util/byond.js b/tgui/src/util/byond.js new file mode 100644 index 00000000000..beb3157809c --- /dev/null +++ b/tgui/src/util/byond.js @@ -0,0 +1,16 @@ +const encode = encodeURIComponent + +// Helper to generate a BYOND href given 'params' as an object (with an optional 'url' for eg winset). +export function href (params = {}, url = '') { + return `byond://${url}?` + Object.keys(params).map(key => `${encode(key)}=${encode(params[key])}`).join('&') +} + +// Helper to make a BYOND ui_act() call on the UI 'src' given an 'action' and optional 'params'. +export function act (src, action, params = {}) { + window.location.href = href(Object.assign({ src, action }, params)) +} + +// Helper to make a BYOND winset() call on 'window', setting 'key' to 'value' +export function winset (win, key, value) { + window.location.href = href({[`${win}.${key}`]: value}, 'winset') +} diff --git a/tgui/src/util/colors.styl b/tgui/src/util/colors.styl new file mode 100644 index 00000000000..d1f17a7768b --- /dev/null +++ b/tgui/src/util/colors.styl @@ -0,0 +1,10 @@ +.normal + color: color-normal +.good + color: color-good +.average + color: color-average +.bad + color: color-bad +.highlight + color: color-highlight diff --git a/tgui/src/util/constants.js b/tgui/src/util/constants.js new file mode 100644 index 00000000000..b7dac6eb67d --- /dev/null +++ b/tgui/src/util/constants.js @@ -0,0 +1,5 @@ +// Constants used in tgui; these are mirrored from the BYOND code. +export const UI_INTERACTIVE = 2 +export const UI_UPDATE = 1 +export const UI_DISABLED = 0 +export const UI_CLOSE = -1 diff --git a/tgui/styles/core/document.styl b/tgui/src/util/document.styl similarity index 51% rename from tgui/styles/core/document.styl rename to tgui/src/util/document.styl index ba2822cad88..fe207b92d48 100644 --- a/tgui/styles/core/document.styl +++ b/tgui/src/util/document.styl @@ -1,32 +1,34 @@ -html - box-sizing: border-box - min-height: 100% - margin: 0 - - cursor: default // Reset the cursor. - -// This really should be the default. -*, *:before, *:after - box-sizing: inherit - -body - min-height: 100% - height: 100% - margin: 0 6px - - background-color: colors.background-end; // Fallback for old browsers. - - font-family: font - font-size: fontsize - color: colors.text - -main - display: block - margin-top: 32px - padding-top: 3px - - -hr - height: 2px - background-color: colors.rule - border: none +html + box-sizing: border-box + min-height: 100% + margin: 0 + + cursor: default // Reset the cursor. + +// This really should be the default. +*, *:before, *:after + box-sizing: inherit + +body + min-height: 100% + height: 100% + margin: 0 6px + + font-family: Verdana, Geneva, sans-serif + font-size: 12px + color: text-color-normal + + background-color: background-color-start + background-image: linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + +main + display: block + margin-top: 32px + padding-top: 3px + +hr + height: rule-size + background-color: rule-color-normal + border: none diff --git a/tgui/src/util/dragresize.js b/tgui/src/util/dragresize.js new file mode 100644 index 00000000000..2e31702557d --- /dev/null +++ b/tgui/src/util/dragresize.js @@ -0,0 +1,49 @@ +import {winset} from './byond' + +function lock (x, y) { + if (x < 0) { // Left + x = 0 + } else if (x + window.innerWidth > window.screen.availWidth) { // Right + x = window.screen.availWidth - window.innerWidth + } + + if (y < 0) { // Top + y = 0 + } else if (y + window.innerHeight > window.screen.availHeight) { // Bottom + y = window.screen.availHeight - window.innerHeight + } + + return {x, y} +} + +function drag (event) { + event.preventDefault() + + if (this.get('x')) { + let x = (event.screenX - this.get('x')) + window.screenLeft + let y = (event.screenY - this.get('y')) + window.screenTop + if (this.get('config.locked')) ({x, y} = lock(x, y)) // Lock to primary monitor. + winset(this.get('config.window'), 'pos', `${x},${y}`) + } + this.set({ x: event.screenX, y: event.screenY }) +} + +function sane (x, y) { + x = Math.clamp(100, window.screen.width, x) + y = Math.clamp(100, window.screen.height, y) + return {x, y} +} + +function resize (event) { + event.preventDefault() + + if (this.get('x')) { + let x = (event.screenX - this.get('x')) + window.innerWidth + let y = (event.screenY - this.get('y')) + window.innerHeight + ;({x, y} = sane(x, y)) + winset(this.get('config.window'), 'size', `${x},${y}`) + } + this.set({ x: event.screenX, y: event.screenY }) +} + +export { drag, resize } diff --git a/tgui/src/util/header.styl b/tgui/src/util/header.styl new file mode 100644 index 00000000000..b7a98456197 --- /dev/null +++ b/tgui/src/util/header.styl @@ -0,0 +1,16 @@ +$h + display: inline-block + margin: 0 + padding: 6px 0 +h1 + @extend $h + font-size: 18px +h2 + @extend $h + font-size: 16px +h3 + @extend $h + font-size: 14px +h4 + @extend $h + font-size: 12px diff --git a/tgui/src/util/math.js b/tgui/src/util/math.js new file mode 100644 index 00000000000..39a4b0c4240 --- /dev/null +++ b/tgui/src/util/math.js @@ -0,0 +1,9 @@ +// Helper to limit a number to be inside 'min' and 'max'. +export function clamp (min, max, number) { + return Math.max(min, Math.min(number, max)) +} + +// Helper to round a number to 'decimals' decimals. +export function fixed (number, decimals = 1) { + return Number(Math.round(number + 'e' + decimals) + 'e-' + decimals) +} diff --git a/tgui/src/util/text.js b/tgui/src/util/text.js new file mode 100644 index 00000000000..cbad0ac0377 --- /dev/null +++ b/tgui/src/util/text.js @@ -0,0 +1,7 @@ +export function upperCaseFirst (str) { + return str[0].toUpperCase() + str.slice(1).toLowerCase() +} + +export function titleCase (str) { + return str.replace(/\w\S*/g, upperCaseFirst) +} diff --git a/tgui/styles/core/text.styl b/tgui/src/util/text.styl similarity index 79% rename from tgui/styles/core/text.styl rename to tgui/src/util/text.styl index 62541c38381..752bb120cce 100644 --- a/tgui/styles/core/text.styl +++ b/tgui/src/util/text.styl @@ -1,17 +1,17 @@ -// Helper to reset font options to default. -$fontReset - color: colors.text - font-size: fontsize - font-weight: normal - font-style: normal - text-decoration: none - -// Utility classes to set font styles. -.bold - font-weight: bold -.italic - font-style: italic - -// Make 'unselectable' text unselectable on all browsers. -[unselectable] - user-select: none +// Helper to reset font options to default. +$fontReset + color: text-color-normal + font-size: 12px + font-weight: normal + font-style: normal + text-decoration: none + +// Utility classes to set font styles. +.bold + font-weight: bold +.italic + font-style: italic + +// Make 'unselectable' text unselectable on all browsers. +[unselectable=on] + user-select: none diff --git a/tgui/styles/components/button.styl b/tgui/styles/components/button.styl deleted file mode 100644 index b65bdbdd153..00000000000 --- a/tgui/styles/components/button.styl +++ /dev/null @@ -1,30 +0,0 @@ -span.button - @extend $fontReset - display: inline-block - vertical-align: middle - height: 20px - line-height: 19px - padding: 0 5px - white-space: nowrap - - .fa - padding-right: 2px - - transition: background-color 0.25s, box-shadow 0.25s - &.normal - background-color: colors.normal - &:hover, &:focus - outline: 0 - box-shadow: inset 0 0 100px 100px alpha(#fff, colors.hover) - &.disabled - background-color: colors.disabled - &.selected - background-color: colors.selected - &.caution - background-color: colors.caution - &.danger - background-color: colors.danger - - &.gridable - width: 125px - margin: 2px 0 diff --git a/tgui/styles/components/notice.styl b/tgui/styles/components/notice.styl deleted file mode 100644 index 76c9b6b3580..00000000000 --- a/tgui/styles/components/notice.styl +++ /dev/null @@ -1,27 +0,0 @@ -@require "display" - -$noticeStripes - background-color: colors.notice1 // Fallback for old browers. - background-image: repeating-linear-gradient( - -45deg, - colors.notice1, - colors.notice1 10px, - colors.notice2 10px, - colors.notice2 20px - ) - -div.notice - @extend div.display, $noticeStripes - margin: 8px 0 - - box-shadow: none - - color: colors.textinverse - font-weight: bold - font-style: italic - - .button - outline: 1px solid colors.border - - .label - color: colors.textinverse diff --git a/tgui/styles/components/subdisplay.styl b/tgui/styles/components/subdisplay.styl deleted file mode 100644 index d4d20c96ee3..00000000000 --- a/tgui/styles/components/subdisplay.styl +++ /dev/null @@ -1,9 +0,0 @@ -div.subdisplay - width: 100% - margin: 0 - - header - @extend div.display header - - article - @extend div.display article diff --git a/tgui/styles/config.styl b/tgui/styles/config.styl deleted file mode 100644 index 0eb68db8a9e..00000000000 --- a/tgui/styles/config.styl +++ /dev/null @@ -1,8 +0,0 @@ -@charset "utf-8" - -// Fonts -font = Verdana, Geneva, sans-serif -fontsize = 12px - -// Colors -colors = json("../colors.json", {hash: true}) diff --git a/tgui/styles/core/clearfix.styl b/tgui/styles/core/clearfix.styl deleted file mode 100644 index 80f65910db0..00000000000 --- a/tgui/styles/core/clearfix.styl +++ /dev/null @@ -1,5 +0,0 @@ -$clearfix - &:after - content: "" - display: table - clear: both diff --git a/tgui/styles/core/colors.styl b/tgui/styles/core/colors.styl deleted file mode 100644 index ae588547b89..00000000000 --- a/tgui/styles/core/colors.styl +++ /dev/null @@ -1,14 +0,0 @@ -.normal - color: colors.normal -.good - color: colors.good -.average - color: colors.average -.bad - color: colors.bad -.highlight - color: colors.highlight -.label - color: colors.label -.dark - color: colors.dark diff --git a/tgui/styles/core/header.styl b/tgui/styles/core/header.styl deleted file mode 100644 index cd3f7c85368..00000000000 --- a/tgui/styles/core/header.styl +++ /dev/null @@ -1,16 +0,0 @@ -$h - display: inline-block - margin: 0 - padding: 6px 0 -h1 - @extend $h - font-size: fontsize + 6px -h2 - @extend $h - font-size: fontsize + 4px -h3 - @extend $h - font-size: fontsize + 2px -h4 - @extend $h - font-size: fontsize diff --git a/tgui/styles/main.styl b/tgui/styles/main.styl deleted file mode 100644 index 400ea3a6432..00000000000 --- a/tgui/styles/main.styl +++ /dev/null @@ -1,5 +0,0 @@ -@require "config" - -@require "core/*" -@require "components/*" -@require "styles/*" diff --git a/tgui/styles/styles/generic.styl b/tgui/styles/styles/generic.styl deleted file mode 100644 index ff2bf29a7e3..00000000000 --- a/tgui/styles/styles/generic.styl +++ /dev/null @@ -1,4 +0,0 @@ -body.generic - background: linear-gradient(to bottom, - colors.background-start 0%, - colors.background-end 100%) diff --git a/tgui/styles/styles/nanotrasen.styl b/tgui/styles/styles/nanotrasen.styl deleted file mode 100644 index 0625ef88dff..00000000000 --- a/tgui/styles/styles/nanotrasen.styl +++ /dev/null @@ -1,5 +0,0 @@ -body.nanotrasen - background: data-url('nanotrasen.svg') no-repeat fixed center/70% 70%, - linear-gradient(to bottom, - colors.background-start 0%, - colors.background-end 100%) diff --git a/tgui/tgui.html b/tgui/tgui.html index 162a31592b3..1bf4e45a179 100644 --- a/tgui/tgui.html +++ b/tgui/tgui.html @@ -1,34 +1,35 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - - - - + + + + + + + + + + + +
    +
    + Loading...
    +
    +
    + + + diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php new file mode 100644 index 00000000000..26a08418d69 --- /dev/null +++ b/tools/github_webhook_processor.php @@ -0,0 +1,345 @@ +getLine()}: " . htmlSpecialChars($e->getMessage()); + die(); +}); +$rawPost = NULL; +if ($hookSecret !== NULL) { + if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) { + throw new \Exception("HTTP header 'X-Hub-Signature' is missing."); + } elseif (!extension_loaded('hash')) { + throw new \Exception("Missing 'hash' extension to check the secret code validity."); + } + list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', ''); + if (!in_array($algo, hash_algos(), TRUE)) { + throw new \Exception("Hash algorithm '$algo' is not supported."); + } + $rawPost = file_get_contents('php://input'); + if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) { + throw new \Exception('Hook secret does not match.'); + } +} +if (!isset($_SERVER['HTTP_CONTENT_TYPE'])) { + throw new \Exception("Missing HTTP 'Content-Type' header."); +} elseif (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) { + throw new \Exception("Missing HTTP 'X-Github-Event' header."); +} +switch ($_SERVER['HTTP_CONTENT_TYPE']) { + case 'application/json': + $json = $rawPost ?: file_get_contents('php://input'); + break; + case 'application/x-www-form-urlencoded': + $json = $_POST['payload']; + break; + default: + throw new \Exception("Unsupported content type: $_SERVER[HTTP_CONTENT_TYPE]"); +} +# Payload structure depends on triggered event +# https://developer.github.com/v3/activity/events/types/ +$payload = json_decode($json, true); + +switch (strtolower($_SERVER['HTTP_X_GITHUB_EVENT'])) { + case 'ping': + echo 'pong'; + break; + case 'pull_request': + handle_pr($payload); + break; + default: + header('HTTP/1.0 404 Not Found'); + echo "Event:$_SERVER[HTTP_X_GITHUB_EVENT] Payload:\n"; + print_r($payload); # For debug only. Can be found in GitHub hook log. + die(); +} +function handle_pr($payload) { + $action = 'opened'; + switch ($payload["action"]) { + case 'opened': + case 'reopened': + $action = $payload['action']; + break; + case 'closed': + if (!$payload['pull_request']['merged']) { + $action = 'closed'; + } + else { + $action = 'merged'; + checkchangelog($payload, true); + } + break; + default: + return; + } + + if (strtolower(substr($payload['pull_request']['title'], 0, 3)) == '[s]') { + echo "PR Announcement Halted; Secret tag detected.\n"; + return; + } + + $msg = 'Pull Request '.$action.' by '.htmlSpecialChars($payload['sender']['login']).': '.htmlSpecialChars('#'.$payload['pull_request']['number'].' '.$payload['pull_request']['user']['login'].' - '.$payload['pull_request']['title']).''; + sendtoallservers('?announce='.urlencode($msg)); + +} + +function checkchangelog($payload, $merge = false) { + global $apiKey; + if (!$merge) + return; + if (!isset($payload['pull_request']) || !isset($payload['pull_request']['body'])) { + return; + } + if (!isset($payload['pull_request']['user']) || !isset($payload['pull_request']['user']['login'])) { + return; + } + $body = $payload['pull_request']['body']; + $body = str_replace("\r\n", "\n", $body); + $body = explode("\n", $body); + $username = $payload['pull_request']['user']['login']; + $incltag = false; + $changelogbody = array(); + $currentchangelogblock = array(); + $foundcltag = false; + foreach ($body as $line) { + $line = trim($line); + if (substr($line,0,4) == ':cl:') { + $incltag = true; + $foundcltag = true; + $pos = strpos($line, " "); + if ($pos) + $username = substr($line, $pos+1); + continue; + } else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:') { + $incltag = false; + $changelogbody = array_merge($changelogbody, $currentchangelogblock); + continue; + } + if (!$incltag) + continue; + + $firstword = explode(' ', $line)[0]; + $pos = strpos($line, " "); + $item = ''; + if ($pos) { + $firstword = trim(substr($line, 0, $pos)); + $item = trim(substr($line, $pos+1)); + } else { + $firstword = $line; + } + + if (!strlen($firstword)) { + $currentchangelogblock[count($currentchangelogblock)-1]['body'] .= "\n"; + continue; + } + //not a prefix line. + //so we add it to the last changelog entry as a separate line + if (!strlen($firstword) || $firstword[strlen($firstword)-1] != ':') { + if (count($currentchangelogblock) <= 0) + continue; + $currentchangelogblock[count($currentchangelogblock)-1]['body'] .= "\n".$line; + continue; + } + $cltype = strtolower(substr($firstword, 0, -1)); + switch ($cltype) { + case 'fix': + case 'fixes': + case 'bugfix': + $currentchangelogblock[] = array('type' => 'bugfix', 'body' => $item); + break; + case 'wip': + $currentchangelogblock[] = array('type' => 'wip', 'body' => $item); + break; + case 'rsctweak': + case 'tweaks': + case 'tweak': + $currentchangelogblock[] = array('type' => 'tweak', 'body' => $item); + break; + case 'soundadd': + $currentchangelogblock[] = array('type' => 'soundadd', 'body' => $item); + break; + case 'sounddel': + $currentchangelogblock[] = array('type' => 'sounddel', 'body' => $item); + break; + case 'add': + case 'adds': + case 'rscadd': + $currentchangelogblock[] = array('type' => 'rscadd', 'body' => $item); + break; + case 'del': + case 'dels': + case 'rscdel': + $currentchangelogblock[] = array('type' => 'rscdel', 'body' => $item); + break; + case 'imageadd': + $currentchangelogblock[] = array('type' => 'imageadd', 'body' => $item); + break; + case 'imagedel': + $currentchangelogblock[] = array('type' => 'imagedel', 'body' => $item); + break; + case 'typo': + case 'spellcheck': + $currentchangelogblock[] = array('type' => 'spellcheck', 'body' => $item); + break; + case 'experimental': + case 'experiment': + $currentchangelogblock[] = array('type' => 'experiment', 'body' => $item); + break; + case 'tgs': + $currentchangelogblock[] = array('type' => 'tgs', 'body' => $item); + break; + default: + //we add it to the last changelog entry as a separate line + if (count($currentchangelogblock) > 0) + $currentchangelogblock[count($currentchangelogblock)-1]['body'] .= "\n".$line; + break; + } + } + + if (!count($changelogbody)) + return; + + $file = 'author: '.$username."\n"; + $file .= "delete-after: True\n"; + $file .= "changes: \n"; + foreach ($changelogbody as $changelogitem) { + $type = $changelogitem['type']; + $body = trim(str_replace(array("\\", '"'), array("\\\\", "\\\""), $changelogitem['body'])); + $file .= ' - '.$type.': "'.$body.'"'; + $file .= "\n"; + } + $content = array ( + 'message' => 'Automatic changelog generation for PR #'.$payload['pull_request']['number'], + 'content' => base64_encode($file) + ); + $scontext = array('http' => array( + 'method' => 'PUT', + 'header' => + "Content-type: application/json\r\n". + 'Authorization: token ' . $apiKey, + 'content' => json_encode($content), + 'ignore_errors' => true, + 'user_agent' => 'tgstation13.org-Github-Automation-Tools' + )); + $filename = '/html/changelogs/AutoChangeLog-pr-'.$payload['pull_request']['number'].'.yml'; + echo file_get_contents($payload['pull_request']['base']['repo']['url'].'/contents'.$filename, false, stream_context_create($scontext)); +} + +function sendtoallservers($str) { + global $servers; + foreach ($servers as $serverid => $server) { + if (isset($server['comskey'])) + $rtn = export($server['address'], $server['port'], $str.'&key='.$server['comskey']); + else + $rtn = export($server['address'], $server['port'], $str); + + echo "Server Number $serverid replied: $rtn\n"; + } +} + + + +function export($addr, $port, $str) { + global $error; + // All queries must begin with a question mark (ie "?players") + if($str{0} != '?') $str = ('?' . $str); + + /* --- Prepare a packet to send to the server (based on a reverse-engineered packet structure) --- */ + $query = "\x00\x83" . pack('n', strlen($str) + 6) . "\x00\x00\x00\x00\x00" . $str . "\x00"; + + /* --- Create a socket and connect it to the server --- */ + $server = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or exit("ERROR"); + socket_set_option($server, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 2, 'usec' => 0)); //sets connect and send timeout to 2 seconds + if(!socket_connect($server,$addr,$port)) { + $error = true; + return "ERROR"; + } + + + /* --- Send bytes to the server. Loop until all bytes have been sent --- */ + $bytestosend = strlen($query); + $bytessent = 0; + while ($bytessent < $bytestosend) { + //echo $bytessent.'
    '; + $result = socket_write($server,substr($query,$bytessent),$bytestosend-$bytessent); + //echo 'Sent '.$result.' bytes
    '; + if ($result===FALSE) die(socket_strerror(socket_last_error())); + $bytessent += $result; + } + + /* --- Idle for a while until recieved bytes from game server --- */ + $result = socket_read($server, 10000, PHP_BINARY_READ); + socket_close($server); // we don't need this anymore + + if($result != "") { + if($result{0} == "\x00" || $result{1} == "\x83") { // make sure it's the right packet format + + // Actually begin reading the output: + $sizebytes = unpack('n', $result{2} . $result{3}); // array size of the type identifier and content + $size = $sizebytes[1] - 1; // size of the string/floating-point (minus the size of the identifier byte) + + if($result{4} == "\x2a") { // 4-byte big-endian floating-point + $unpackint = unpack('f', $result{5} . $result{6} . $result{7} . $result{8}); // 4 possible bytes: add them up together, unpack them as a floating-point + return $unpackint[1]; + } + else if($result{4} == "\x06") { // ASCII string + $unpackstr = ""; // result string + $index = 5; // string index + + while($size > 0) { // loop through the entire ASCII string + $size--; + $unpackstr .= $result{$index}; // add the string position to return string + $index++; + } + return $unpackstr; + } + } + } + //if we get to this point, something went wrong; + $error = true; + return "ERROR"; +} +?>